Jenkins와 통합

이 페이지에서는 Artifact Registry 저장소에 빌드된 Maven 패키지를 저장하도록 Jenkins를 구성하는 방법을 안내합니다.

시작하기 전에

대상 저장소가 없으면 새 저장소를 만듭니다.

저장소에 대한 액세스 구성

  1. Jenkins가 Artifact Registry에서 사용할 전용 서비스 계정을 만듭니다.

    다음 명령어를 실행하여 이름이 jenkins-sa인 서비스 계정을 만듭니다.

    gcloud iam service-accounts create jenkins-sa
    

    그러면 jenkins-sa@PROJECT.iam.gserviceaccount.com이라는 서비스 계정이 생성됩니다. 여기서 PROJECT는 프로젝트 ID입니다.

  2. 저장소가 포함된 프로젝트에서 Artifact Registry 작성자 역할을 자신이 만든 Jenkins 서비스 계정에 부여합니다. 프로젝트의 모든 저장소에 역할을 부여하거나 서비스 계정이 액세스해야 하는 특정 저장소에 역할을 부여할 수 있습니다.

    역할별 권한 및 액세스 권한 부여에 대한 자세한 내용은 액세스 제어 구성을 참조하세요.

GKE 클러스터 설정

새 Google Kubernetes Engine 클러스터 또는 노드 풀을 설정할 때 Jenkins에서 사용하도록 만든 서비스 계정을 사용합니다.

콘솔

Google Cloud 콘솔을 사용하여 클러스터를 만들려면 다음 단계를 수행하세요.

  1. Google Cloud 콘솔에서 Artifact Registry 메뉴로 이동합니다.

    Artifact Registry 메뉴로 이동

  2. 클러스터 만들기를 클릭합니다.

  3. 원하는 대로 클러스터를 구성합니다. 아직 만들기를 클릭하지 마세요.

  4. 기본 노드 풀에서 옵션 더보기를 클릭합니다.

  5. 보안 섹션에서 자신이 만든 Jenkins 서비스 계정을 선택합니다.

  6. 저장을 클릭하여 오버레이를 종료합니다.

  7. 만들기를 클릭합니다.

gcloud

다음 명령어 중 하나를 사용하여 Jenkins 서비스 계정으로 클러스터를 만듭니다. 명령어에서 PROJECT는 프로젝트 ID입니다.

서비스 계정으로 클러스터를 만들려면 다음 명령어를 실행합니다.

gcloud container clusters create example-cluster --service-account=jenkins-sa@PROJECT.iam.gserviceaccount.com

기존 클러스터에서 노드 풀을 만들려면 다음을 사용하세요.

gcloud container node-pools create example-pool --service-account=jenkins-sa@PROJECT.iam.gserviceaccount.com

명령어에 대한 자세한 내용은 gcloud container clusters create 문서를 참조하세요.

GKE에서 Jenkins 설정

  1. GKE에서 Jenkins를 설정하는 튜토리얼을 따릅니다. 이전 섹션에서 만든 클러스터를 사용합니다.

  2. Jenkins에서 GKE 플러그인을 최신 버전으로 업데이트합니다. Jenkins 관리 > 플러그인 관리 > 업데이트를 클릭합니다.

Maven 프로젝트 설정

  1. Jenkins 문서 GitHub 저장소의 샘플 Maven 프로젝트를 포크합니다.

  2. 포크된 저장소를 클론합니다.

    git clone git@github.com:USER_NAME/simple-java-maven-app.git
    
  3. Jenkins 인터페이스에서 새 파이프라인을 설정합니다.

    1. 새 항목을 클릭합니다.
    2. Pipeline(파이프라인)을 선택합니다.
    3. 파이프라인 이름을 설정하고 확인을 클릭합니다.
  4. 일반 탭의 파이프라인 섹션에서 다음 옵션을 구성합니다.

    • SCM의 파이프라인 스크립트를 선택합니다.
    • SCM 드롭다운 목록에서 Git를 선택한 다음 GitHub 저장소에 연결할 URL과 사용자 인증 정보를 지정합니다.

    파이프라인 설정 스크린샷

  5. 저장을 클릭합니다.

저장소에 대한 연결 구성

저장소와 사용자 인증 정보로 Jenkins를 구성하여 저장소에 연결합니다.

  1. Maven pom.xml에 저장소를 추가합니다. 다음 명령어를 사용하여 추가할 스니펫을 출력합니다.

    gcloud artifacts print-settings mvn [--project=PROJECT] \
    [--repository=REPOSITORY] [--location=LOCATION]
    

    각 항목의 의미는 다음과 같습니다.

    • PROJECT는 프로젝트 ID입니다. 이 플래그를 생략하면 현재 프로젝트 또는 기본 프로젝트가 사용됩니다.
    • REPOSITORY는 저장소 ID입니다. 기본 Artifact Registry 저장소를 구성한 경우 이 플래그가 명령어에서 생략되었을 때 사용됩니다.
    • LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다.
  2. Jenkins 에이전트의 포드 템플릿으로 YAML 파일을 만듭니다.

    mkdir jenkins
    cat > jenkins/maven-pod.yaml << EOF
    apiVersion: v1
    kind: Pod
    spec:
      containers:
      - name: maven
        image: maven:3.3.9-jdk-8-alpine
        command: ['cat']
        tty: true
    EOF
    
  3. Jenkinsfile 파일을 수정합니다.

    pipeline {
        agent none
        stages {
            stage('Deploy') {
                steps {
                     agent {
                         kubernetes {
                             label 'mavenpod'
                             yamlFile 'jenkins/maven-pod.yaml'
                           }
                       }
                       container('maven') {
                       sh "mvn -B clean deploy"
                     }
                }
            }
        }
    }
    

빌드 시작

  1. GitHub 프로젝트의 변경사항을 내보냅니다.

    git add . && git commit -m "Configure my Jenkins pipeline" && git push
    
  2. Jenkins 인터페이스에서 샘플 Maven 프로젝트에서 애플리케이션의 새 빌드를 시작합니다.

빌드가 성공적으로 완료되면 자신이 만든 Artifact Registry 자바 패키지 저장소에 아티팩트가 추가됩니다.

다음 명령어를 실행하여 저장소의 패키지를 나열합니다.

gcloud artifacts packages list --repository=mvn-jenkins --location=LOCATION

결과는 다음과 유사합니다.

Listing items under project {YOUR_PROJECT}, repository mvn-jenkins.

PACKAGE                   CREATE_TIME          UPDATE_TIME
com.mycompany.app:my-app  2019-06-25T17:09:44  2019-06-25T17:09:44