이 문서에서는 배포 전후에 임의의 프로그램이나 작업을 실행하는 방법을 설명합니다.
Cloud Deploy 및 Skaffold가 작업을 실행하여 배포 전 작업, 배포 후 작업 또는 둘 다를 수행하도록 구성할 수 있습니다. 이러한 방식으로 실행되는 프로그램을 '후크'라고 합니다. 배포 전 및 배포 후 후크는 출시에서 배포 전 및 배포 후 작업으로 실행됩니다.
지정된 Cloud Deploy 실행 환경에서 실행되도록 각 후크를 구성할 수 있지만 Google Kubernetes Engine에 배포하는 경우에는 선택적으로 애플리케이션을 배포하는 GKE 클러스터에서 실행되도록 구성할 수 있습니다.
배포 후크는 멱등적이라고 가정됩니다. 지정된 작업이 두 번 이상 실행되는 경우 추가 효과는 없습니다.
배포 후크 작동 방식
다음은 배포 후크를 구성하는 단계와 Skaffold 및 Cloud Deploy에서 이러한 후크를 실행하는 프로세스를 설명합니다.
특정 출시 버전에 사용되는
skaffold.yaml
을 구성하여 후크를 실행하는 데 사용할 컨테이너 이미지와 각 컨테이너에서 실행할 특정 명령어 또는 스크립트를 식별하는customActions
을 포함합니다.배포 파이프라인 진행에서 하나 이상의 단계에 후크를 구성하면 각 후크는
skaffold.yaml
에서 구성한customActions
중 하나를 참조합니다.출시의 배포 작업이 실행되기 전에 Skaffold는 파이프라인 진행의
predeploy
스탠자에서 참조되는skaffold.yaml
에 구성된 모든 명령어를 실행합니다.predeploy
후크는 항상 단계의 첫 번째 작업으로 실행됩니다.출시의 배포 작업이 실행되면 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과 동일합니다.
predeploy
및 postdeploy
에 작업을 쉼표로 구분하여 두 개 이상 지정할 수 있습니다. 작업이 1개 이상 지정되면 지정된 순서대로 순차적으로 실행됩니다. 작업(배포 전 또는 배포 후)이 첫 번째 작업에서 실패하면 나머지 작업은 실행되지 않습니다.
기본적으로 두 개 이상의 컨테이너를 동시에 실행 중이며 작업이 실패하면 두 컨테이너가 모두 중지됩니다. 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
후크 작업을 포함하는 출시의 단계입니다.
파라미터를 환경 변수로 배포
Cloud Deploy는 이 섹션에 나열된 환경 변수 외에도 설정한 배포 매개변수를 커스텀 컨테이너에 전달할 수 있습니다.
다음 단계
빠른 시작: 배포 전후 후크 실행 사용해 보기
Skaffold 정보 자세히 알아보기