Azure Pipelines 및 Cloud Run으로 CI/CD 파이프라인 만들기


이 가이드에서는 Azure Pipelines, Cloud Run, Container Registry를 사용하여 ASP.NET MVC Core 웹 애플리케이션을 위해 지속적 통합/지속적 배포(CI/CD) 파이프라인을 만드는 방법을 보여줍니다.

CI/CD 파이프라인은 다음 다이어그램과 같이 두 개의 Google Cloud 프로젝트(개발용 및 프로덕션용)를 사용합니다.

Azure 빌드 및 출시 파이프라인이 Google Cloud 프로덕션 및 개발 파이프라인과 상호작용하는 방식의 아키텍처

파이프라인 시작 부분에서 개발자는 예시 코드베이스에 대한 변경사항을 커밋합니다. 이 작업은 파이프라인을 트리거하여 출시를 만들고 개발 클러스터의 Cloud Run에 배포합니다. 그런 다음 출시 관리자가 프로덕션 프로젝트에 배포되도록 출시를 승격합니다.

이 가이드는 개발자 및 DevOps 엔지니어를 대상으로 하며, 사용자가 .NET Core, Azure Pipelines, Cloud Run, git에 대한 기본 지식이 있다고 가정합니다. 이 가이드를 완료하려면 Azure DevOps 계정에 대한 관리 액세스 권한이 필요합니다.

목표

  • Docker 이미지 게시를 위해 Container Registry를 Azure Pipelines에 연결합니다.
  • Cloud Run에 배포할 .NET Core 샘플 앱을 준비합니다.
  • Azure Pipelines와 Google Cloud 간에 인증을 설정합니다.
  • Azure Pipelines 출시 관리를 사용하여 Cloud Run 배포를 조정합니다.

비용

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

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

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

Azure DevOps 사용 시 부과될 수 있는 요금은 Azure DevOps 가격 책정 페이지를 참조하세요.

시작하기 전에

이 가이드에서는 개발용과 프로덕션용 하나씩 별도의 프로젝트 두 개를 사용합니다. 별도의 프로젝트를 사용하면 프로덕션에 배포하기 전에 출시를 테스트하면서 Identity and Access Management(IAM) 역할 및 권한을 개별적으로 관리할 수 있습니다.

  1. 개발용 Google Cloud 프로젝트를 만듭니다. 이 가이드에서는 이 프로젝트를 개발 프로젝트라고 합니다.
  2. 프로덕션용 Google Cloud 프로젝트를 만듭니다. 이 가이드에서는 이 프로젝트를 프로덕션 프로젝트라고 합니다.
  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Azure DevOps 계정과 관리자 액세스 권한이 있어야 합니다. 아직 Azure DevOps 계정이 없는 경우 Azure DevOps 홈페이지에서 가입하면 됩니다.

Azure DevOps 프로젝트 만들기

Azure DevOps를 사용하여 소스 코드를 관리하고, 빌드 및 테스트를 실행하고, Cloud Run으로의 배포를 조정합니다. 시작하려면 Azure DevOps 계정에서 새 프로젝트를 만듭니다.

  1. Azure DevOps 홈페이지(https://dev.azure.com/YOUR_AZURE_DEVOPS_ACCOUNT_NAME)로 이동합니다.
  2. 새 프로젝트를 클릭합니다.
  3. 프로젝트 이름을 입력합니다(예: CloudDemo).
  4. Visibility(표시 유형)Private(비공개)로 설정하고 Create project(프로젝트 만들기)를 클릭합니다.
  5. 프로젝트를 만든 후 왼쪽 메뉴에서 저장소를 클릭합니다.
  6. 가져오기를 클릭하여 GitHub에서 dotnet-docs-samples 저장소를 포크한 후 다음 값을 설정합니다.
    • 저장소 유형: Git
    • 클론 URL: https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
  7. 가져오기를 클릭합니다.

    가져오기 프로세스가 완료되면 dotnet-docs-samples 저장소의 소스 코드가 표시됩니다.

Container Registry에 Azure Pipelines 연결

CloudDemo 앱에 대해 지속적 통합을 설정하려면 먼저 Azure Pipelines를 Container Registry에 연결해야 합니다. 이 연결을 통해 Azure Pipelines가 컨테이너 이미지를 Container Registry에 게시할 수 있습니다.

이미지 게시를 위한 서비스 계정 설정

프로덕션 프로젝트에서 Google Cloud 서비스 계정을 만듭니다.

  1. Google Cloud Console에서 프로덕션 프로젝트로 전환합니다.
  2. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

  3. 다음 환경 변수를 초기화합니다.

    DEV_PROJECT_ID=DEV_PROJECT_ID
    PROD_PROJECT_ID=PROD_PROJECT_ID
    

    다음을 바꿉니다.

    • DEV_PROJECT_ID: 개발 프로젝트의 프로젝트 ID
    • PROD_PROJECT_ID: 프로덕션 프로젝트의 프로젝트 ID
  4. 프로덕션 프로젝트에서 Container Registry API를 사용 설정합니다.

    gcloud services enable containerregistry.googleapis.com \
        --project=$PROD_PROJECT_ID
    
  5. Azure Pipelines가 Docker 이미지를 게시하는 데 사용하는 서비스 계정을 만듭니다.

    gcloud iam service-accounts create azure-pipelines-publisher \
        --display-name="Azure Pipelines Publisher" \
        --project=$PROD_PROJECT_ID
    
  6. 서비스 계정에 스토리지 관리자 IAM 역할(roles/storage.admin)을 부여하여 Azure Pipelines가 Container Registry로 푸시할 수 있도록 합니다.

    AZURE_PIPELINES_PUBLISHER=azure-pipelines-publisher@$PROD_PROJECT_ID.iam.gserviceaccount.com
    
    gcloud projects add-iam-policy-binding $PROD_PROJECT_ID \
        --member serviceAccount:$AZURE_PIPELINES_PUBLISHER \
        --role roles/storage.admin \
        --project=$PROD_PROJECT_ID
    
  7. 서비스 계정 키를 생성합니다.

    gcloud iam service-accounts keys create azure-pipelines-publisher.json \
        --iam-account $AZURE_PIPELINES_PUBLISHER \
        --project=$PROD_PROJECT_ID
    
    tr -d '\n' < azure-pipelines-publisher.json > azure-pipelines-publisher-oneline.json
    
  8. 서비스 계정 키 파일의 콘텐츠를 확인합니다.

    echo $(<azure-pipelines-publisher-oneline.json)
    

    다음 단계 중 하나에서 서비스 계정 키가 필요합니다.

Container Registry에 대해 서비스 연결 만들기

Azure Pipelines에서 Container Registry에 대해 새 서비스 연결을 만듭니다.

  1. Azure DevOps 메뉴에서 프로젝트 설정를 선택한 다음 파이프라인 > 서비스 연결을 선택합니다.
  2. 서비스 연결 만들기를 클릭합니다.
  3. 목록에서 Docker 레지스트리를 선택하고 다음을 클릭합니다.
  4. 대화상자에서 다음 필드의 값을 입력합니다.
    • 레지스트리 유형: Others
    • Docker 레지스트리: https://gcr.io/PROD_PROJECT_ID(PROD_PROJECT_IDhttps://gcr.io/azure-pipelines-test-project-12345와 같이 프로덕션 프로젝트 이름으로 바꿉니다).
    • Docker ID: _json_key
    • 비밀번호: azure-pipelines-publisher-oneline.json의 콘텐츠를 붙여 넣습니다.
    • 서비스 연결 이름: gcr-tutorial
  5. 저장을 클릭하여 연결을 만듭니다.

지속적으로 빌드

이제 Azure Pipelines를 사용하여 지속적 통합을 설정할 수 있습니다. Azure Pipelines는 Git 저장소로 커밋이 푸시될 때마다 코드를 빌드하고 빌드 아티팩트를 Docker 컨테이너로 패키징합니다. 그러면 컨테이너가 Container Registry에 게시됩니다.

저장소에 이미 다음 Dockerfile이 포함됩니다.

#
# Copyright 2020 Google LLC
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

FROM mcr.microsoft.com/dotnet/aspnet:6.0
EXPOSE 8080

#------------------------------------------------------------------------------
# Copy publishing artifacts.
#------------------------------------------------------------------------------

WORKDIR /app
COPY CloudDemo.MvcCore/bin/Release/net6.0/publish/ /app/

ENV ASPNETCORE_URLS=http://0.0.0.0:8080

#------------------------------------------------------------------------------
# Run application in Kestrel.
#------------------------------------------------------------------------------

ENTRYPOINT ["dotnet", "CloudDemo.MvcCore.dll"]

이제 YAML 구문을 사용하는 새 파이프라인을 만듭니다.

  1. Visual Studio 또는 명령줄 git 클라이언트를 사용하여 새 Git 저장소를 클론합니다.
  2. 저장소 루트에서 azure-pipelines.yml이라는 파일을 만듭니다.
  3. 다음 코드를 파일에 복사합니다.

    resources:
    - repo: self
      fetchDepth: 1
    queue:
      name: Hosted Ubuntu 1604
    trigger:
    - master
    variables:
      TargetFramework: 'net6.0'
      BuildConfiguration: 'Release'
      DockerImageName: 'PROD_PROJECT_ID/CloudDemo'
    steps:
    - task: DotNetCoreCLI@2
      displayName: Publish
      inputs:
        projects: 'applications/clouddemo/netcore/CloudDemo.MvcCore.sln'
        publishWebProjects: false
        command: publish
        arguments: '--configuration $(BuildConfiguration) --framework=$(TargetFramework)'
        zipAfterPublish: false
        modifyOutputPath: false
    - task: PublishBuildArtifacts@1
      displayName: 'Publish Artifact'
      inputs:
        PathtoPublish: '$(build.artifactstagingdirectory)'
    - task: Docker@2
      displayName: 'Login to Container Registry'
      inputs:
        command: login
        containerRegistry: 'gcr-tutorial'
    - task: Docker@2
      displayName: 'Build and push image'
      inputs:
        Dockerfile: 'applications/clouddemo/netcore/Dockerfile'
        command: buildAndPush
        repository: '$(DockerImageName)'
    

    PROJECT_ID를 프로덕션 프로젝트의 이름으로 바꾼 다음 파일을 저장합니다.

    Cloud Run이 Linux 기반 환경이므로 파이프라인에 Linux 기반 빌드 에이전트가 사용됩니다.

  4. 모든 변경사항을 커밋하고 Azure Pipelines로 푸시합니다.

    Visual Studio

    1. 팀 탐색기를 열고 아이콘을 클릭합니다.
    2. Changes(변경사항)를 클릭합니다.
    3. Add pipeline definition과 같은 커밋 메시지를 입력합니다.
    4. 모두 커밋 후 푸시를 클릭합니다.

    명령줄

    1. 수정된 모든 파일을 스테이징합니다.

      git add -A
      
    2. 로컬 저장소에 대한 변경사항을 커밋합니다.

      git commit -m "Add pipeline definition"
      
    3. Azure DevOps에 변경사항을 푸시합니다.

      git push
      
  5. Azure DevOps 메뉴에서 파이프라인를 선택한 후 파이프라인 만들기를 클릭합니다.

  6. Azure 저장소 Git를 선택합니다.

  7. 저장소를 선택합니다.

  8. 파이프라인 YAML 검토 페이지에서 실행을 클릭합니다.

    새 빌드가 트리거됩니다. 빌드가 완료되려면 2분 정도 걸릴 수 있습니다.

  9. 이미지가 Container Registry에 게시되었는지 확인하려면 Cloud Console에서 프로덕션 프로젝트로 전환하고 Container Registry > 이미지를 선택한 후 CloudDemo를 클릭합니다.

    단일 이미지와 이 이미지의 태그가 표시됩니다. 이 태그는 Azure Pipelines에서 실행된 빌드의 숫자 ID에 해당합니다.

지속적으로 배포

이제 커밋할 때마다 Azure Pipelines가 자동으로 코드를 빌드하고 Docker 이미지를 게시하므로 개발자는 배포 작업에만 집중할 수 있습니다.

다른 지속적 통합 시스템과 달리 Azure Pipelines는 빌드와 배포를 구분하며, 배포와 관련된 모든 태스크에 출시 관리라는 특수 도구 세트를 제공합니다.

Azure Pipelines 출시 관리는 다음과 같은 개념을 바탕으로 합니다.

  • 출시는 앱의 특정 버전을 구성하고 일반적으로 빌드 프로세스의 결과인 아티팩트 집합을 의미합니다.
  • 배포는 출시를 가져와서 특정 환경에 배포하는 프로세스를 의미합니다.
  • 배포는 작업으로 그룹화할 수 있는 일련의 태스크를 수행합니다.
  • 스테이지를 사용하여 파이프라인을 세분화하고 개발 및 테스트 환경과 같은 여러 환경으로의 배포를 조정할 수 있습니다.

새 빌드가 완료될 때마다 출시 파이프라인이 트리거되도록 설정합니다. 파이프라인은 개발과 프로덕션이라는 두 스테이지로 구성됩니다. 각 스테이지에서 출시 파이프라인은 빌드 파이프라인이 생성하는 Docker 이미지를 사용한 다음 이를 Cloud Run에 배포합니다.

이전에 구성한 빌드 파이프라인은 각 Docker 이미지를 빌드 ID로 태그 지정한 다음 Container Registry에 게시합니다. 따라서 출시 파이프라인에서 $BUILD_BUILDID 변수를 사용하여 배포할 올바른 Docker 이미지를 식별합니다.

Cloud Run 구성

Cloud Run은 완전 관리형 서버리스 환경이므로 인프라를 프로비저닝할 필요가 없습니다. Cloud Run 배포를 안전하게 보호하려면 IAM을 설정해야 합니다.

다음 다이어그램과 같이 Cloud Run 서비스를 배포하고 실행하려면 여러 ID가 필요합니다.

Cloud Run 배포에서 서비스 계정으로 실행되는 ID

이러한 각 ID는 서비스 계정으로 구현되며, 다음 테이블에 설명된 대로 특정 용도에 사용됩니다.

서비스 계정 사용 주체 용도 필요 역할
Azure Pipelines 게시자 빌드 파이프라인 Container Registry에 Docker 이미지 게시 roles/storage.admin(프로덕션 프로젝트만 해당)
Azure Pipelines 배포자 출시 파이프라인 Cloud Run 배포 시작 roles/run.admin
CloudDemo 서비스 실행 roles/iam.serviceAccountUser
Cloud Run 서비스 에이전트 Cloud Run Container Registry에서 Docker 이미지 가져오기 roles/storage.objectViewer(프로덕션 프로젝트만 해당)
CloudDemo 실행기(런타임 서비스 계정) CloudDemo 서비스 Google Cloud의 리소스에 액세스 없음

Azure Pipelines 게시자 서비스 계정을 만들고 구성했습니다. 다음 섹션에서는 나머지 서비스 계정을 만들고 구성합니다.

Cloud Run 서비스 계정 구성

  1. Cloud Shell 열기

  2. 다음 환경 변수를 초기화합니다.

    DEV_PROJECT_ID=DEV_PROJECT_ID
    PROD_PROJECT_ID=PROD_PROJECT_ID
    

    다음을 바꿉니다.

    • DEV_PROJECT_ID: 개발 프로젝트의 프로젝트 ID
    • PROD_PROJECT_ID: 프로덕션 프로젝트의 프로젝트 ID
  3. 개발 프로젝트와 프로덕션 프로젝트 모두에서 Cloud Run 및 Compute Engine API를 사용 설정합니다.

    gcloud services enable run.googleapis.com --project=$DEV_PROJECT_ID
    gcloud services enable run.googleapis.com --project=$PROD_PROJECT_ID
    

    이러한 API를 사용 설정하면 프로젝트에 Cloud Run 서비스 에이전트 계정이 생성됩니다.

  4. Docker 이미지가 저장된 프로덕션 프로젝트에서 두 개의 Cloud Run 서비스 에이전트 계정에 Container Registry에 대한 액세스 권한을 부여합니다.

    DEV_PROJECT_NUMBER=$(gcloud projects describe $DEV_PROJECT_ID \
        --format='value(projectNumber)')
    PROD_PROJECT_NUMBER=$(gcloud projects describe $PROD_PROJECT_ID \
        --format='value(projectNumber)')
    
    gcloud projects add-iam-policy-binding $PROD_PROJECT_ID \
        --member=serviceAccount:service-$DEV_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
        --role roles/storage.objectViewer
    
    gcloud projects add-iam-policy-binding $PROD_PROJECT_ID \
        --member=serviceAccount:service-$PROD_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
        --role roles/storage.objectViewer
    

CloudDemo 실행기 계정 구성

이제는 CloudDemo 서비스에 대한 커스텀 런타임 서비스 계정인 CloudDemo 실행기 계정을 구성할 수 있습니다.

  • CloudDemo-runner라는 서비스 계정을 만듭니다.

    gcloud iam service-accounts create clouddemo-runner \
        --display-name="CloudDemo Runner" \
        --project=$DEV_PROJECT_ID
    
    gcloud iam service-accounts create clouddemo-runner \
        --display-name="CloudDemo Runner" \
        --project=$PROD_PROJECT_ID
    
    DEV_CLOUDDEMO_RUNNER=clouddemo-runner@$DEV_PROJECT_ID.iam.gserviceaccount.com
    
    PROD_CLOUDDEMO_RUNNER=clouddemo-runner@$PROD_PROJECT_ID.iam.gserviceaccount.com
    

Azure Pipelines 배포자 계정 구성

마지막으로 Azure 출시 파이프라인이 Cloud Run에 배포하는 데 사용하는 Azure Pipelines 배포자 계정을 만들고 구성합니다.

  1. azure-pipelines-deployer라는 서비스 계정을 만듭니다.

    gcloud iam service-accounts create azure-pipelines-deployer \
        --display-name="Azure Pipelines Deployer" \
        --project=$PROD_PROJECT_ID
    
    AZURE_PIPELINES_DEPLOYER=azure-pipelines-deployer@$PROD_PROJECT_ID.iam.gserviceaccount.com
    
  2. 필요한 IAM 역할을 할당하여 개발 프로젝트에 새 Cloud Run 서비스 또는 버전을 배포합니다.

    gcloud projects add-iam-policy-binding $DEV_PROJECT_ID \
        --member serviceAccount:$AZURE_PIPELINES_DEPLOYER \
        --role roles/run.admin
    
    gcloud iam service-accounts add-iam-policy-binding \
        $DEV_CLOUDDEMO_RUNNER \
        --member=serviceAccount:$AZURE_PIPELINES_DEPLOYER \
        --role="roles/iam.serviceAccountUser" \
        --project=$DEV_PROJECT_ID
    
  3. 프로덕션 프로젝트에 동일한 역할 집합을 할당합니다.

    gcloud projects add-iam-policy-binding $PROD_PROJECT_ID \
        --member serviceAccount:$AZURE_PIPELINES_DEPLOYER \
        --role roles/run.admin
    
    gcloud iam service-accounts add-iam-policy-binding \
        $PROD_CLOUDDEMO_RUNNER \
        --member=serviceAccount:$AZURE_PIPELINES_DEPLOYER \
        --role="roles/iam.serviceAccountUser" \
        --project=$PROD_PROJECT_ID
    
  4. 서비스 계정 키를 생성합니다.

    gcloud iam service-accounts keys create azure-pipelines-deployer.json \
        --iam-account=$AZURE_PIPELINES_DEPLOYER \
        --project=$PROD_PROJECT_ID
    
    cat azure-pipelines-deployer.json | base64 -w 0
    

    출시 파이프라인을 구성할 때 이 명령어의 출력을 사용합니다.

출시 파이프 라인 구성

이제 Azure Pipelines로 돌아가 배포를 자동화할 수 있습니다. 여기에는 다음 단계가 포함됩니다.

  • 개발 환경에 배포
  • 프로덕션 환경에 배포를 시작하기 전에 수동 승인 요청
  • 프로덕션 환경에 배포

출시 정의 만들기

먼저 출시 정의를 만듭니다.

  1. Azure DevOps 메뉴에서 Pipelines(파이프라인) > Releases(출시)를 선택합니다.
  2. 새 파이프라인을 클릭합니다.
  3. 템플릿 목록에서 빈 작업을 선택합니다.
  4. 스테이지 이름을 입력하라는 메시지가 표시되면 Development를 입력합니다.
  5. 화면 상단에서 파이프라인 이름을 CloudDemo로 지정합니다.
  6. 파이프라인 다이어그램의 아티팩트 옆에서 추가를 클릭합니다.
  7. 빌드를 선택한 후 다음 설정을 추가합니다.
    • Source type(소스 유형): Build(빌드)
    • 소스(빌드 파이프라인): 빌드 정의를 선택합니다. 옵션이 하나뿐이어야 합니다.
    • Default version(기본 버전): 최신
    • 소스 별칭: build
  8. 추가를 클릭합니다.
  9. Artifact(아티팩트) 상자에서 Continuous deployment trigger(지속적 배포 트리거)(번개 아이콘)를 클릭하여 배포 트리거를 추가합니다.
  10. Continuous deployment trigger(지속적 배포 트리거)에서 스위치를 Enabled(사용 설정됨)로 설정합니다.
  11. Save(저장)를 클릭합니다.
  12. 원하는 경우 설명을 입력한 다음 확인을 클릭하여 확인합니다.

    파이프라인은 다음과 비슷하게 표시됩니다.

    자동 배포 설정의 파이프라인 뷰

개발 프로젝트에 배포

출시 정의를 만들었으면 이제 개발 프로젝트에 대한 Cloud Run 배포를 구성할 수 있습니다.

  1. 메뉴에서 태스크 탭으로 전환합니다.
  2. 에이전트 작업을 클릭합니다.
  3. Agent specification(에이전트 사양)ubuntu-18.04로 설정합니다.
  4. Agent job(에이전트 작업) 옆의 Add a task to agent job(에이전트 작업에 태스크 추가) 을 클릭하여 단계(phase)에 단계를 추가합니다.
  5. Command line(명령줄) 태스크를 선택하고 Add(추가)를 클릭합니다.
  6. 새로 추가된 태스크를 클릭하고 다음 설정을 구성합니다.

    1. 표시 이름: Deploy image to development project
    2. 스크립트:

      gcloud auth activate-service-account \
          --quiet \
          --key-file <(echo $(ServiceAccountKey) | base64 -d) && \
      gcloud run deploy clouddemo \
          --quiet \
          --service-account=clouddemo-runner@$(CloudRun.ProjectId.Development).iam.gserviceaccount.com \
          --allow-unauthenticated \
          --image=gcr.io/$(ContainerRegistry.ProjectId)/clouddemo:$BUILD_BUILDID \
          --platform=managed \
          --region=$(CloudRun.Region) \
          --project=$(CloudRun.ProjectId.Development)
      

      이 명령어는 환경 변수에서 서비스 계정 키를 가져온 후 gcloud CLI를 사용하여 애플리케이션을 Cloud Run에 배포합니다. gcloud CLI는 기본적으로 Azure Pipelines 에이전트에서 사용할 수 있습니다.

  7. 변수 탭으로 전환하고 다음 변수를 추가합니다.

    이름 보안 비밀
    ServiceAccountKey 이전에 azure-pipelines-deployer에 대해 생성된 서비스 계정 키.
    ContainerRegistry.ProjectId 프로덕션 프로젝트의 프로젝트 ID.
    CloudRun.Region Cloud Run 리소스를 배포할 이전에 선택한 리전.
    CloudRun.ProjectId.Development 개발 프로젝트의 프로젝트 ID.
    CloudRun.ProjectId.Production 프로덕션 프로젝트의 프로젝트 ID.
  8. 저장을 클릭합니다.

  9. 원하는 경우 설명을 입력한 다음 확인을 클릭하여 확인합니다.

프로덕션 클러스터에 배포

마지막으로 프로덕션 프로젝트에 대한 배포를 구성합니다.

  1. 메뉴에서 파이프라인 탭으로 전환합니다.
  2. 스테이지 상자에서 Add(추가) > New stage(새 스테이지)를 선택합니다.
  3. 템플릿 목록에서 빈 작업을 선택합니다.
  4. 스테이지 이름을 입력하라는 메시지가 표시되면 Production를 입력합니다.
  5. 새로 만든 스테이지의 번개 아이콘을 클릭합니다.
  6. 다음 설정을 구성합니다.

    1. Select trigger(트리거 선택): After stage
    2. Stages(스테이지): Development(개발)
    3. 사전 배포 승인: (사용 설정됨)
    4. 승인 담당자: 사용자 이름을 선택합니다.

    파이프라인은 다음과 비슷한 뷰를 표시합니다.

    클러스터 배포 설정의 파이프라인 뷰

  7. 태스크 탭으로 전환합니다.

  8. Tasks(태스크) 탭 위로 마우스를 가져가 Tasks(태스크) > Production(프로덕션)을 선택합니다.

  9. 에이전트 작업을 클릭합니다.

  10. Agent specification(에이전트 사양)ubuntu-18.04로 설정합니다.

  11. 에이전트 작업에 태스크 추가 을 클릭하여 단계(phase)에 단계를 추가합니다.

  12. Command line(명령줄) 태스크를 선택한 다음 Add(추가)를 클릭합니다.

  13. 새로 추가된 태스크를 클릭하고 다음 설정을 구성합니다.

    1. 표시 이름: Deploy image to production project
    2. 스크립트:

      gcloud auth activate-service-account \
          --quiet \
          --key-file <(echo $(ServiceAccountKey) | base64 -d) && \
      gcloud run deploy clouddemo \
          --quiet \
          --service-account=clouddemo-runner@$(CloudRun.ProjectId.Production).iam.gserviceaccount.com \
          --allow-unauthenticated \
          --image=gcr.io/$(ContainerRegistry.ProjectId)/clouddemo:$BUILD_BUILDID \
          --platform=managed \
          --region=$(CloudRun.Region) \
          --project=$(CloudRun.ProjectId.Production)
      
  14. 저장을 클릭합니다.

  15. 원하는 경우 설명을 입력한 다음 확인을 클릭하여 확인합니다.

파이프라인 실행

이제 전체 파이프라인을 구성했으므로 소스 코드 변경을 수행하여 파이프라인을 테스트할 수 있습니다.

  1. 로컬 컴퓨터에서 이전에 클론한 Git 저장소의 applications\clouddemo\netcore\CloudDemo.MvcCore\Views\Home\Index.cshtml 파일을 엽니다.
  2. 26행에서 ViewBag.Title 값을 Home Page에서 Home Page Cloud Run으로 변경합니다.
  3. 변경사항을 커밋한 다음 Azure Pipelines로 푸시합니다.

    Visual Studio

    1. 팀 탐색기를 열고 아이콘을 클릭합니다.
    2. Changes(변경사항)를 클릭합니다.
    3. Change site title과 같은 커밋 메시지를 입력합니다.
    4. 모두 커밋 후 푸시를 클릭합니다.

    명령줄

    1. 수정된 모든 파일을 스테이징합니다.

      git add -A
      
    2. 로컬 저장소에 대한 변경사항을 커밋합니다.

      git commit -m "Change site title"
      
    3. 변경사항을 Azure Pipelines로 푸시합니다.

      git push
      
  4. Azure DevOps 메뉴에서 파이프라인을 선택합니다. 빌드가 트리거됩니다.

  5. 빌드가 완료되면 Pipelines(파이프라인) > Releases(출시)를 선택합니다. 출시 프로세스가 시작됩니다.

  6. Release-1을 클릭하여 세부정보 페이지를 열고 Development(개발) 스테이지의 상태가 Succeeded(성공)로 전환될 때까지 기다립니다.

  7. Google Cloud Console에서 개발 프로젝트로 전환합니다.

  8. 메뉴에서 Compute(컴퓨팅) > Cloud Run을 선택합니다.

    clouddemo 서비스가 성공적으로 배포되었습니다.

    Cloud Run의 배포 상태

  9. 자세한 내용을 보려면 clouddemo를 클릭합니다.

    Cloud Run이 서비스를 프로비저닝했음을 보여주는 URL이 표시됩니다.

  10. 새 브라우저 탭에서 URL을 열어 CloudDemo 앱이 배포되었고 커스텀 제목을 사용하는지 확인합니다.

  11. Azure Pipelines에서 Production(프로덕션) 스테이지에 인접한 Approve(승인)를 클릭하여 배포를 프로덕션 환경으로 승격합니다.

  12. (선택사항) 설명을 입력합니다.

  13. Approve(승인)를 클릭하여 확인하고 Production(프로덕션) 환경의 상태가 Succeeded(성공)로 전환될 때까지 기다립니다.

  14. Google Cloud Console에서 프로덕션 프로젝트로 전환합니다.

  15. 메뉴에서 Compute(컴퓨팅) > Cloud Run을 선택합니다.

    clouddemo 서비스가 프로덕션 프로젝트에 배포됩니다.

  16. 자세한 내용을 보려면 clouddemo를 클릭합니다.

    Cloud Run이 서비스를 프로비저닝했음을 보여주는 URL이 표시됩니다.

  17. 새 브라우저 탭에서 URL을 열어 CloudDemo 앱이 프로덕션에 배포되었고 커스텀 제목을 사용하는지 확인합니다.

정리

이 튜토리얼을 완료한 후에 추가 비용이 발생하지 않도록 하려면 만든 항목을 삭제하세요.

Azure Pipelines 프로젝트 삭제

Azure Pipelines 프로젝트를 삭제하려면 Azure DevOps 서비스 문서를 참조하세요. Azure Pipelines 프로젝트를 삭제하면 모든 소스 코드 변경사항도 손실됩니다.

Google Cloud 개발 및 프로덕션 프로젝트 삭제

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

    리소스 관리로 이동

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

다음 단계