기본 이미지 업데이트를 동기화하도록 컨테이너 이미지 다시 빌드 자동화


Cloud Workstations에서는 워크스테이션에 대해 커스텀 이미지를 만들고 사용할 수 있습니다. 커스텀 이미지가 사용된 후에는 기본 이미지에서 사용할 수 있는 수정 및 업데이트를 가져오기 위해 커스텀 이미지의 다시 빌드를 자동화하는 것이 좋습니다.

이 튜토리얼에서는 커스텀 워크스테이션 이미지에 보안 업데이트 및 패치를 포함하도록 자동화된 파이프라인을 빌드하는 방법을 알아봅니다.

목표

이 튜토리얼에서는 다음 단계에 따라 기본 이미지에 대해 자동화된 파이프라인을 빌드합니다.

  1. 커스텀 이미지를 저장하고 스캔하기 위해 Artifact Registry 저장소를 만듭니다.
  2. 이미지 구성을 저장하기 위해 Google Cloud로 GitHub를 구성합니다.
  3. 커스텀 이미지를 만들고 Artifact Registry에 배포하는 작업을 자동화하기 위해 Cloud Build 트리거를 만듭니다.
  4. 정기적으로 빌드를 시작하도록 Cloud Scheduler를 구성합니다.
  5. 자동화된 프로세스의 결과를 검토합니다.

비용

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

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

이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

환경 준비

계속하기 전에 다음 환경 변수를 설정해야 합니다.

  1. 사용할 클라우드 프로젝트의 프로젝트 ID를 설정합니다.

    PROJECT_ID=$PROJECT_ID
    
  2. 저장소를 저장할 GitHub 사용자 이름을 설정합니다.

    GITHUB_USER=$GITHUB_ID
    
  3. 프로세스 전체에 걸쳐서 사용할 PROJECT_NUMBERREGION 변수를 설정합니다.

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
        --format='value(projectNumber)')
    
    REGION=$REGION
    

    앞의 예시에서 $REGION을 사용하려는 리전 이름으로 바꿉니다. 예를 들면 us-central1입니다.

    사용 가능한 리전에 대한 자세한 내용은 Cloud Workstations 위치를 참조하세요.

Artifact Registry 저장소 만들기

이 튜토리얼에서는 Artifact Registry를 사용하여 이미지를 저장하고 스캔합니다.

  1. 다음 명령어를 사용하여 저장소를 만듭니다.

    gcloud artifacts repositories create custom-images \
          --repository-format=docker \
          --location=$REGION \
          --description="Docker repository"
    

    $REGION을 사용하려는 리전 이름으로 바꿉니다.

  2. Artifact Registry에 액세스할 때 gcloud CLI 사용자 인증 정보를 사용하도록 Docker를 구성합니다.

    gcloud auth configure-docker $REGION-docker.pkg.dev
    

    Artifact Analysis를 사용 중지하려면 다음 명령어를 실행합니다.

    gcloud services disable containerscanning.googleapis.com
    

GitHub 저장소 구성

실제로는 커스텀 이미지의 Dockerfile을 Git 저장소에 보관합니다. 자동화된 프로세스가 빌드 프로세스 중 이 저장소에 액세스하여 관련 구성 및 Dockerfile을 가져옵니다.

샘플 저장소 포크

컨테이너 정의를 제공하는 샘플 저장소를 포크하려면 다음 단계를 수행합니다.

  1. 이 링크를 클릭하여 software-delivery-workshop 저장소의 새 포크 만들기를 수행합니다.
  2. 메시지가 표시되면 GitHub에 로그인합니다.
  3. GitHub 사용자 이름을 소유자로 선택합니다. 저장소 이름이 software-delivery-workshop으로 표시됩니다.
  4. 포크 만들기를 클릭하고 프로세스가 완료되도록 몇 초 정도 기다립니다.

Cloud Build를 GitHub에 연결

그런 후 기본 제공되는 GitHub 연결 기능을 사용해서 저장소를 Cloud Build에 연결합니다. GitHub 저장소 링크를 클릭하고 안내에 따라 프로세스를 완료하는 방법을 설명합니다. 명령줄로 나중에 수행할 수도 있으므로 마법사 마지막 단계에서 트리거를 만들 필요가 없고 마지막 단계를 건너뛸 수 있습니다.

다른 Git 저장소 솔루션을 사용하는 경우 안내에 따라 Cloud Build를 GitLab에 연결하거나 Bitbucket에 연결할 수 있습니다.

Cloud Build 트리거 만들기

샘플 저장소에는 컨테이너 이미지를 빌드하는 데 사용되는 컨테이너 정의 및 Cloud Build 구성이 포함되어 있습니다. 이 단계에서는 labs/cloudbuild-scheduled-jobs/code-oss-java 폴더에서 찾을 수 있는 cloudbuild.yaml 파일에서 안내를 실행하는 Cloud Build 트리거를 만듭니다.

gcloud builds triggers create manual \
    --name=custom-image-trigger \
    --repo=$GITHUB_USER/software-delivery-workshop \
    --repo-type=GITHUB \
    --branch=main \
    --build-config=labs/cloudbuild-scheduled-jobs/code-oss-java/cloudbuild.yaml \
    --substitutions=_REGION=$REGION,_AR_REPO_NAME=custom-images,_AR_IMAGE_NAME=code-oss-java,_IMAGE_DIR=labs/cloudbuild-scheduled-jobs/code-oss-java

TRIGGER_ID=$(gcloud builds triggers list \
    --filter=name="custom-image-trigger" --format="value(id)")

이 예시는 다음을 구성합니다.

  • gcloud CLI 명령어는 두 번째 줄에 name 플래그로 표시된 대로 Cloud Build 내에서 custom-image-trigger라는 수동 트리거를 만듭니다.
  • 다음 3개 줄에는 소스 GitHub 저장소와 관련된 플래그가 포함되어 있습니다.
  • build-config 플래그는 Git 저장소의 Cloud Build 파일에 대한 경로를 나타냅니다.
  • 작업을 동적으로 만들려면 substitutions 플래그를 사용합니다. 이 작업의 경우 명령어가 다음 변수를 전달합니다.

    • 리전 $_REGION
    • Artifact Registry 저장소 이름 $_AR_REPO_NAME
    • 컨테이너 이미지 이름 $_AR_IMAGE_NAME
    • 빌드할 Dockerfile 위치 $_IMAGE_DIR

    cloudbuild.yaml 파일을 보고 이러한 변수가 프로세스에 사용되는 방법을 확인합니다.

  • 트리거를 만든 후 트리거의 고유 이름이 검색되고 나중에 사용할 수 있도록 $TRIGGER_ID 환경 변수에 저장됩니다.

Cloud Scheduler 구성

최신 업데이트 및 패치를 사용해서 이미지를 최신 상태로 유지하기 위해 Cloud Scheduler를 사용해서 설정된 빈도로 Cloud Build 트리거를 실행합니다. 이 튜토리얼에서는 작업이 매일 실행됩니다. 실제에서는 최신 업데이트가 항상 포함되도록 조직 요구에 맞는 빈도로 설정합니다.

  1. 기본 서비스 계정에 Cloud Build 트리거를 호출하는 데 필요한 역할을 부여합니다.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/cloudbuild.builds.editor"
    
  2. Cloud Build 서비스 계정에 Artifact Registry에 이미지를 업로드하는 데 필요한 역할을 부여합니다.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
        --role="roles/artifactregistry.admin"
    
  3. 다음 명령어를 사용해서 Cloud Scheduler 작업을 만듭니다.

    gcloud scheduler jobs create http run-build \
        --schedule='0 1 * * *' \
        --uri=https://cloudbuild.googleapis.com/v1/projects/$PROJECT_ID/locations/global/triggers/$TRIGGER_ID:run \
        --location=us-central1 \
        --oauth-service-account-email=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --oauth-token-scope=https://www.googleapis.com/auth/cloud-platform
    
  4. 작업이 하루 한 번 실행되도록 설정되지만 기능을 즉시 테스트하려면 Cloud Scheduler에서 작업을 수동으로 실행합니다.

    Cloud Scheduler로 이동

    1. Cloud Scheduler 페이지에서 바로 전에 만든 run-build라는 항목을 찾습니다.
    2. 작업 열에서 해당 행에 대해 more_vert더보기 옵션 메뉴를 클릭합니다.
    3. 시스템을 수동으로 테스트하기 위해 작업 강제 실행을 클릭합니다.
    4. 명령어가 성공적으로 실행되면 Cloud Build 기록 페이지로 전환해서 진행 상태를 검토합니다.

      Cloud Build 기록으로 이동

결과 검토

설정 프로세스 중에 컨테이너 스캔 API를 사용 설정했기 때문에 Artifact Registry가 이미지에서 자동으로 보안 취약점을 스캔합니다.

취약점을 검토하려면 다음 안내를 따르세요.

  1. Artifact Registry 저장소 페이지를 엽니다.

    Artifact Registry 저장소로 이동

  2. 저장소 목록에서 저장소를 클릭합니다.

  3. 이미지 이름을 클릭합니다. 각 이미지 다이제스트의 취약점 합계가 취약점 열에 표시됩니다.

    샘플 이미지 이름을 표시하는 Artifact Registry 저장소 페이지

  4. 이미지의 취약점 목록을 보려면 취약점 열에 있는 링크를 클릭하세요. 취약점 목록에는 심각도, 수정 가능 여부, 취약점이 포함된 패키지의 이름이 표시됩니다.

    취약점 샘플 목록을 표시하는 Artifact Registry 취약점 페이지

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 더 이상 필요하지 않은 리소스를 삭제해야 합니다.

Google Cloud 콘솔이나 gcloud CLI에서 Google Cloud 프로젝트를 삭제하려면 다음 안내를 따르세요.

콘솔

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

워크스테이션 클러스터, 워크스테이션 구성, 워크스테이션과 같은 다른 리소스 삭제에 대한 자세한 내용은 리소스 삭제를 참조하세요.

다음 단계