Skip to content

Instantly share code, notes, and snippets.

@vfarcic
Last active January 25, 2019 12:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vfarcic/338e8f2baf2f0c9aa1ebd70daac31899 to your computer and use it in GitHub Desktop.
Save vfarcic/338e8f2baf2f0c9aa1ebd70daac31899 to your computer and use it in GitHub Desktop.
cd cloud-provisioning
git pull
cd terraform/aws-full
export AWS_ACCESS_KEY_ID=[...]
export AWS_SECRET_ACCESS_KEY=[...]
export AWS_DEFAULT_REGION=us-east-1
packer build -machine-readable \
packer-ubuntu-docker.json \
| tee packer-ubuntu-docker.log
export TF_VAR_aws_access_key=$AWS_ACCESS_KEY_ID
export TF_VAR_aws_secret_key=$AWS_SECRET_ACCESS_KEY
export TF_VAR_aws_default_region=$AWS_DEFAULT_REGION
export KEY_PATH=$HOME/.ssh/devops21.pem
cp $KEY_PATH devops21.pem
export TF_VAR_swarm_ami_id=$(\
grep 'artifact,0,id' \
packer-ubuntu-docker.log \
| cut -d: -f2)
terraform apply \
-target aws_instance.swarm-manager \
-var swarm_init=true \
-var swarm_managers=1
export TF_VAR_swarm_manager_token=$(ssh \
-i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_1_public_ip) \
docker swarm join-token -q manager)
export TF_VAR_swarm_manager_ip=$(terraform \
output swarm_manager_1_private_ip)
terraform apply \
-target aws_instance.swarm-manager
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_1_public_ip)
docker node ls
docker network create --driver overlay proxy
curl -o proxy-stack.yml \
https://raw.githubusercontent.com/\
vfarcic/docker-flow-proxy/master/docker-compose-stack.yml
docker stack deploy \
-c proxy-stack.yml proxy
exit
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_1_public_ip)
docker service create --name jenkins \
-e JENKINS_OPTS="--prefix=/jenkins" \
--label com.df.notify=true \
--label com.df.distribute=true \
--label com.df.servicePath=/jenkins \
--label com.df.port=8080 \
--network proxy \
--reserve-memory 300m \
jenkins/jenkins:2.161-alpine
exit
open "http://$(terraform output swarm_manager_1_public_ip)/jenkins"
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_1_public_ip)
docker service ps jenkins
JENKINS_IP=$(docker service ps jenkins \
| tail -n 1 \
| awk '{ print $4 }' \
| cut -c 4- \
| tr "-" ".")
JENKINS_ID=$(docker -H tcp://$JENKINS_IP:2375 \
ps -q \
--filter label=com.docker.swarm.service.name=jenkins)
docker -H tcp://$JENKINS_IP:2375 \
exec -it $JENKINS_ID \
cat /var/jenkins_home/secrets/initialAdminPassword
docker -H tcp://$JENKINS_IP:2375 \
rm -f $JENKINS_ID
docker service ps jenkins
docker service rm jenkins
exit
open "https://console.aws.amazon.com/efs/home?region=$AWS_DEFAULT_REGION"
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_1_public_ip)
sudo mkdir -p /mnt/efs
sudo mount -t nfs4 \
-o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \
fs-07538d4e.efs.us-east-1.amazonaws.com:/ \
/mnt/efs
sudo mkdir -p /mnt/efs/jenkins
sudo chmod 777 /mnt/efs/jenkins
exit
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_2_public_ip)
sudo mkdir -p /mnt/efs
sudo mount -t nfs4 \
-o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \
fs-07538d4e.efs.us-east-1.amazonaws.com:/ \
/mnt/efs
exit
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_3_public_ip)
sudo mkdir -p /mnt/efs
sudo mount -t nfs4 \
-o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \
fs-07538d4e.efs.us-east-1.amazonaws.com:/ \
/mnt/efs
exit
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_1_public_ip)
docker service create --name jenkins \
-e JENKINS_OPTS="--prefix=/jenkins" \
--mount "type=bind,source=/mnt/efs/jenkins,target=/var/jenkins_home" \
--label com.df.notify=true \
--label com.df.distribute=true \
--label com.df.servicePath=/jenkins \
--label com.df.port=8080 \
--network proxy \
--reserve-memory 300m \
jenkins/jenkins:2.161-alpine
docker service ps jenkins
exit
open "http://$(terraform output swarm_manager_1_public_ip)/jenkins"
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_1_public_ip)
cat /mnt/efs/jenkins/secrets/initialAdminPassword
JENKINS_IP=$(docker service ps jenkins \
| tail -n 1 \
| awk '{ print $4 }' \
| cut -c 4- \
| tr "-" ".")
JENKINS_ID=$(docker -H tcp://$JENKINS_IP:2375 \
ps -q \
--filter label=com.docker.swarm.service.name=jenkins)
docker -H tcp://$JENKINS_IP:2375 \
rm -f $JENKINS_ID
docker service ps jenkins
docker service rm jenkins
exit
terraform output security_group_id
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_1_public_ip)
export AWS_ACCESS_KEY_ID=[...]
export AWS_SECRET_ACCESS_KEY=[...]
export AWS_DEFAULT_REGION=[...]
export AWS_SECURITY_GROUP=[...]
docker plugin install rexray/efs \
--grant-all-permissions \
EFS_ACCESSKEY=${AWS_ACCESS_KEY_ID} \
EFS_SECRETKEY=${AWS_SECRET_ACCESS_KEY} \
EFS_REGION=${AWS_DEFAULT_REGION} \
EFS_SECURITYGROUPS=${AWS_SECURITY_GROUP} \
EFS_TAG="rexray"
docker plugin ls
docker service create --name jenkins \
-e JENKINS_OPTS="--prefix=/jenkins" \
--mount "type=volume,source=jenkins,target=/var/jenkins_home,volume-driver=rexray/efs" \
--label com.df.notify=true \
--label com.df.distribute=true \
--label com.df.servicePath=/jenkins \
--label com.df.port=8080 \
--network proxy \
--reserve-memory 300m \
jenkins/jenkins:2.161-alpine
docker volume ls
exit
open "https://console.aws.amazon.com/efs/home?region=$AWS_DEFAULT_REGION"
open "http://$(terraform output swarm_manager_1_public_ip)/jenkins"
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_1_public_ip)
docker run -it --rm \
--volume-driver rexray/efs \
-v jenkins:/var/jenkins_home \
alpine cat /var/jenkins_home/secrets/initialAdminPassword
JENKINS_IP=$(docker service ps jenkins | tail -n 1 \
| awk '{ print $4 }' | cut -c 4- | tr "-" ".")
JENKINS_ID=$(docker -H tcp://$JENKINS_IP:2375 \
ps -q \
--filter label=com.docker.swarm.service.name=jenkins)
docker -H tcp://$JENKINS_IP:2375 \
rm -f $JENKINS_ID
docker service ps jenkins
docker service rm jenkins
docker volume rm jenkins
exit
ssh -i devops21.pem \
ubuntu@$(terraform output \
swarm_manager_1_public_ip)
docker network create --driver overlay go-demo
for i in 1 2 3; do
docker service create --name go-demo-db-rs$i \
--reserve-memory 100m \
--network go-demo \
mongo:3.2.10 mongod --replSet "rs0"
done
docker service ls
docker service create --name go-demo-db-util \
--reserve-memory 100m \
--network go-demo \
--mode global \
mongo:3.2.10 sleep 100000
UTIL_ID=$(docker ps -q \
--filter label=com.docker.swarm.service.name=go-demo-db-util)
docker exec -it $UTIL_ID sh
mongo --host go-demo-db-rs1 --eval '
rs.initiate({
_id: "rs0",
version: 1,
members: [
{_id: 0, host: "go-demo-db-rs1" },
{_id: 1, host: "go-demo-db-rs2" },
{_id: 2, host: "go-demo-db-rs3" }
]
})
'
mongo --host go-demo-db-rs1 --eval 'rs.conf()'
mongo --host go-demo-db-rs1 --eval 'rs.status()'
mongo --host go-demo-db-rs1
use test
db.books.insert(
{
title:"The DevOps 2.0 Toolkit"
}
)
db.books.insert(
{
title:"The DevOps 2.1 Toolkit"
}
)
db.books.find()
exit # Mongo
exit # go-demo-db-util
RS1_IP=$(docker service ps go-demo-db-rs1 \
| tail -n 1 \
| awk '{ print $4 }' \
| cut -c 4- \
| tr "-" ".")
docker -H tcp://$RS1_IP:2375 ps
RS1_ID=$(docker -H tcp://$RS1_IP:2375 \
ps -q \
--filter label=com.docker.swarm.service.name=go-demo-db-rs1)
docker -H tcp://$RS1_IP:2375 rm -f $RS1_ID
docker service ps go-demo-db-rs1
docker exec -it $UTIL_ID sh
mongo --host go-demo-db-rs1 --eval 'rs.status()'
mongo --host go-demo-db-rs2
use test
db.books.find()
exit # Mongo
exit # go-demo-db-util
docker service rm go-demo-db-rs1 \
go-demo-db-rs2 go-demo-db-rs3 \
go-demo-db-util
for i in 1 2 3; do
docker service create --name go-demo-db-rs$i \
--reserve-memory 100m \
--network go-demo \
mongo:3.2.10 mongod --replSet "rs0"
MEMBERS="$MEMBERS go-demo-db-rs$i"
done
docker service create --name go-demo-db-init \
--restart-condition none \
--network go-demo \
vfarcic/mongo-devops21 $MEMBERS
docker service ls
DB_INIT_IP=$(docker service ps go-demo-db-init \
| tail -n 1 \
| awk '{ print $4 }' \
| cut -c 4- \
| tr "-" ".")
DB_INIT_ID=$(docker -H tcp://$DB_INIT_IP:2375 \
ps -aq \
--filter label=com.docker.swarm.service.name=go-demo-db-init)
docker -H tcp://$DB_INIT_IP:2375 logs $DB_INIT_ID
docker service create --name go-demo \
-e DB="go-demo-db-rs1,go-demo-db-rs2,go-demo-db-rs3" \
--reserve-memory 10m \
--network go-demo \
--network proxy \
--replicas 3 \
--label com.df.notify=true \
--label com.df.distribute=true \
--label com.df.servicePath=/demo \
--label com.df.port=8080 \
vfarcic/go-demo:1.2
docker service ps go-demo
docker service rm jenkins
docker volume rm jenkins
exit
terraform destroy -force
@alshabib
Copy link

line 347 should kick off jenkins:

docker service create --name jenkins -e JENKINS_OPTS="--prefix=/jenkins" --mount "type=volume,source=jenkins,target=/var/jenkins_home,volume-driver=rexray" --label com.df.notify=true --label com.df.distribute=true --label com.df.servicePath=/jenkins --label com.df.port=8080 --network proxy --reserve-memory 300m jenkins:2.7.4-alpine

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment