[CI/CD] #3-3 멀티브랜치 파이프라인

keen.log·2024년 2월 15일
0

CI/CD

목록 보기
5/7
post-thumbnail

5. 멀티브랜치 파이프라인

  • 멀티브랜치 파이프라인은 사용자 소스코드 저장소의 모든 브랜치에 대해 파이프라인을 자동으로 생성하게 해준다.

  • 멀티브랜치 파이프라인은 Jenkinsfile을 통해 동작하고, 이 파일은 소스코드와 함께 버전 관리 저장소에 들어간다.

*jenkinsfile은 CI 파이프라인을 정의하는 파이프라인 스크립트다.

  • 멀티브랜치 파이프라인은 깃이나 깃허브 저장소의 브랜치 중 어떤 곳에서 변경이 발생하면 자동으로 빌드를 시작하기 위해 설계됐다.

- 전제조건

  • 전역 도구 환경 설정 페이지에서 메이븐 도구 설정
  • 파이프라인 메이븐 통합 플러그인 설치
  • 깃허브 플러그인 설치(젠킨스 설정 마법사에서 권장 플러그인 설치를 선택했다며 이미 설치되어 있다)
  • 젠킨스 URL이 인터넷에 접속 가능한지 확인

- 젠킨스와 깃허브 연동

  1. 깃허브 접속 후 Settings > Developer settings > Personal access tokens로 이동한다.
  2. Generate new token 클릭 후 원하는 token명을 입력한다.
  3. Select scopes에서 repo, admin:org, admin:repo_hook을 선택 후 Generate token을 생성하고 발급받은 token을 복사한다.
  4. 젠킨스로 다시 돌아와 Manage Jenkins > system > GitHub Server 세션으로 간다.
  5. Add GiHub Server을 한 후 Name에 이름을 입력하고 +Add에서 Jenkins를 선택한다.
  • domain: Global credentials (unrestricted) 선택
  • Kind: Secret text 선택
  • Secret: 위에서 생성한 토큰 입력
  • ID: 본인이 지정하는 식별자(ID) 입력
  1. Test connection 클릭 시 정상 연동되는지 확인한다.

아래는 연동이 정상적으로 이루어진 상황이다.

이 내용은 2018년 책과는 상당히 거리가 있어 아래 참고 블로그를 바탕으로 진행했다. 깃허브 연동을 위해 여러가지를 동시에 시도해보니 중간 과정 스크린샷이 없어 아쉽다..
참고 블로그: Jenkins와 Github 연동하기

- 새로운 깃허브 저장소 만들기 + Jenkinsfile 이용하기

목표: 멀티브랜치 파이프라인과 연동되는 깃허브 저장소를 만들자!

  1. 깃허브 계정에 로그인하고 새로운 깃허브 저장소를 생성한다.
  2. 생성된 저장소에 Jenkinsfile을 생성하고, 아래 코드를 입력한 후 저장한다.
node ('master') {
checkout scm
stage('Build') {
withMaven(maven: 'M3') {
if (isUnix()) {
sh 'mvn -Dmaven.test.failure.ignore clean package'
}
else {
bat 'mvn -Dmaven.test.failure.ignore clean package'
}
}
stage('Results') {
junit '**/target/surefire-reports/TEST-*.xml'
archive 'target/*.jar'
}
}
}

- 젠킨스에서 멀티브랜치 파이프라인 생성하기

목표: 새로운 젠킨스 파이프라인 잡을 만든다!
1. 젠킨스 대시보드에서 새로운 Item 링크를 클릭한다.
2. 다양한 젠킨스 잡 중에서 Multibranch Pipeline을 선택하고, Enter and item name 영역에 파이프라인 이름을 작성한 후 페이지 하단의 OK 버튼을 틀릭한다.
3. 이동한 페이지에서 Branch Sources 섹션으로 스크롤을 내린다.
4. Add Source 버튼을 클릭한 후 Github을 선택한다. 다양한 영역의 설정을 입력한다.

  • Credentials 영역에서 앞서 생성한 Credential을 선택한다.
  • Repository 영역에서 앞서 생성한 깃허브 저장소를 입력한다.
  • Save버튼을 눌러 저장한다.
  1. 저장을 하면 다음과 같은 내용이 나오면 성공이다!

이후 책에는 Webhooks 재등록을 하라고 나와있지만 나는 Webhooks를 따로 등록하지 않았을 뿐더러 최신 젠킨스에서는 Webhooks에 필요한 Github 섹션의 Advanced 버튼이 없는 것으로 보아 자동으로 이루어진다고 판단해 다음 단계를 진행하였다!

- 젠킨스 멀티브랜치 파이프라인 인 액션

  1. 젠킨스 대시보드에서 멀티브랜치 파이프라인을 클릭한다.
  2. 왼쪽 사이드 메뉴에서 Scan Repository Now 링크를 클린한다.
    • 저장소에서 Jenkinsfile이 있는 브랜치들을 스캔한 후, Jenkinsfile을 가진 모든 브랜치의 파이프라인을 실행하게된다.
  3. 왼쪽 사이드 메뉴에서 Scan Repository Log를 클릭한다.
    • 아까 멀티브랜치 파이프라인을 성공적으로 생성한 뒤 저장하면 나오는 로그가 나온다!
    • 항상 저장소를 스캔할 필요는 없다. GitHub Webhooks를 설정해 사용자의 깃허브 저장소에 새로운 브랜치나 커밋이 푸시될 때 자동으로 파이프라인을 실행시킬 수 있다. 단, 해당 브랜치에 저장소의 변경 사항이 생겼을 때 어떤 작업이 수행돼야 하는지 알려주는 Jenkinsfile이 꼭 있어야한다!

- 멀티브랜치 파이프라인 테스트를 위해 새로운 기능 브랜치 만들기

목표: mast branch에서 feature branch를 새로 만들어 젠킨스가 파이프라인으 실행시키는지 알아보자.
1. 깃허브 계정에 로그인 후 앞에서 만든 깃허브 저장소로 이동한다.
2. feature branch를 생성한다.

3. 새로 만든 feature branch에 대한 젠킨스 파이프라인이 즉시 실행되는지 확인한다.

feature branch에 대한 젠킨스 파이프라인이 실행되고 있음이 확인되었다!!


6. 젠킨스 블루오션

젠킨스 블루오션이란?
젠킨스를 다루는 완전히 새로운 방식이다. 젠킨스 주요 애플리케이션에 대한 UI 보조기능에 가깝다.
젠킨스 블루오션의 새 기능

  • 향상된 시각화
  • 파이프라인 에디터
  • 개인화
  • Git과 GitHub를 위한 쉽고 빠른 파이프라인 설정 마법사

- 젠킨스 블루오션 플러그인 설치

  1. 젠킨스 대시보드에서 Manage Jenkins > Manage Plugins를 클릭한다.
  2. Plugin Manage 페이지에서 설치 가능 탭을 클릭하고, Blue Ocean을 찾는다. Blue Ocean을 선택 후 설치한다.

- 블루오션에서 기본적인 젠킨스 파이프라인 살펴보기

목표: 앞에서 생성한 기존에 존재하는 젠킨스 파이프라인을 시각화해보자.

  1. 젠킨스 대시보드에서 새로 생겨난 Open Blue Ocean 메뉴를 클릭한다.

  2. Blue Ocean 대시보드는 다음과 같다.

    • [관리] 버튼은 Jenkins 관리 페이지로 이동한다.
    • [파이프라인] 버튼은 지금 보고 있는 젠킨스 블루오션 대시보드로 이동한다.
    • [->] 버튼은 기존 젠킨스 대시보드로 이동한다.
    • [새로운 파이프라인]은 Git이나 GitHub 기반 프로젝트를 위한 파이프라인 생성 마법사로 이동한다.
    • 마지막으로 해당 대시보드는 파이프라인 목록을 보여준다.
  3. 여기서 이전에 생성한 multibranch-pipeline-demo 파이프라인을 클릭한다. 이동한 화면의 내용은 다음과 같다.

    • [설정 아이콘] 버튼은 파이프라인 설정 페이지로 이동한다.
    • [활동] 버튼은 현재와 과거의 파이프라인을 나열해준다.
    • [브랜치] 버튼은 모든 브랜치의 파이프라인을 하나의 화면으로 보여준다.
    • [풀 리퀘스트] 버튼은 사용자 브랜치의 모든 pull-requests를 나열해준다.
    • 오른쪽의 [되돌아가기] 버튼은 해당 파이프라인을 리플레이해준다.
  4. 각각의 빌드 버튼을 클릭하면 다음 화면과 같이 해당 파이프라인의 빌드 페이지로 이동한다.

- 블루오션에서 파이프라인 생성하기

  1. 예제에 사용할 저장소(https://github.com/nikhilpathania/hello-world-example.git)를 사용자의 깃허브로 포크한다.
    • 포크한 저장소의 pom.xml 파일에 다음설정을 추가한다.
<properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>

해당 설정을 추가하지 않으면 다음과 같은 오류가 발생하기 때문이다.
"Error "Source option 5 is no longer supported. Use 6 or later" on Maven compile"
2. 저장소에 Jenkinsfile을 생성하고, 다음 코드를 입력한다.

pipeline {
    agent {
        node {
            label 'built-in'
        }
    }
    stages {
        stage('Build') {
            steps {
                withMaven(maven: 'M3') {
                    sh 'mvn clean install'
                }
            }
        }
        stage('Results') {
            steps {
                junit '**/target/surefire-reports/TEST-*.xml'
                archiveArtifacts 'target/*.jar'
            }
        }
    }
}
  1. 젠킨스에 JUnit 플러그인을 설치해야하지만, Installed Plugins에 있기 때문에 나는 따로 설치하지 않았다!
  2. 젠킨스 블루오션 대시보드에서 새로운 파이프라인을 클릭한다.
  3. 이동한 화면에서 GitHub를 선택한다.
  4. GitHub 계정을 위한 GitHub 접근 토큰을 입력하는 창이 등장한다.
  5. create an access token here 링크를 클릭해서 깃허브로 이동해 새로운 토큰을 만들고 빈칸에 입력한다.
  6. 원하는 레포지토리가 속한 조직을 선택한다.
  7. 앞서 fork한 hello-world-example 레포지토리를 선택하고, 파이프라인 생성 버튼을 클릭한다.
  8. 해당 브랜치의 파이프라인이 즉시 실행되는걸 확인할 수 있다!

0개의 댓글