Post

코드 배포에 대한 노트 (Jenkins)

Jenkins 를 통해 Capistrano 로 프로젝트 배포

코드 배포에 대한 노트 (Jenkins)

이 블로그 시작 전부터 한 번 정리해봐야겠다는 생각을 했던 주제입니다. 배포에 대한 모든 내용을 담는 것은 불가능할테니, 부분부분 짚고 넘어가면 좋을만한 주제들을 가져와서 적어보려고 합니다. 저 또한 모르는 부분이 많고, 또 잘못 알고 있는 부분도 있을 것인데요. 설명이 부족하거나 틀린 내용이 있다면 댓글로 의견 남겨주시기 바랍니다.

Jenkins 를 통한 프로젝트 배포

모두 다 잘 아시는 얘기로 시작합니다. 코드 배포를 위해 Jenkins(CI/CD), Capistrano(deployment tool)를 활용합니다. Jenkins 에서 ‘Deploy 서비스’ 라는 아이템(프로젝트라고도 칭함)를 실행(build)하면 아래 코드가 실행되며 배포가 진행됩니다.

1
source ~/.bash_profile && cd ~/배포할 프로젝트 && bundle exec cap production deploy
  • source ~/.bash_profile : 배포 과정에서 필요한 환경 변수 설정 (export PATH=…)
  • bundle exec cap production deploy : Capistrano 루비 gem 을 사용하여 ‘production’ 환경에 맞게 배포

맨 마지막 cap 명령어를 보면 deploy 할 환경을 production 으로 설정하는데요. 테스트(staging) 환경의 Jenkins 가보시면, 명령어에 추가로 --trace 가 붙어있습니다. 테스트 환경 배포 시에는 trace 를 통해 배포 단계를 더 상세히 남깁니다. capistrano 공식 문서에 보면 ‘trace through task invocations’ 라고 설명했네요.

그렇기 때문에,

cap 실행 시 어떤 일이 일어나는지를 보고 싶다면, staging Jenkins 의 Console Output 를 보시면 좋습니다.

Jenkins 에서의 배포 실행 코드는 어디서, 어떻게 실행되나?

Jenkins 에 등록된 SSH Server 인 deploy 서버에 접속하여 실행됩니다. 이 서버에 대한 정보는 Jenkins 의 설정 페이지 [ Manage Jenkins - System - SSH Servers ] 에서 확인할 수 있습니다. 위 페이지로 이동하여 ‘Hostname’ 을 확인해보면 xx-deploy 인데요. 이 hostname 으로 SSH 접속은 어떻게 가능할까요?

환경별로 분리해둔 서버(staging nv)를 접속해서, 어떤 도커들이 띄워져있는지 확인해봅니다.

1
docker ps

위 결과로 나온 텍스트를 보면,xx-jenkins 젠킨스 도커와 xx-deploy deploy 도커가 함께 떠있습니다. 그래서 젠킨스가 띄워져있는 서버에서 deploy 도커로 SSH 접속이 가능합니다. deploy 도커에 접속하여 확인해보면,

1
2
3
docker exec -it xx-deploy /bin/bash
# 도커 접속
ps aux | grep sshd

젠킨스가 SSH 접속을 통해 배포 코드를 deploy 도커 내부에서 실행하므로, SSH 접속을 위한 데몬 sshd 프로세스가 실행 중임을 확인해볼 수 있습니다.

각 도커 정보는 docker/production/docker-compose/jenkins.yml 에서 확인 가능합니다.

결론

위 내용을 통해 Jenkins 에서의 배포 코드가 어디서 어떻게 실행되는지 간단히 살펴봤습니다. 이제 Jenkins 가 실행하는 배포 코드를 deploy 도커에 접속하여 직접 실행할 수 있게 됐습니다!


This post is licensed under CC BY 4.0 by the author.