GitHub Action으로 Jenkins에 요청보내기

LJH·2021년 12월 6일
1

💡 GitHub에 Push 후 Jenkins 에서 빌드버튼을 눌러야 배포가 진행된다. 이 부분까지 자동화 해보자.

#시도 - 1

GitHub Webhook 생성

  • URL에 /github-webhook/ 부분을 빼먹으면 안된다. 슬래쉬 하나라도 빠지면 오류난다.

젠킨스 설정

  • deploy → 구성 → 소스코드관리 → Git 선택 후 저장소 추가
  • 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 된 이후 젠킨스가 동작하도록 해야한다.


#시도 - 2

설정 추가

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 Action 스크립트에서 트리거 설정을 추가한다.

문제

  • GitHub Action은 문제없이 빌드된다. 하지만 젠킨스에서 아무런 반응이 없다.

#시도 - 3

  • GitHub Webhook 트리거 조건 중 Workflow jobs, Workflow runs 라는게 있다.
    설명을보면 Worklflow가 시작되거나 완료되었을 때 동작한다! 라고 되어있어서
    Github Action Workflow가 다 돌면 트리거 되겠구나 싶었다.

  • 하지만 동작하지 않았다. 공식문서를 봐도 이해가 가지 않는다.


#성공

젠킨스 API Token 발급

  • 대시보드 → 사람 → 계정 선택 → 설정
  • Add new Token을 클릭후 나오는 텍스트 칸에 아무거나 적고 토큰을 생성할 수 있다.

yml파일

- 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

    • 대시보드 → 사람 에서 나오는 User ID를 적으면 된다.
  • token

    • 위에서 발급받은 토큰값을 넣어주면 된다.
  • job

    • 아이템의 이름을 의미한다.

#마무리

  • 이제 GitHub에 Push만 하면 빌드, 테스트, 배포가 자동으로 진행된다

  • 중간에 Jenkins 서버의 workspace 디렉토리에 문제가 있었는데 이건 따로 포스팅할 예정이다.

  • 아무튼 현재까지도 잘 쓰고 있다. 젠킨스 인스턴스 때문에 매달 비용이 발생하긴 하지만
    배포시 정말 편리하고, 한번쯤은 어떤 툴을 이용해서든 CI/CD 파이프라인 구축 경험을
    해보는것에 의미가 있다고 생각한다.

0개의 댓글