배포 전후에 후크 실행

이 문서에서는 배포 전후에 임의의 프로그램이나 작업을 실행하는 방법을 설명합니다.

Cloud Deploy 및 Skaffold가 작업을 실행하여 배포 전 작업, 배포 후 작업 또는 둘 다를 수행하도록 구성할 수 있습니다. 이러한 방식으로 실행되는 프로그램을 '후크'라고 합니다. 배포 전 및 배포 후 후크는 출시에서 배포 전 및 배포 후 작업으로 실행됩니다.

지정된 Cloud Deploy 실행 환경에서 실행되도록 각 후크를 구성할 수 있지만 Google Kubernetes Engine에 배포하는 경우에는 선택적으로 애플리케이션을 배포하는 GKE 클러스터에서 실행되도록 구성할 수 있습니다.

배포 후크는 멱등성을 갖는 것으로 간주됩니다. 지정된 작업이 두 번 이상 실행되는 경우 추가 효과는 없습니다.

배포 후크 작동 방식

다음은 배포 후크를 구성하는 단계와 Skaffold 및 Cloud Deploy에서 이러한 후크를 실행하는 프로세스를 설명합니다.

  1. 특정 출시 버전에 사용되는 skaffold.yaml을 구성하여 후크를 실행하는 데 사용할 컨테이너 이미지와 각 컨테이너에서 실행할 특정 명령어 또는 스크립트를 식별하는 customActions을 포함합니다.

  2. 배포 파이프라인 진행에서 하나 이상의 단계에 후크를 구성하면 각 후크는 skaffold.yaml에서 구성한 customActions 중 하나를 참조합니다.

  3. 출시의 배포 작업을 실행하기 전에 Skaffold는 파이프라인 진행의 predeploy 스탠자에서 참조되는 skaffold.yaml에 구성된 명령어를 실행합니다.

    predeploy 후크는 항상 해당 단계의 첫 번째 작업으로 실행됩니다.

  4. 출시의 배포 작업이 실행되면 Cloud Deploy는 파이프라인 진행의 postdeploy 스탠자에서 참조되는 skaffold.yaml에 구성된 명령어를 실행합니다.

배포 후크는 기본 Cloud Deploy 실행 환경 또는 지정된 대체 실행 환경에서 실행됩니다. GKE 및 GKE Enterprise에 배포하는 경우 선택적으로 애플리케이션이 배포되는 동일한 클러스터에서 후크를 실행할 수 있습니다.

카나리아 배포에 배포 후크 사용

카나리아 배포를 위해 배포 후크를 구성할 때는 알아야 할 사항이 몇 가지 있습니다.

  • 배포 파이프라인 단계에서 후크 구성(predeploy, postdeploy)은 strategy.standard보다 strategy.canary.canaryDeployment 또는 strategy.canary.customCanaryDeployment.phaseConfigs 아래에 있습니다.

  • 자동화된 카나리아의 경우 predeploy 후크는 첫 번째 단계에서만 배포 전에만 실행되고, postdeploy 후크는 마지막 단계(안정됨)의 배포 이후에만 실행됩니다.

Skaffold에서 작업 구성

skaffold.yaml 파일에서 customActions 스탠자는 다음과 같이 구성된 하나 이상의 customActions 스탠자를 사용합니다.

customActions
- name: ACTION_NAME
  containers:
  - name: CONTAINER_NAME
    image: IMAGE
    command: [COMMANDS_TO_RUN]
    args: [LIST_OF_ARGS]

다음은 이 customerActions 스탠자의 내용입니다.

  • ACTION_NAME

    이 작업의 이름입니다. 이 이름은 원하는 대로 지정할 수 있지만 이 skaffold.yaml 내에서 고유해야 합니다. 이 이름은 배포 파이프라인 단계에서 정의된 배포 전 및 배포 후 작업에서 참조되는 이름입니다.

  • CONTAINER_NAME

    특정 컨테이너 이름입니다. 이 이름은 원하는 대로 지정할 수 있지만 이 skaffold.yaml 내에서 고유해야 합니다.

  • IMAGE

    명령어를 실행할 컨테이너 이미지의 이름입니다.

  • COMMANDS_TO_RUN

    이 컨테이너에서 실행할 진입점 목록입니다. "/bin/sh"는 셸을 호출하기 위해 지정하는 일반적인 명령어이며, 해당 셸에서 실행할 명령어를 인수에 포함합니다.

  • LIST_OF_ARGS

    명령어에 제공할 인수 목록입니다. 쉼표로 구분된 목록이며 각 인수는 따옴표로 묶입니다. COMMAND_TO_RUN"/bin/sh"인 경우 인수 중 하나는 "-c"이며 또 다른 인수는 호출하는 셸에서 실행할 전체 명령어입니다.

    예를 들면 다음과 같습니다.

    command: ["/bin/sh"]
    args: ["-c", `echo "This command ran!"`]
    

Skaffold 맞춤 액션에 대한 자세한 내용은 Skaffold 문서를 참조하세요.

작업을 참조하도록 파이프라인 구성

배포 후크 구성을 완료하려면 skaffold.yaml 파일에서 정의한 맞춤 액션을 참조하도록 배포 파이프라인을 구성합니다. 배포 전 및 배포 후 작업은 파이프라인 진행 중 하나 이상의 특정 단계로 구성됩니다.

standard 배포 전략을 사용할 때 파이프라인 단계에서 배포 전 및 배포 후 후크를 구성하는 방법은 다음과 같습니다.

serialPipeline:
  stages:
  - targetId: hooks-staging
    profiles: []
    strategy:
      standard:
        predeploy:
          actions: ["PREDEPLOY-ACTION"]
        postdeploy:
          actions: ["POSTDEPLOY-ACTION"]

이 YAML 내용은 다음과 같습니다.

  • PREDEPLOY_ACTION

    skaffold.yaml에서 배포 전에 실행할 맞춤 액션을 정의하는 데 사용한 ACTION_NAME과 동일합니다.

  • POSTDEPLOY_ACTION

    skaffold.yaml에서 배포 후 실행할 맞춤 액션을 정의하는 데 사용한 ACTION_NAME과 동일합니다.

predeploypostdeploy에 쉼표로 구분된 작업을 2개 이상 지정할 수 있습니다. 작업이 2개 이상 지정되면 지정된 순서에 따라 순차적으로 실행됩니다. 작업(배포 전 또는 배포 후)이 첫 번째 작업에서 실패하면 나머지 작업은 실행되지 않습니다.

기본적으로 둘 이상의 컨테이너를 동시에 실행하고 작업이 실패하면 두 컨테이너 모두 중지됩니다. Skaffold 맞춤 액션 실패 전략을 사용하여 이 동작을 구성할 수 있습니다.

애플리케이션 클러스터에서 후크 실행

기본적으로 배포 후크는 Cloud Deploy 실행 환경에서 실행됩니다. 또한 애플리케이션이 실행되는 동일한 클러스터에서 이러한 맞춤 액션을 실행하도록 Skaffold를 구성할 수도 있습니다. skaffold.yaml에서 맞춤 액션을 구성하고 파이프라인 단계에서 사용 설정하면 작업이 해당 대상의 클러스터에서 자동으로 실행됩니다.

이 기능은 GKE 및 GKE Enterprise 배포에서만 사용할 수 있으며 Cloud Run에는 사용할 수 없습니다. Cloud Run에 대한 배포는 Cloud Deploy 실행 환경에서만 후크를 실행할 수 있습니다.

클러스터에서 후크를 실행하려면 skaffold.yaml 구성 파일 내의 특정 맞춤 액션에 대한 customActions 스탠자에 executionMode.kubernetesCluster 스탠자를 포함합니다.

customActions
- name: ACTION_NAME
  containers:
  - name: CONTAINER_NAME
    image: IMAGE
    command: [COMMANDS_TO_RUN]
    args: [LIST_OF_ARGS]
  executionMode:
    kubernetesCluster: {}

다음은 애플리케이션 클러스터에서 후크 컨테이너를 호출하기 위해 executionMode가 포함된 customActions 스탠자의 예시입니다.

customActions:
- name: predeploy-action
  containers:
  - name: predeploy-echo
    image: ubuntu
    command: ["/bin/sh"]
    args: ["-c", 'echo "this is a predeploy action"' ]
  executionMode:
    kubernetesCluster: {}

executionMode 스탠자는 선택사항입니다. 이를 생략하면 Skaffold가 Cloud Deploy 실행 환경에서 맞춤 액션 컨테이너를 실행합니다.

사용 가능한 환경 변수

Cloud Deploy는 후크에 사용할 수 있는 다음 환경 변수를 실행 환경에 제공하고 채웁니다.

  • ANTHOS_MEMBERSHIP

    ANTHOS 유형 대상의 경우 Anthos 멤버십의 완전하게 지정된 리소스 이름입니다.

  • CLOUD_RUN_LOCATION

    RUN 유형 대상의 경우 Cloud Run 서비스가 배포된 리전입니다.

  • CLOUD_RUN_PROJECT

    RUN 유형 대상의 경우 Cloud Run 서비스가 생성된 프로젝트입니다.

  • CLOUD_RUN_SERVICE

    RUN 유형 대상의 경우 배포된 Cloud Run 서비스의 이름입니다.

  • CLOUD_RUN_SERVICE_URLS

    RUN 유형 대상의 경우 최종 사용자가 서비스에 액세스하는 데 사용할 URL 또는 쉼표로 구분된 URL 목록입니다. Google Cloud 콘솔의 해당 서비스에 대한 Cloud Run 서비스 세부정보에서 이를 확인할 수 있습니다.

  • CLOUD_RUN_REVISION

    RUN 유형 대상의 경우 Cloud Run 서비스의 특정 버전입니다.

  • GKE_CLUSTER

    GKE 유형의 대상의 경우 Google Kubernetes Engine 클러스터의 완전히 지정된 리소스 이름입니다(예: projects/p/locations/us-central1/clusters/dev).

  • TARGET_TYPE

    대상의 특정 런타임 유형으로, GKE, ANTHOS, RUN입니다. 커스텀 대상의 경우 설정되지 않습니다.

  • CLOUD_DEPLOY_LOCATION

    Cloud Deploy 리소스가 포함된 리전입니다.

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    전달 파이프라인의 ID입니다.

  • CLOUD_DEPLOY_TARGET

    대상의 ID입니다.

  • CLOUD_DEPLOY_PROJECT

    Cloud Deploy 리소스가 포함된 Google Cloud 프로젝트입니다.

  • CLOUD_DEPLOY_RELEASE

    후크가 실행되는 출시 버전의 ID입니다.

  • CLOUD_DEPLOY_ROLLOUT

    후크 작업을 포함하는 출시의 ID입니다.

  • CLOUD_DEPLOY_JOB_RUN

    작업의 현재 실행을 나타내는 작업 실행의 ID입니다.

  • CLOUD_DEPLOY_PHASE

    후크 작업을 포함하는 출시의 단계입니다.

다음 단계