계발하는 개발자

[CI/CD] Jenkins와 Github 연동 및 빌드 자동화 구성 본문

🖥 Computer Science/Programming

[CI/CD] Jenkins와 Github 연동 및 빌드 자동화 구성

dev_genie 2023. 9. 19. 03:00

이번에는 Jenkins와 Github Repository 연동 및 빌드 자동화 구성 방법에 관해 정리해보려 한다.

(빌드 자동화할 Repository가 이미 존재한다는 가정하에 정리한 글임을 참고)

Step

  1. GitHub Token 발행 (이미 발행했거나 토큰 값을 아는 경우 생략)
  2. Jenkins 설정
    1. Jenkins 플러그인 설치
    2. Jenkins credential 설정
    3. github server 설정
    4. Jenkins Item 생성 및 환경설정
  3. github webhook 설정
  4. 테스트

 

1. GitHub Token 발행

GitHub 홈페이지 -> 우측 [Settings] 클릭

 

좌측 [Developer settings] 클릭

 

Personal access tokens > Tokens (classic) ->
Generate new token > Generate new token (classic) 클릭

 

토큰 이름 작성, 만료일 선택, scopes 선택 -> 하단 [Generate token] 클릭

  • 'New personal access token’ 페이지에서 아래와 같이 설정한다.
    • Note :: jenkins_github_token (임의로 설정 가능)
    • Expiration :: No expiration
    • Select scopes
      • repo :: 체크
      • admin:org :: 체크
      • admin:repo_hook :: 체크

 

생성된 token을 저장해둔다. (나중에 별도로 다시 확인할 수 없으니 저장해둠)

 

2. Jenkins 설정

2-1) jenkins 플러그인 설치

github webhook 연동을 위해 ‘Github Integeration Plugin’이 필요하다.

jenkins에 로그인한 후 왼쪽 [Jenkins 관리] > Plugins 메뉴 선택

 

Available plugins(설치 가능 플러그인) 탭을 선택한 후

‘Github Integeration Plugin’을 체크하고, Install 클릭

 

Installed plugins(설치된 플러그인) 탭에 들어오면

Github Integeration Plugin이 설치된 것을 볼 수 있다.

 

2-2) jenkins credential 설정

2-2-1. github personal access token을 위한 jenkins credential 생성

위에서 생성한 jenkins_github_token을 위한 jenkins credential을 생성한다.
-> github access token과 github-account 총 2개의 credential을 만들 것이다.

다시 Jenkins 관리탭으로 와서 이번에는 Credentials를 클릭

 

Domains 항목의 (global)텍스트 클릭후 보이는Add credentials 버튼을 선택한다.

 

아래와 같이 설정하고, 아래의 ‘Create’ 버튼을 선택하여 저장한다.

{GITHUB PERSONAL ACCESS TOKEN} 값은 위에서 생성한 후 복사한 github token 값이다.
  • Kind :: Secret text Scope :: Global (Jenkins, nodes, items, all child items, etc)
  • Secret :: {GITHUB PERSONAL ACCESS TOKEN}
  • ID :: lindarex-github-access-token (임의로 설정 가능)
  • Description :: lindarex github access token (임의로 설정 가능)

(내 경우 이미 github-access-token 이라는 ID명으로 credential을 생성했기 때문에, 지금 정리에서는 그냥 보여주기식으로 github-access-token2 라고 사용했다.)

 

생성한 jenkins credential을 확인한다.

 

2-2-2. github account를 위한 jenkins credential 생성

'2-2-1'을 참고하여 jenkins credential을 추가 생성한다.

아래와 같이 설정하고, 아래의 ‘Create’ 버튼을 선택하여 저장한다.

Username과 Password는 github 계정 정보다.
Username은 github 로그인 시 입력하는 이메일 주소가 아닌, github profile의 ‘Name’ 값이다.
  • Kind :: Username with password
  • Scope :: Global (Jenkins, nodes, items, all child items, etc)
  • Username :: {GITHUB ACCOUNT NAME}
  • Password :: {GITHUB ACCOUNT PASSWORD}
  • ID :: github-account (임의로 설정 가능)
  • Description :: github account (임의로 설정 가능)

(내 경우 이미 github-account 이라는 ID명으로 credential을 생성했기 때문에, 지금 정리에서는 그냥 보여주기식으로 github-account2 라고 사용했다.)

 

이렇게 총 2개의 credential이 생성됐다.

 

2-3) github server 설정

jenkins 첫 페이지에서 왼쪽의 ‘Jenkins 관리' > 'System'을 선택한다.

 

GitHub 설정 영역에서 ‘Add GitHub Server’ > 'GitHub Server'를 선택한다.

아래와 같이 설정하고, 아래의 ‘저장’ 버튼을 선택하여 저장한다.

Credentials는 github personal access token을 위해 생성한 github-access-token값이다.
  • Name :: github-server (임의로 설정 가능)
  • API URL :: https://api.github.com
  • Credentials :: github-access-token
  • Manage hooks :: 체크

 

'Test connection'을 누르면 Credentials이 저장되면서 위 노란색으로 표시한 문구가 찍힌다.

'Credentials verified for user zisuzin, rate limit: 4998'

 

2-4. Jenkins Item 생성 및 환경설정

jenkins 첫 페이지에서 왼쪽의 [새로운 Item] 혹은 [Create a job]을 선택한다.

  • 아래와 같이 설정하고, 아래의 ‘OK’ 버튼을 선택하여 새로운 item을 생성한다.
    • Item name :: github-webhook
    • Freestyle project 선택

 

‘소스 코드 관리’와 ‘빌드 유발’ 영역을 아래와 같이 설정하고, 아래의 ‘저장’ 버튼을 선택하여 저장한다.

Repositories > Repository URL은 기존에 생성한 github repository 주소다.
Repositories > Credentials는 github account를 위해 생성한 jenkins credential 값이다.
  • ‘소스 코드 관리’ > ‘Git’ :: 체크
  • Repositories
    • Repository URL :: {PERSONAL REPOSITORY URL}
    • Credentials :: github-account
  • Branches to build
    • Branch Specifier (blank for ‘any’) :: ‘*/main’ (임의 설정 가능)
    • Repository browser :: ‘(자동)’
  • ‘빌드 유발’ > ‘GitHub hook trigger for GITScm polling’ :: 체크

 

Repository URL은 Github 프로젝트 페이지에서 위 url을 복사해주면 된다.

내 경우 main branch push시에 젠킨스 빌드가 관리 되도록 main을 입력하였는데,

특정 branch를 지정할 수 있으므로 원하는 branch명을 입력해주면 된다.

 

Github의 webhook 사용하기 위해 빌드 trigger는 GitHub hook trigger를 선택해준다.

위 설정들을 모두 해준 이후 최종적으로 저장까지 하면 젠킨스 설정은 끝!

 

3. github webhook 설정

위의 github repository로 이동한 후, 상단의 [Settings] 탭을 선택한다.

왼쪽의 [Webhooks] 메뉴를 선택한 후
오른쪽 위의 ‘Add webhook’ 버튼을 선택한다.

 

아래와 같이 설정하고, 아래의 ‘Update webhook’ 버튼을 선택하여 저장한다.

github-webhook 다음에 뒤에 '/'를 꼭 붙여쓰자. 안써서 안되는 경우 왕왕 있다고 함..
  • Payload URL :: [JENKINS_URL]/github-webhook/
  • Content type :: application/json

 

참고로 Payload URL은 GitHub 서버에서 접근 가능한 공개적인 주소여야 하므로
로컬 환경에서만 접근 가능한 localhost 주소는 사용을 못한다.

따라서 ngrok 또는 포트 포워딩과 같은 방법을 사용하여,
로컬 서버를 공개적인 주소로 노출시키는 작업을 해줘야한다.

 

ngrok으로 URL 생성하는 방법은 아래 포스팅 참고⬇️

 

[Ngrok] localhost를 외부에서 접속하는 방법

오늘은 로컬 서버를 외부에서 접속해야 할 때 좋은 서비스를 하나 소개하려고 한다. 원래 로컬의 서버를 외부에서 접속하려면, 내 public ip를 직접 알려야 하므로 보안적으로 좋은 선택이 아니다.

ziszini.tistory.com

 

ngrok으로 생성한 서버 url을 Payload URL 란에 넣어주고나서

[Update webhook] 버튼을 누르면 상단에 hook이 성공적으로 업데이트됐다는 메시지가 뜬다.

 

저장 후 정상적으로 연동되면, Payload URL 앞에 녹색 체크 아이콘이 표시된다.

 

만약 Payload URL 앞에 녹색 아이콘이 아니라면 오류가 발생한 것이며,

Payload URL 오타 또는 github과 jenkins 간의 통신 오류가 원인이다(참고⬇️)

그리고 위와 같이 계속해서 Webhook이 실패됐을 때

경험상 요청에 대한 갱신이 안되서 그럴 수도 있다.

 

다시 위 Webhooks 경로 클릭후 [Recent Deliveries] 탭으로 들어와서

redelivery 버튼을 눌러 실패한 Webhook을 다시 보내보자.

나도 이렇게 해서 문제를 해결해본 경험이 있다.

 

클릭하면 자세한 상태를 볼 수도 있는데 

"Response" 탭에서 "200" 응답이 표시되면 WebHook이 성공적으로 전달된 것이다.

 

4. 테스트

기존에 생성해둔 레파지토리 페이지로 이동한 후 Github push 이후 정상 작동하는지 테스트한다.

테스트를 위해 github repository의 README.md 파일을 수정한다.

또는 vscode에서 바로 push하여도 상관없다.

 

‘Commit changes’ 버튼을 클릭하여 변경 사항을 push한다.

 

그런 후 다시 jenkins 서버로 돌아오면 자동으로 빌드 실행이 되는 걸 볼 수 있다.

 

빌드가 완료되면 위에서 생성한 item 앞에 아이콘이 녹색으로 변경된다.

 

완료된 해당 item명을 클릭한 후

왼쪽 아래의 ‘Build History’ 영역에서 완료한 빌드 번호를 선택한다.

 

그런 다음 왼쪽에서 ‘Console Output’을 선택하면

README.md 파일을 수정한 내역과 함께 정상적으로 github webhook이 연동된 것을 확인할 수 있다.

LIST
profile

dev_genie

@dev_genie

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!