Infra/CI, CD

[Jenkins] Jenkins, Github 연동 → branch merge 후 Jenkins 자동 빌드

민돌v 2023. 4. 3. 18:30
728x90
깃허브와 Jenkins 를 연동해보자,, 웹 훅킹으로 merge 시 자동 빌드까지..!

 

===== Jenkins 간단 CI/CD 구축해보기 Series.  =====

 

 

 

 

이전에 bitbucket 과 jenkins 의 웹훅을 이용한 연결을 시도해보았는데 

이번에는 사이드 프로젝트를 진행하면서 Github를 사용하기 때문에  깃허브 와 Jenkins 를 연동해보고자 합니다.

jenkins github webhook 연동하기

 

순서대로 쭉쭉쭉 가봅시다! 레츠고!

 

 

[목차]

  1. Github organization Token 생성
  2. Jenkins credentials 등록
  3. Jenkins Job 과 Github 레포지토리 연결
  4. Github 이벤트 발행 시 젠킨스 빌드 자동화 연결
  5. Jenkins Git Webhook 로그 추적 방법 

 

 


 

1. Github Token 생성

Private 저장소가 아니라 Public 저장소를 사용하면 해당 단계는 Skip해도 무방합니다.
  • 저는 사이드프로젝트를 팀원들과 진행하고 있기 때문에, github organization 계정을 사용해서 조직 공통 Token 을 만들고자 합니다. 
  • GitHub 공식 (참고) 를 보면, 세분화된 개인 액세스 토큰으로 조직 계정에 접근할 수 있다고 합니다.

 

1) 이렇게 개인 프로필 setting → Developer settings 

 

 

2. 그러면 Token 에서 Beta 버전의 Generate new Token 을 클릭해줍니다. 

 

3. 여기서 조직과 개인, 어느 계정의 token 을 생성할 것인지 선택할 수 있습니다.

4. 그러면 이제 이렇게 Token 이 생성되고, 생성된 토큰은 다시는 볼 수 없으므로 잘 저장해 두어야합니다.

 


2. Jenkins Credentials 등록

발급한 원격 저장소에 접근권한이 있는 token 정보를 이용하여 jenkins가 github에 접근할 때 사용하는 credentials 을 등록 해야 합니다.

 

1) [Jenkins 관리(settings)] - [시스템 설정] → 밑으로 쭉 내려가서 [Github Server]  

 

2) 그 다음 Credential 에서 [Add] → 생성

  • Domain : Global credentials (unrestricted) 선택
  • Kind : Secret text 선택
  • Secret : 위에서 생성한 토큰 입력
  • ID : 본인이 지정하는 식별자(ID) 입력

3) 생성한 credentials 선택 후 Test Connection에서 잘 연결되면 성공~

4) 더 연동하고 싶은 정보가 있다면 [Add Github Server] 버튼으로 추가할 수 있습니다.

 

 


3. Jenkins Job 과 Github 연결하기

그럼 준비는 다 했으니, 생성해 둔 job 과 github를 연결해 보겠습니다.
job 을 새로 만들어도 기본적인 틀은 같습니다.

 

1) [General] → Github project url 등록

2) 아래 [소스코드관리] → 위에서 등록한 것은 github api 를 허용하기위한 credentials 이고 (이거는 secret text 만 허용하는거 같음)

이번에는 job 에서 github repository 에 접근하기 위한 credential 을 등록해야하는데 이거는 ID/PW 만 jenkins 에서 허용하는 것 같습니다. (Jenkins 공식문서에 언급이 되어있음)

  • Username 은 본인의 깃허브 아이디를 선택해주시면 됩니다
  • Password는 이전에 발급받은 Github Token 값을 복사해주시면 됩니다

3) 어떤 Branch 의 액션(Trigger) 만 바랄볼 것인지도 설정해 줍니다. 

4) Jenkins Additional Behaviours 를 통해 빌드할시 추가적인 작업을 설정할 수 있습니다.

 

5)  jenkins job 의 환경설정으로 가서 Build Trigger  중 Github hook 을 체크해줍니다.

 

 

 

6) 빌드 실행

젠킨스 job 에서 build run 을 해보니, 추가적인 작업 없이 연결된 github 레포지토리에서

  1. 등록한 crediential 을 이용하여
  2. 설정한 브랜치의 가장 최근 커밋을 checkout 해 clone 후
  3. 빌드 스크립트를 실행하는 것을 볼 수 있었습니다.

(오,, 신기하네요)

 

7) 파일도 정상적으로 clone 에 온 것을 볼 수 확인할 수 있었습니다. 야~호

젠킨스 파일 확인

 


4. Git merge 시 젠킨스 빌드 자동화 연결

  • 이제 Github Webhook 을 이용하여 메인 브랜치에 merge 시 자동으로 젠킨스가 빌드 되도록 해보겠습니다
  • Webhook 이 생소하시다면 이 글을 봐주세요

 

1) Jenkins 플러그인 다운 

  • Jenkins 에서 GitHub WebHook 으로 날아오는 api를 통신하기 위해서는 "GitHub Integration" 플러그인을 다운 받아야합니다.

2) Jenkins 설정은 다했으니 GitHub 에서 Webhook을 날려주어야 합니다.

  1. github repository에서 [Settings] - [Webhooks] - [Add Webhook]
  2. Payload URL 은 송신할 URL 입니다. [Jenkins URL]/github-webhook/ 으로 보내면 됩니다.
    • Jenkins - Webhook 의 간단한 동작과정은, jenkins 에서 webhook 으로 날아온 api 를 수신하면 Github Plugin에서 이걸 캐치합니다.
    • 그 후, Github 플러그인에서 날아온 api 와 가지고있는 job의 레포지토리 이름을 비교합니다.
    • 해당하는 job이 존재한다면 빌드를 시작합니다.
  3. 그리고 밑에서 깃허브가 어떤 이벤트가 일어났을 떄 Webhook을 날릴것인지 선택할 수 있습니다. 저는 PR 을 선택했습니다.
  4. 그럼 PR에 관련된 모든 행위가 일어났을 떄 마다 webhook을 날립니다.

 

 

3) 이렇게 하면 연결은 끝입니다!!


 

 

5. [참고] jenkins github webhook log 추적 방법

  • 저는 이렇게 끝냈지만,,, Github webhook 도 jenkins 랑 정상적으로 연결이 되었고 webhook api 도 잘 날아가 200 성공 코드도 응답으로 받아왔지만
  • jenkins 에서 빌드가 실행되지는 않는 문제가 있었습니다... 
  • 결론은, Jenkins 설정이 마무리되고 잘 연결되어도 원격 repository에 변동사항이 없으면 빌드가 되지않는다고 합니다 ㅠㅠ (출처: stackover-flow)
  • 그래서 해결해나가는 과정 중 GitHub Webhook 로그를 추적하는 방법이 한글로 잘 나와있지않아 정리해 봅니당

 

1) 먼저 Jenkins 대시보드 - [Jenkins 관리] - [System Log] -[신규 로그 기록 추가] 를 클릭해줍니다.

  • 그다음 아래 3가지를 로그 추적에 등록해 줍니다.
  • 그리고 다시 webhook을 시도하면 로그가 추적됩니다!
hudson.plugins.git.GitStatus - All
com.cloudbees.jenkins.GitHubWebHook - All
org.jenkinsci.plugins.github - All

 

 

 

 

으아아아 젠킨스 깃허브 연결도 끝!

 


*참고

반응형