애플리케이션 배포

이 페이지에서는 Google Cloud Deploy를 사용하여 애플리케이션을 원하는 대상 런타임 환경으로 가져오는 방법을 설명합니다.

Google Cloud Deploy는 여러 배포 대상의 프로세스를 순서대로 진행하여 애플리케이션을 가져오며, 이 페이지에서는 대략적인 프로세스를 설명합니다.

이 페이지에 설명된 프로세스에서는 배포 파이프라인을 만들고 하나 이상의 YAML 구성 파일을 사용하여 대상을 정의합니다. 그런 다음 이 파이프라인을 등록하고 해당 파이프라인에서 배포를 관리하는 출시 버전으로 애플리케이션을 제출합니다.

시작하기 전에

  • 배포할 컨테이너 이미지 및 컨테이너 이미지를 식별하는 Kubernetes 매니페스트가 있어야 합니다.

    이미지를 빌드하고 배치하려면 지속적 통합 파이프라인 또는 기타 프로세스가 필요합니다. CI 도구는 Cloud Build, Jenkins 또는 Google Cloud Deploy 배포 파이프라인에 제공할 컨테이너 이미지를 생성하는 모든 것이 될 수 있습니다.

  • Kubernetes 애플리케이션 렌더링 및 배포 방법을 Google Cloud Deploy에 알려주는 skaffold.yaml 구성 파일이 아직 없으면 만듭니다.

    Google Cloud Deploy는 skaffold render를 호출하여 이 파일을 사용하여 Kubernetes 매니페스트를 렌더링하고 skaffold apply을 호출하여 대상에 배포합니다.

    skaffold.yaml 파일은 다음 예시와 같이 첫 번째 줄에 지원되는 버전에 해당하는 네임스페이스를 참조해야 합니다.

    apiVersion: skaffold/v2beta16

    아직 skaffold.yaml 파일이 없으면 skaffold init를 사용하여 파일을 생성할 수 있습니다.

    자세한 내용은 Google Cloud Deploy에서 Skaffold 사용을 참조하세요. 또한 Google Cloud Deploy에서 매니페스트 관리에서는 Helm, Kustomize, kpt와 같은 매니페스트 관리 도구로 Skaffold 및 Google Cloud Deploy를 사용하는 방법을 자세히 설명합니다.

  • 실행 서비스 계정에 필요한 IAM 역할 및 권한이 있는지 확인합니다.

배포 파이프라인 만들기

배포 파이프라인은 배포 대상진행 상황을 설명합니다. 배포 파이프라인과 동일한 파일 또는 하나 이상의 개별 파일에서 이러한 대상을 정의할 수 있습니다.

배포 파이프라인 및 대상 정의 파일을 만든 후 각 파일에 gcloud deploy apply를 실행하여 Google Cloud Deploy 리소스로 등록합니다.

배포 파이프라인 및 대상 정의

배포 파이프라인 구성 파일의 구조는 여기에 설명되어 있습니다.

이 파일은 원하는 이름으로 부를 수 있습니다. 규칙에 따라 대상 정의를 포함하는 배포 파이프라인 구성을 clouddeploy.yaml이라고 하며, 대신 하나 이상의 별도 파일에서 정의된 대상을 참조하는 것은 delivery-pipeline.yaml라고 합니다.

배포 파이프라인 및 대상 등록

Google Cloud Deploy에 배포 파이프라인을 등록하려면 각 정의 파일마다 gcloud deploy apply를 한 번 실행합니다. 즉, 3개의 파일에 3개의 대상을 정의하면 명령어는 4번(배포 파이프라인당 1회, 각 대상당 1회) 실행합니다.

다음 명령어는 동일한 파일에 정의된 대상에 배포 파이프라인을 등록합니다.

gcloud deploy apply --file=PIPELINE_CONFIG \
                         --region=LOCATION
                         --project=PROJECT

이제 출시의 배포와 동일한 프로젝트 및 리전의 모든 배포 파이프라인에서 사용할 수 있는 대상 리소스를 관리할 수 있는 배포 파이프라인이 준비되었습니다.

단일 파일 예시

이 예시의 명령어는 동일한 파일에 모두 정의된 배포 파이프라인과 대상을 등록합니다.

gcloud deploy apply --file=clouddeploy.yaml --region=us-central1

개별 파일 사용 예시

이 예시에서는 3개의 개별 파일에 정의된 3개의 대상이 있으므로 4개의 명령어를 실행합니다.

gcloud deploy apply --file=delivery-pipeline.yaml --region=us-central1 && \
gcloud deploy apply --file=target_dev.yaml --region=us-central1 && \
gcloud deploy apply --file=target_staging.yaml --region=us-central1 && \
gcloud deploy apply --file=target_prod.yaml --region=us-central1

gcloud config set deploy/region [REGION] 플래그를 사용하여 기본값을 설정하지 않는 한 --region 플래그가 필요합니다. 리전은 배포 파이프라인과 파이프라인이 참조하는 모든 대상에 대해 동일해야 합니다.

기존 파이프라인 및 대상 수정

나중에 배포 파이프라인 또는 대상 구성을 수정하고 gcloud deploy apply를 실행하여 파이프라인 또는 대상 리소스를 업데이트할 수 있습니다. 하지만 이러한 변경사항은 원본 배포 파이프라인에서 관리되므로 기존 출시에 영향을 주지 않습니다.

배포를 위한 수동 승인 필요

특정 대상에 대한 수동 승인을 요청하려면 대상 정의에 다음 속성을 포함합니다.

requireApproval: true

기본값은 false입니다. Delivery-pipeline 구성에서 이 속성을 생략하거나 값을 제공하지 않으면 이 대상에 배포할 때 승인이 필요하지 않습니다. (하지만 대상으로 승격하려는 호출자에는 여전히 clouddeploy.rollouts.create IAM 권한이 필요합니다.)

첫 번째 대상에 수동 승인이 필요할 수도 있습니다. CLI를 사용하여 출시가 생성되면 첫 번째 대상에 대해 rollout가 자동으로 생성됩니다. 승인이 필요한 경우 Google Cloud Deploy는 rollout를 만들지만 승인이 부여될 때까지 출시 대기 상태가 됩니다.

배포 파이프라인을 호출하여 애플리케이션 배포

이제 만든 배포 파이프라인에 따라 배포되도록 애플리케이션을 제출할 수 있습니다.

  1. 일반 지속적 통합(CI) 프로세스를 실행하여 배포 가능한 아티팩트를 만듭니다.

  2. Google Cloud Deploy를 호출하여 릴리스를 만들어서 배포 파이프라인을 시작합니다.

    Skaffold 구성이 포함된 디렉터리에서 다음 명령어를 실행합니다.

    gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME
    

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

    RELEASE_NAME은 이 출시에 지정할 이름입니다. 이름은 이 배포 파이프라인의 모든 출시에서 고유해야 합니다.

    PIPELINE_NAME은 대상의 진행 과정을 통해 이 출시 버전의 배포를 관리할 배포 파이프라인의 이름입니다. 이 이름은 파이프라인 정의의 name 필드와 일치해야 합니다.

이 명령어는 구성이 포함된 tarball을 Cloud Storage 버킷에 업로드하고 출시 버전을 만듭니다. 또한 Google Cloud Deploy는 출시를 자동으로 만들고 배포 파이프라인에 정의된 첫 번째 대상에 이미지를 배포합니다.

이 명령어에 표시된 매개변수 외에도 다음 옵션 중 하나를 포함할 수 있습니다.

  • --images=<name=path/name:$IMAGE_SHA>,<name=path/name:$IMAGE_SHA>

    이미지 전체 경로 바꾸기에 대한 이미지 이름 모음입니다.

  • --build_artifacts=<path/file>

    이미지 전체 경로 바꾸기를 나타내기 위해 전달할 수 있는 Skaffold 빌드 아티팩트 출력 파일에 대한 참조입니다.

이 두 옵션은 상호 배타적입니다.

출시 버전 승격

배포 파이프라인에 정의된 대상에 출시 버전을 배포하면 다음 대상으로 승격할 수 있습니다.

gcloud

gcloud deploy releases promote --release=RELEASE_NAME --delivery-pipeline=PIPELINE_NAME

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

RELEASE_NAME은 승격하는 출시의 이름입니다.

PIPELINE_NAME은 이 출시 버전의 배포를 관리하는 데 사용하는 배포 파이프라인의 이름입니다.

Console

  1. 배포 파이프라인 페이지를 엽니다.

  2. 배포 파이프라인 목록에 표시된 파이프라인을 클릭합니다.

    배포 파이프라인 세부정보 페이지에는 배포 파이프라인의 진행 상태가 그래픽으로 표시됩니다.

    Google Cloud Console의 배포 파이프라인 시각화

  3. 배포 파이프라인 시각화의 첫 번째 타겟에서 승격을 클릭합니다.

    출시 승격 대화상자가 표시됩니다. 승격하는 대상의 세부정보가 표시됩니다.

  4. 승격을 클릭합니다.

출시가 생성된 후 배포 파이프라인 또는 대상이 변경되면 Google Cloud Deploy는 가능한 불일치 메시지를 반환하고 승격을 확인하라는 메시지를 표시합니다. 계속 진행하기 전에 메시지에 n를 응답하고 파이프라인 버전 간의 차이점을 검사할 수 있습니다. 그럼에도 승격을 선택하면 출시 버전이 생성될 때 정의된 대로 배포 파이프라인에 따라 출시 버전이 배포됩니다. 파이프라인 불일치에 대한 자세한 내용은 출시당 파이프라인 인스턴스를 참조하세요.

Google Cloud Deploy는 대상에 출시 버전에 대한 rollout를 만들고 출시는 배포를 위해 대기열에 추가됩니다. 배포되면 배포 파이프라인 시각화는 이러한 사실을 보여줍니다.

Google Cloud Console의 배포 파이프라인 시각화

프로모션 승인

각 대상에 출시 버전을 배포하기 전에 승인이 필요할 수 있습니다.

승인이 필요한 대상으로 승격하면 Google Cloud Deploy가 Pub/Sub 메시지를 cd-approvals 주제에 게시합니다.

승인 작동 방식에 대한 자세한 내용은 출시 승인 또는 거부를 참조하세요.

수동 배포

정상적인 사용 과정에서 Google Cloud Deploy는 애플리케이션을 진행 상황의 각 대상에 순차적으로 배포합니다. 하지만 애플리케이션을 정의된 대상에 수동으로 배포할 수도 있습니다.

새 출시 버전 또는 기존 출시 버전을 수동으로 배포할 수 있습니다.

기존 출시 버전을 수동으로 배포

이미 생성된 출시 버전이 있는 경우 원하는 대상으로 승격할 수 있습니다.

gcloud deploy releases promote --release=RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --to-target=TARGET_NAME

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

  • RELEASE_NAME은 원하는 대상으로 수동 승격하는 출시의 이름입니다.

  • PIPELINE_NAME은 재정의하는 자동 배포 진행 상태를 설명하는 배포 파이프라인의 이름입니다.

  • TARGET_NAME은 수동으로 배포할 대상의 이름입니다.

새 출시 버전 수동 배포

기본적으로 Google Cloud Deploy는 출시 버전을 만들 때 프로모션 시퀀스의 첫 번째 대상에 자동으로 배포합니다. 그러나 첫 번째가 아닌 대상을 지정할 수 있습니다.

진행 중인 기본 첫 번째 대상과 마찬가지로 Google Cloud Deploy는 지정된 대상에 대한 rollout을 자동으로 만들고 출시를 배포합니다.

새 출시 버전을 수동으로 배포하려면 다음 명령어를 실행하세요.

gcloud deploy releases create --release=RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --to-target=TARGET_NAME

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

  • RELEASE_NAME은 원하는 대상으로 수동 승격하는 출시의 이름입니다.

  • PIPELINE_NAME은 재정의하는 자동 배포 진행 상태를 설명하는 배포 파이프라인의 이름입니다.

  • TARGET_NAME은 수동으로 배포할 대상의 이름입니다.

수동 배포가 진행 상황에 미치는 영향

특정 대상에 수동으로 배포한 후 대상을 지정하지 않고 출시 버전을 승격하면 Google Cloud Deploy는 진행 중인 올바른 다음 대상으로 이를 승격합니다. 이는 서비스가 출시가 배포된 가장 멀리 있는 대상을 추적하기 때문입니다. 진행 중인 마지막 대상에 이미 출시 버전이 있는 경우 Google Cloud Deploy에서 승격할 추가 대상이 없음을 나타내는 메시지를 반환합니다.

다음 단계