Google Kubernetes Engine에서 Jenkins 설정

Last reviewed 2019-02-27 UTC

이 가이드에서는 Google Kubernetes Engine(GKE)에서 Jenkins를 설정하여 소프트웨어 제공 파이프라인을 조정하는 방법을 보여줍니다.

목표

  • GKE에서 Kubernetes 클러스터를 만듭니다.
  • Helm을 사용하여 Jenkins를 설치합니다.
  • Jenkins에 연결합니다.

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

  • Google Kubernetes Engine

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. API GKE 사용 설정

    API 사용 설정

  5. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  7. API GKE 사용 설정

    API 사용 설정

환경 준비

먼저 배포 환경을 준비합니다.

  1. Cloud Shell을 활성화합니다. Cloud Shell은 Google Cloud 콘솔의 명령줄에 대한 액세스 권한을 제공하고, gcloud CLI와 Google Cloud 개발에 필요한 기타 도구를 포함합니다. Cloud Shell은 프로비저닝하는 데 몇 분 정도 걸릴 수 있습니다.

    Cloud Shell 활성화

    프로세스가 완료되면 다음 출력이 표시됩니다.

    Welcome to Cloud Shell! Type "help" to get started.
    
  2. 샘플 코드를 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes.git
    

    Git 저장소에는 Jenkins를 배포하기 위해 사용할 Kubernetes 매니페스트가 포함됩니다. 매니페스트 및 해당 설정은 GKE를 위한 Jenkins 구성을 참조하세요.

  3. 샘플 코드 디렉토리로 이동합니다.

    cd continuous-deployment-on-kubernetes
    

GKE 클러스터 만들기

  1. GKE 클러스터를 프로비저닝합니다. 이 단계는 완료하는 데 최대 몇 분이 걸릴 수 있습니다.

    gcloud container clusters create jenkins-cd \
      --zone us-east1-d --scopes cloud-platform
    

    cloud-platform 범위를 사용하면 Jenkins가 Cloud Source Repositories 및 Container Registry에 액세스할 수 있습니다.

  2. 클러스터에 연결할 수 있는지 확인합니다.

    kubectl cluster-info
    

    클러스터에 성공적으로 연결할 수 있으면 다음과 비슷한 출력이 표시됩니다.

    Kubernetes control plane is running at https://35.196.84.95
    GLBCDefaultBackend is running at https://35.196.84.95/api/v1/namespaces/kube-system/services/default-http-backend:http/proxy
    KubeDNS is running at https://35.196.84.95/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://35.196.84.95/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  3. 클러스터에서 Jenkins 권한을 부여할 수 있도록 클러스터의 RBAC에 자신을 클러스터 관리자로 추가합니다.

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin --user=$(gcloud config get-value account)
    

Jenkins 설치

Helm을 사용하여 저장소에서 Jenkins를 배포합니다.

  1. Jenkins Helm 차트 저장소를 추가합니다.

    helm repo add jenkinsci https://charts.jenkins.io
    helm repo update
    

커스텀 값 파일을 사용해서 Jenkins 설치를 구성합니다. 구성에 대한 세부정보는 jenkins/values.yaml 파일을 참조하세요.

  1. Helm CLI를 사용해서 해당 구성 집합으로 차트를 배포합니다.

    helm install cd-jenkins -f jenkins/values.yaml jenkinsci/jenkins --wait
    

    Jenkins 설치 구성에 대한 자세한 내용은 Jenkins 차트의 문서 페이지를 참조하세요.

  2. Jenkins 포드가 Running 상태가 되고 컨테이너가 READY 상태인지 확인합니다.

    kubectl get pods
    

    READY 열에 2/2이 표시되고, STATUS 열에 Running이 표시됩니다. Jenkins가 초기화를 완료하려면 몇 분 정도 걸릴 수 있습니다.

    NAME           READY   STATUS    RESTARTS   AGE
    cd-jenkins-0   2/2     Running   0          6m30s
    
  3. Kubernetes 서비스가 제대로 생성되었는지 확인합니다.

    kubectl get svc
    

    다음과 유사한 결과가 출력됩니다.

    NAME               CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
    cd-jenkins         10.35.249.67   <none>        8080/TCP    3h
    cd-jenkins-agent   10.35.248.1    <none>        50000/TCP   3h
    kubernetes         10.35.240.1    <none>        443/TCP     9h
    

Jenkins 설치는 Kubernetes 플러그인을 사용해서 빌더 에이전트를 만듭니다. Jenkins 마스터가 빌드를 실행해야 할 때 필요에 따라 자동으로 시작됩니다. 해당 작업이 완료되면 자동으로 종료되고 리소스가 클러스터의 리소스 풀에 다시 추가됩니다.

Jenkins에 연결

  1. Cloud Shell에서 Jenkins UI에 대한 포트 전달을 설정합니다.

    export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=cd-jenkins" -o jsonpath="{.items[0].metadata.name}")
    kubectl port-forward $POD_NAME 8080:8080 >> /dev/null 2>&1 &
    
  2. Jenkins 사용자 인터페이스를 열려면 Cloud Shell에서 웹 미리보기를 클릭하고 포트 8080에서 미리보기를 클릭합니다.

    port8080

이제 Jenkins 및 GKE에 액세스할 수 있습니다. 이 솔루션을 더 진행할 경우 지속적 배포 파이프라인에서 이러한 구성요소를 사용할 수 있습니다.

정리

이 가이드를 완료한 후에는 향후에 요금이 청구되지 않도록 GCP에서 만든 리소스를 삭제합니다.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하려면 다음을 실행합니다.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

GKE 클러스터 삭제

  1. GKE 클러스터를 삭제합니다.
    gcloud container clusters delete jenkins-cd --zone us-east1-d
    

다음 단계