deploy → 구성 → 빌드 유발 → GitHub hook ~ 체크
빌드 후 조치에 명령어 추가
docker rm $(docker ps -a -q) // 컨테이너 전체 삭제
docker rmi $(docker images -q) // 이미지 전체 삭제
위처럼 설정하면 push 이벤트 발생 시 젠킨스에서 빌드하고 배포가 자동으로 잘 이루어진다.
하지만 나는 GitHub Action을 이용해 테스트, 빌드, Docker Image push 등을 하도록 설정했다.
따라서 수정된 코드의 Docker Image가 Docker Hub에 push되기전에 Webhook 트리거가 동작해서 젠킨스에서 배포가 시작되버려서 현재 버전이 재배포되는 형태가 된다.
결론은 GitHub Webhook 트리거를 직접 생성하는게 아니라 GitHub Action에서 Docker Hub에 이미지가 push 된 이후 젠킨스가 동작하도록 해야한다.
Workflow Webhook Action - GitHub Marketplace
deploy.yaml
- name: Invoke deployment webhook
uses: distributhor/workflow-webhook@v2
env:
webhook_url: ${{ secrets.WEBHOOK_URL }}
webhook_secret: ${{ secrets.WEBHOOK_SECRET }}
GitHub Webhook 트리거 조건 중 Workflow jobs, Workflow runs 라는게 있다.
설명을보면 Worklflow가 시작되거나 완료되었을 때 동작한다! 라고 되어있어서
Github Action Workflow가 다 돌면 트리거 되겠구나 싶었다.
하지만 동작하지 않았다. 공식문서를 봐도 이해가 가지 않는다.
- name: trigger jenkins job.
uses: appleboy/jenkins-action@master
with:
url: ${{ secrets.WEBHOOK_URL }}
user: "cqre"
token: ${{ secrets.JENKINS_API_TOKEN }}
job: "cqre_deploy"
url
젠킨스 서버의 주소와 포트번호를 적어주면된다.
기존에 WEBHOOK 만들때 url을 http://[서버주소]:[포트번호]/github-webhook/
처럼 만들었는데 여기서는 아니다. 그냥 http://[서버주소]:[포트번호]
만 적으면 된다.
user
token
job
이제 GitHub에 Push만 하면 빌드, 테스트, 배포가 자동으로 진행된다
중간에 Jenkins 서버의 workspace 디렉토리에 문제가 있었는데 이건 따로 포스팅할 예정이다.
아무튼 현재까지도 잘 쓰고 있다. 젠킨스 인스턴스 때문에 매달 비용이 발생하긴 하지만
배포시 정말 편리하고, 한번쯤은 어떤 툴을 이용해서든 CI/CD 파이프라인 구축 경험을
해보는것에 의미가 있다고 생각한다.