티스토리 뷰

728x90
반응형

서론

Jenkins Job 중 Multibranch Pipeline을 활용하면 여러 Branch를 통합하여 하나의 Job 처럼 관리할 수 있다. 특히 Git flow와 같은 Branch 전략을 활용하기에 적합한 Job이라 할 수 있다. Feature Branch와 같은 LifeCycle이 짧은 Branch와 Developer/Master와 같은 LifeCycle이 긴 Branch를 하나의 Pipeline으로 통합하여 관리할 수 있다.

지금부터는 Jenkins에서 Multibranch Pipeline을 활용하여 GitHub Branch를 배포하는 과정에 대해 알아보자.


MultiBranch Pipeline 구성

Jenkins 설치 방법은 다음 포스팅을 참고한다.

[Jenkins] Jenkins 설치 가이드 : https://waspro.tistory.com/551?category=857042

1) Jenkins / GitHub Credential

Jenkins와 GitHub를 연동하기 위해서는 먼저 GitHub에 Access Token이 생성되어 있어야 한다. 아래의 과정을 통해 Access Token 생성 및 권한을 부여하고, Jenkins Credential에서 Token 기반 인증을 수행한다.

> Create GitHub Access Token

  • GitHub Login
  • Settings > Developer settings > Personal access tokens
  • Generate new token

  • Access Token Name(Note) 설정 후 repo 전체 선택
  • Generate token

> Create Jenkins Credential

  • Jenkins 관리 > Manage Credentials > Credentials > System > Global credentials
  • Add Credentials

  • Username : GitHub Username / Password : GitHub Access Token / ID : Unique ID

> 추가된 Credential은 GitHub 인증 용도로 활용

2) Multibranch Pipeline 생성

다음으로 동일 Project 내 여러 Branch를 단일 Job으로 관리하는 Multibranch Pipeline을 생성한다.

  • 새로운 Item
  • Multibranch Pipeline > OK

  • General

> Display Name & Description : 구분 용도 / Pipeline에 영향을 주지 않음

  • Branch Sources

> 추가하고자 하는 SCM(Source Code Management)를 선택. 본 포스팅에서는 GitHub 선택

> Credentials : 앞서 추가한 Credential 추가 / Repository HTTPS URL : GitHub URL

> Credentials 입력 시 "jenkins invalid credentials: https://api.github.com/user ~~ "가 나올 경우 상단의 1) Jenkins / GitHub Credential 과정이 제대로 수행되었는지 다시한번 검토한다. GitHub의 Access Token에 Repo 권한이 부여되어야만 Credential에 승인 받을 수 있으며, User sonnaraon과 같은 형태로 출력이 된다.

> Validate 버튼 클릭 시 "Error validating repository information. Credentials ok." 에러가 발생할 경우 Credential은 통과하였지만, Repository 정보를 확인할 수 없을 경우이다. 이 경우 입력한 GitHub Repository URL을 다시 확인해 봐야 한다.

 

> Discover branches Strategy : 탐색한 Branch를 선택하는 전략으로 All Branches / Exclude branches that are also filed as PRs / Only branches that are also filed as PRs이 있으며, All Branches로 선택하여 테스트한다. 필요시 변경하여 수행한다.

> Filter by name (with regular expression) : Discover 전략에 해당되는 Branch 중 정규표현식으로 대상에 포함할 Branch를 재 선별한다.

> Filter by name (with wildcards) : Discover 전략에 해당되는 Branch 중 *로 대상에 포함할 Branch를 재 선별한다. Filter by name은 하나만 정해서 구성하는 것이 혼란을 막을 수 있다.

  • Build Configuration

> 마지막으로 Build Configuration의 Script Path 즉 Jenkinsfile이 위치하고 있는 파일의 경로와 이름을 지정하고 Save 버튼으로 저장한다.

  • Scan Repository Log

> 정상적으로 추가되었을 경우 아래와 같이 Scan Repository Log가 출력된다.

Started
[Sat Jul 17 06:59:05 UTC 2021] Starting branch indexing...
Connecting to https://api.github.com using nara0617@gmail.com/****** (son.nara)
Examining sonnaraon/multibranch
  Checking branches...
  Getting remote branches...
    Checking branch master
      ‘Jenkinsfile’ found
    Met criteria
Scheduled build for branch: master
  1 branches were processed
  Checking pull-requests...
  Getting remote pull requests...
  0 pull requests were processed
Finished examining sonnaraon/multibranch
[Sat Jul 17 06:59:07 UTC 2021] Finished branch indexing. Indexing took 1.7 sec
Finished: SUCCESS

> 위 로그와 같이 GitHub Connecting 성공 / sonnaraon/multibranch Checking 성공 상태 확인

  • 빌드 기록

위와 같이 Master Branch의 Pipeline이 동작하는 것을 확인할 수 있다.

  • 블루 오션 열기

> 마지막으로 블루 오션 열기를 선택한다. 파이프라인을 GUI 환경에서 확인 가능하도록 도와주는 플러그인으로 설치되어 있지 않을 경우 Blue Ocean을 검색하여 설치하도록 한다.

> 현재 Master Branch에 문제가 있어 에러로 출력되는 상태이며, 상세 로그도 확인할 수 있다. 로그 확인 후 문제를 수정하고 Commit&Push를 수행해보자.

  • Commit & Push

에러가 발생한 Jenkinsfile을 수정하고 Commit&Push를 수행하면, 다음과 같이 정상으로 분기되는 것을 확인할 수 있다.


Multibranch pipeline Webhook (With GitHub)

Jenkins에서 Multibranch Pipeline의 Webhook을 구현하기 위해서는 먼저 다음 플러그인을 구성해야 한다.

Jenkins 관리 > Plugin Manager에서 아래 플러그인 리스트가 설치되어 있는지 확인한다. 설치되어 있지 않을 경우 설치를 진행한 후 Pipeline을 구성한다.

  • Pipeline: Multibranch
  • Multibranch Scan Webhook Trigger

Multibranch Pipeline 설정 시 위 플러그인이 구성되어 있을 경우 다음과 같은 설정을 진행할 수 있다.

  • Scan Multibranch Pipeline Triggers

> Scan Multibranch Pipeline Triggers : Periodically if not otherwise run (pipeline 검증 주기) / Scan by webhook 체크

Scan Multibranch Pipeline Triggers의 갱신 주기를 통해 Trigger를 탐색한다.

> 위와 같이 Periodically if not otherwise run 주기 마다 빌드 파이프라인을 검증하고 빌드를 수행할 필요가 있는지 여부를 확인하여 자동으로 빌드를 수행한다. Multibranch Pipeline의 왼쪽 메뉴바를 통해 기능을 검증할 수 있다.

  • Scan Repository Now : 즉시 Scan하여 빌드 대상을 탐색한다.
  • Scan Repository Log : Scan 결과를 확인한다.
  • 빌드 기록 : 빌드 기록을 확인한다.
  • 블루 오션 열기 : 파이프라인을 GUI 환경을 확인하기 위해 블루 오션에 접속한다.

결론

위 기능들을 활용하여 multibranch pipeline 환경에서 다수의 브랜치를 통합하여 관리할 수 있도록 구성할 수 있다. 이 기능을 활용하면 MSA와 같은 복잡한 배포 프로세스 환경을 보다 간결하게 구성할 수 있으며, 다양한 Branch 관리 전략에 대입하여 효과적인 코드 관리 및 배포를 수행할 수 있다.

다음 포스팅에서는 Multibrach Pipeline을 적용한 Git Branch Strategy에 대해 알아보도록 하자.

728x90
반응형