docker swarm 의 service들을 효과적으로 배포하기위해서 shell script를 적극적으로 사용하여 로직구성을 해야되겠다는 판단이 들었다. jenkins의 plugin 중 Managed Scripts 에 관한 정보는 이전포스트 jenkins로 배포하기 - nodejs-2 를 참고하자. 일단 전체적인 프로세스는 다음과 같다.
배포하고자하는 프로젝트에 Dockerfile 을 생성한다 ( dockerize )
형상관리( git ) 에 변경사항 반영한다.
empty 프로젝트를 기반으로 service를 생성한다 ( service update를 위해 )
jenkins에서 build 시 Dockerfile을 기반으로 image build를 시작한다.
build 된 image를 docker private registry에 push 한다.
docker private registry에 push된 image를 기반으로 service update한다.
empty image service 를 생성후 jenkins 에서 service 를 update 를 하는 이유는, service update시 stack에 구성된 환경설정은 그대로 유지되고 image만 교체되기때문에 stack에 정의된 같은 환경으로 구성된 service들과의 동일 설정정보를 항상 유지할수있는 이점이 있어서다.
verify: Waiting 5 seconds to verify that tasks are stable...
verify: Waiting 4 seconds to verify that tasks are stable...
verify: Waiting 3 seconds to verify that tasks are stable...
verify: Waiting 2 seconds to verify that tasks are stable...
verify: Waiting 1 seconds to verify that tasks are stable...
verify: Service converged
Finished: SUCCESS
정상적으로 service 배포가되었는지 확인해보자.
1
2
3
4
5
6
7
8
9
$ docker service ps setyourmindpark_service_backend
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
l27yump8rk60 setyourmindpark_service_backend.1 setyourmindpark:5000/setyourmindpark_backend:180213123413 backend1 Running Running less than a second ago
ksblqm51aqne \_ setyourmindpark_service_backend.1 setyourmindpark/debian-node:8 backend1 Shutdown Shutdown less than a second ago
p7a28d4rq4t3 setyourmindpark_service_backend.2 setyourmindpark:5000/setyourmindpark_backend:180213123413 backend1 Running Running less than a second ago
2qv9ll1qmz2q \_ setyourmindpark_service_backend.2 setyourmindpark/debian-node:8 backend1 Shutdown Shutdown less than a second ago
tlbf6gdgijvv setyourmindpark_service_backend.3 setyourmindpark:5000/setyourmindpark_backend:180213123413 backend1 Running Running less than a second ago
iy5l21fe264l \_ setyourmindpark_service_backend.3 setyourmindpark/debian-node:8 backend1 Shutdown Shutdown less than a second ago