Jenkins failover
Let's stop the service and observe Swarm in action. To do that, we need to find out the node it is running in, point our Docker client to it, and remove the container:
NODE=$(docker service ps \
-f desired-state=running jenkins \
| tail -n +2 | awk '{print $4}')
eval $(docker-machine env $NODE)
docker rm -f $(docker ps -qa \
-f label=com.docker.swarm.service.name=jenkins)
We listed Jenkins processes and applied the filter that will return only the one with the desired state running docker service ps -f desired-state=running jenkins
. The output was piped to the tail command that removed the header tail -n +2
and, later on, piped again to the awk
command that limited the output to the fourth column awk '{print $4}'
that contains the node the process is running in. The final result was stored in the NODE
variable.
Later on, we used the eval command to create environment variables that will be used by our Docker client to operate the remote engine. Finally, we retrieved...