Jenkins와 통합

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

패키지 관리는 알파 버전입니다. 이 기능은 알파 사용자에게만 제공되며 컨테이너 관리에 사용할 수 있는 모든 기능이 포함되지 않을 수 있습니다. 알파 버전을 신청하려면 가입 양식을 작성하세요.

시작하기 전에

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

저장소에 대한 액세스 구성

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

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

    gcloud iam service-accounts create jenkins-sa
    

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

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

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

GKE 클러스터 설정

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

Console

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

  1. Cloud Console에서 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. 파이프라인을 선택합니다.
    3. 파이프라인 이름을 설정하고 OK를 클릭합니다.
  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 에이전트의 Pod 템플릿으로 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 Maven 저장소에 아티팩트가 추가됩니다.

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

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