Cloud Deploy를 사용하면 출시 버전의 매개변수를 전달할 수 있으며, 이러한 값은 매니페스트가 해당 대상에 적용되기 전에 매니페스트 또는 매니페스트에 제공됩니다. 이 대체는 매니페스트가 렌더링된 후에 수행됩니다. 값은 해당 자리표시자를 포함하는 skaffold.yaml
파일에서 식별된 모든 매니페스트에 제공됩니다.
매니페스트에 자리표시자를 포함하고 Cloud Deploy 배포 파이프라인 또는 대상 구성에서 또는 출시를 만들 때 해당 자리표시자의 값을 설정하기만 하면 됩니다.
이 문서에서는 이를 수행하는 방법을 설명합니다.
배포 매개변수를 사용하는 이유
일반적인 용도는 동시 배포에서 여러 대상의 매니페스트에 다른 값을 적용하는 것입니다. 그러나 매니페스트에 렌더 후 키-값 쌍 대체가 필요한 모든 항목에 배포 매개변수를 사용할 수 있습니다.
작동 원리
다음 단계에서는 배포 매개변수를 구성하고 값을 제공하는 일반적인 프로세스를 설명합니다.
여기에 설명된 대로 배포 매개변수화를 구성해보세요.
여기에는 다음이 포함됩니다.
매니페스트에 자리표시자를 추가합니다.
이러한 자리표시자의 값을 추가합니다.
이렇게 하는 방법은 여기에 설명된 세 가지 방법이 있습니다.
출시 버전을 만들면 매니페스트가 렌더링됩니다.
템플릿 매니페스트로 시작하면 템플릿 변수에 값이 적용됩니다. 원시 매니페스트로 시작하면 변경되지 않습니다. 이 렌더링은 Skaffold에 의해 수행됩니다.
하지만 매니페스트에 렌더링 변수가 적용되지 않는 추가 변수를 포함할 수 있습니다. 이 문서에 설명된 배포 매개변수입니다.
출시 버전을 만들 때 모든 배포 매개변수는 매니페스트가 적용되기 전에 값을 대체하는 데 사용되는 사전으로 컴파일됩니다.
렌더링 후 Cloud Deploy는 배포 매개변수의 값을 대체합니다.
이는 첫 번째 단계에서 구성한 값입니다.
렌더링 프로세스는 이미 매니페스트 템플릿에 값을 적용하고, 일부 값을 바꾸고, Cloud Deploy 전용 라벨을 추가했습니다. 그러나 이러한 배포 매개변수의 값은 렌더링 후 대체됩니다. 매니페스트 템플릿과 배포 매개변수의 차이점은 여기에서 확인하세요.
매니페스트가 대상 런타임에 적용되어 애플리케이션을 배포합니다.
여기에는 렌더링 시 대체되는 값과 모든 배포 매개변수에 대한 값이 포함됩니다.
값을 전달하는 다양한 방법
다음 세 가지 방법으로 매개변수와 매개변수 값을 제공할 수 있습니다.
-
전달 파이프라인 진행의 단계에 대한 정의에 매개변수와 값을 제공합니다. 매개변수는 해당 단계로 표시된 대상으로 전달됩니다. 해당 단계가 다중 타겟을 참조하는 경우 여기에 설정된 값이 모든 하위 대상에 사용됩니다.
이 방법을 사용하면 특정 파이프라인 내 모든 출시의 영향을 받는 모든 대상 값을 바꿀 수 있습니다. 스테이지에 정의된 매개변수는 라벨을 식별하며 해당 스테이지에 해당하는 타겟에 일치하는 라벨이 있어야 합니다.
-
대상 자체의 정의에서 매개변수와 해당 값을 구성합니다. 이 방법을 사용하면 모든 출시 버전에서 해당 타겟의 값을 대체할 수 있습니다.
명령줄에서 출시 버전을 만들 때
gcloud deploy releases create
명령어에--deploy-parameters
플래그를 사용하여 매개변수와 값을 포함합니다.이 방법을 사용하면 출시 생성 시에 값을 대체하여 영향을 받는 모든 대상의 매니페스트에 해당 값을 적용할 수 있습니다.
구성에 대한 자세한 내용은 여기를 참조하세요.
두 개 이상의 방법을 사용할 수 있나요?
예. 파이프라인 단계, 대상 구성 및 명령줄에 배포 매개변수를 포함할 수 있습니다. 결과적으로 모든 매개변수가 수락되고 사전에 추가됩니다. 그러나 특정 매개변수가 둘 이상의 위치에서 전달되지만 값이 다른 경우 gcloud deploy releases
create
명령어는 오류와 함께 실패합니다.
매니페스트 템플릿과의 차이점
이 문서에 설명된 대로 배포 매개변수는 구문으로 템플릿 매니페스트의 자리표시자와 구분됩니다. 그러나 그냥 템플릿 매니페스트의 표준 기법을 사용하는 대신 배포 매개변수가 필요한 이유가 궁금하다면, 다음 표에서 다양한 목적을 확인할 수 있습니다.
기법 | 대체 시간 | 적용 대상 |
---|---|---|
매니페스트 템플릿 | 렌더링 단계 | 특정 출시 버전 특정 타겟 |
명령줄에서 | 포스트 렌더링 | 특정 출시 버전 모든 타겟 |
전달 파이프라인 시 | 포스트 렌더링 | 모든 출시 특정 대상(라벨별) |
대상에서 | 포스트 렌더링 | 모든 출시 특정 타겟 |
이 문서에서는 템플릿 매니페스트가 아닌 배포 매개변수(명령줄, 파이프라인, 대상)만 설명합니다.
제한사항
각 매개변수 유형에 대해 최대 25개의 매개변수를 만들 수 있습니다.
하위 대상은 상위 요소에서 최대 25개의 매개변수를 추가로 상속할 수 있으며, 파이프라인 단계에 설정된 매개변수를 포함하여 대상에 최대 100개의 매개변수를 추가할 수 있습니다.
키 이름은 최대 512자로 제한되며 다음 정규식으로 제한됩니다.
/^[a-zA-Z0-9][-A-Za-z0-9_.]{0,61}[a-zA-Z0-9]$/
같은 타겟에 동일한 이름을 가진 키를 2개 적용할 수는 없습니다.
프리픽스
CLOUD_DEPLOY_
는 예약되어 있으며 키 이름에 사용될 수 없습니다.
배포 매개변수 구성
이 섹션에서는 Kubernetes 매니페스트 또는 Cloud Run 서비스에 적용할 배포 매개변수 값을 구성하는 방법을 설명합니다.
키-값 쌍을 구성하는 것 외에도 이 섹션에 설명된 대로 자리표시자 또는 자리표시자를 매니페스트에 추가해야 합니다.
매니페스트에 자리표시자 추가
Kubernetes 매니페스트(GKE의 경우) 또는 서비스 YAML(Cloud Run의 경우)에서 렌더링 후 대체할 값의 자리표시자를 추가합니다.
구문
이러한 자리표시자는 다음 구문을 사용합니다.
[PROPERTY]: [DEFAULT_VALUE] # from-param: $[VAR_NAME]
이 줄에서...
PROPERTY:
Kubernetes 매니페스트 또는 Cloud Run 서비스 YAML의 구성 속성입니다.
DEFAULT_VALUE
명령줄, 파이프라인 또는 대상 구성에서 이 속성에 제공된 값이 없을 때 사용할 값입니다.
# from-param:
주석 문자를 사용하여 Cloud Deploy
deploy-parameters
지시문을 설정하고from-param:
을deploy-parameters
자리표시자에 따르도록 Cloud Deploy에 알립니다.$VAR_NAME
대체할 자리표시자입니다. 이는 전달 파이프라인 또는 대상 구성에 제공되거나 출시를 만들 때 키-값 쌍의 키와 일치해야 합니다.
파이프라인 단계에 매개변수 추가
배포 파이프라인 진행의 단계에 키-값 쌍을 추가할 수 있습니다. 이는 하위 대상을 구분하기 위해 동시 배포에 유용합니다.
여기에 설명된 대로 Kubernetes 매니페스트 또는 Cloud Run 서비스에 자리표시자를 추가합니다.
예를 들면 다음과 같습니다.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 # from-param: ${deploy_replicas} selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
배포 파이프라인에 해당 파이프라인 단계에
deployParameters
를 포함하도록 구성합니다.다음 YAML은 대상이 다중 타겟인 파이프라인 단계의 구성이며, 이 경우 두 개의 하위 타겟이 있습니다.
serialPipeline: stages: - targetId: dev profiles: [] - targetId: prod # multi-target profiles: [] deployParameters: - values: deploy_replicas: 1 log_level: "NOTICE" matchTargetLabels: # optional, applies to all resources if unspecified; AND'd my-app: "post-render-config-1" - values: deploy_replicas: 2 log_level: "WARNING" matchTargetLabels: # optional, applies to all resources if unspecified; AND'd my-app: "post-render-config-2"
이 배포 파이프라인 구성에서
deployParameters
스탠자에 2개 포함values
에는 각각 다음이 포함됩니다.매니페스트에 설정한 변수와 동일한 이름인 변수 이름
해당 변수의 값
대상별 라벨과 일치시킬 라벨(선택사항) 1개 이상
matchTargetLabels
스탠자에 라벨을 지정하지 않으면 해당 값이 스테이지의 모든 대상에 사용됩니다.
matchTargetLabels
을 포함한 경우 대상에도 라벨을 포함해야 합니다. 이러한 방식으로 어떤 하위 대상에 할당할 값을 식별합니다.대상은
values
스탠자에 설정된 모든 라벨과 일치해야 합니다.matchTargetLabels
를 생략하면 파이프라인에 설정한values
가 모든 하위 대상에 적용됩니다. 그러나 동일한 매개변수에 값을 두 개 이상 설정하면 출시가 실패합니다.
각 매니페스트가 렌더링되면 Cloud Deploy는 각 변수의 값을 렌더링된 매니페스트에 추가합니다.
대상 구성에 매개변수 추가
대상에 키-값 쌍을 추가할 수 있습니다. 배포 매개변수를 사용하여 여러 하위 대상을 구분하는 경우 다중 대상이 아닌 하위 대상을 구성하세요.
배포 시 설정하려는 값 대신 매개변수를 사용하여 Kubernetes 매니페스트 또는 Cloud Run 서비스 정의를 구성합니다.
예를 들면 다음과 같습니다.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 env: - name: envvar1 value: example1 # from-param: ${application_env1} - name: envvar2 value: example2 # from-param: ${application_env2}
이 매니페스트에서
envvar1
매개변수는 기본값인example1
로 설정되고envvar2
는 기본값인example2
로 설정됩니다.deployParameters
를 포함하도록 대상을 구성합니다.포함할 각 매개변수에 대해 다음을 식별합니다.
키 이름(매니페스트에 설정한 키(변수)와 동일한 이름)
해당 키의 값. 값을 제공하지 않으면 매니페스트에 설정된 기본값이 사용됩니다.
다음 YAML은 두 대상의 구성입니다. 각 대상에는 값을 설정하는
deployParameters
스탠자가 포함되어 있습니다. 각 대상에는 파이프라인 단계에서 구성된 배포 매개변수와 일치시키는 라벨도 포함됩니다.apiVersion: deploy.cloud.google.com/v1beta1 kind: Target metadata: name: prod1 labels: my-app: "post-render-config-1" description: development cluster deployParameters: application_env1: "newValue1" --- apiVersion: deploy.cloud.google.com/v1beta1 kind: target metadata: name: prod2 labels: my-app: "post-render-config-2" description: development cluster deployParameters: application_env1: "newValue2"
출시 버전이 생성되지만 매니페스트가 렌더링된 후 Cloud Deploy는 연관된 키가 포함된 경우 이러한 값을 렌더링된 매니페스트에 추가합니다.
출시 생성 시 매개변수 전달
출시 버전에 매개변수와 값을 전달하려면 다음 단계를 따르세요.
배포 시 설정하려는 값 대신 매개변수를 사용하여 Kubernetes 매니페스트 또는 Cloud Run 서비스 정의를 구성합니다.
예를 들면 다음과 같습니다.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: commit: defaultShaValue # from-param ${git-sha} spec: containers: - name: nginx image: nginx:1.14.2
이 예시에서 배포의 복제본 수는 변수
$deploy_replicas
로 설정됩니다.이 변수의 구문은
$
에 변수 이름을 더한 것입니다. 이 예시에서는$deploy_replicas
입니다.출시 버전을 만들 때
gcloud deploy releases create
명령어에--deploy-parameters
옵션을 포함합니다.--deploy-parameters
는 키-값 쌍의 쉼표로 구분된 목록을 가져옵니다. 여기서 키는 매니페스트에 추가한 자리표시자입니다.명령어는 다음과 유사합니다.
gcloud deploy releases create test-release-001 \ --project=my-example-project \ --region=us-central1 \ --delivery-pipeline=my-params-demo-app-1 \ --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \ --deploy-parameters="git-sha=f787cac"
출시 버전이 생성되지만 매니페스트 렌더링 후 Cloud Deploy는 연관된 키가 포함된 경우 렌더링된 매니페스트에 값을 제공합니다.
출시 버전의 모든 매개변수 보기
지정된 출시 버전에 설정된 매개변수를 볼 수 있습니다. 테이블은 출시 세부정보 페이지와 명령줄(gcloud deploy releases describe
)의 테이블에 표시됩니다.
기본 Cloud Deploy 페이지에서 보려는 출시 버전이 포함된 배포 파이프라인을 클릭합니다.
출시 세부정보 페이지에서 아티팩트 탭을 클릭합니다.
이 출시 버전에 설정된 모든 배포 매개변수가 하나의 열에 변수 이름과 값과 함께 다른 열에서 영향을 받는 타겟과 함께 테이블에 표시됩니다.
다음 단계
빠른 시작: 배포 매개변수 사용 사용해 보기
병렬 배포 사용에 대해 자세히 알아보기