Com o Cloud Deploy, pode transmitir parâmetros para a sua versão, e esses valores são fornecidos ao manifesto ou aos manifestos antes de serem aplicados aos respetivos destinos. Esta substituição é feita depois de os manifestos serem rendered, como o passo final na operação de renderização do Cloud Deploy. Os valores são fornecidos a todos os manifestos identificados no seu ficheiro skaffold.yaml
que contenham os marcadores de posição correspondentes.
Só tem de incluir marcadores de posição no manifesto e definir os valores desses marcadores de posição no pipeline de implementação do Cloud Deploy ou na configuração de destino, ou quando cria uma versão.
Este artigo descreve como o fazer.
Por que motivo deve usar parâmetros de implementação?
Uma utilização típica desta funcionalidade seria aplicar valores diferentes a manifestos para diferentes alvos numa implementação paralela. No entanto, pode usar parâmetros de implementação para tudo o que exija a substituição de pares de chave-valor pós-renderização no manifesto.
Como funciona
Os passos seguintes descrevem o processo geral de configuração dos parâmetros de implementação e fornecimento de valores:
Configura a parametrização da implementação, conforme descrito aqui.
Isto inclui o seguinte:
Adicione os marcadores de posição ao manifesto, incluindo um valor predefinido para cada um.
Adicione valores para esses marcadores de posição.
Existem três formas de o fazer, descritas aqui.
Quando cria um lançamento, o manifesto é rendered.
Se começar com um manifesto baseado em modelos, os valores são aplicados agora às variáveis do modelo. Se começar com um manifesto não processado, este permanece inalterado. Esta renderização é feita pelo Skaffold.
No entanto, pode ter variáveis adicionais no manifesto para as quais os valores não são aplicados no momento da renderização. Estes são os parâmetros de implementação descritos neste documento.
Na criação da versão, todos os parâmetros de implementação são compilados num dicionário, que é usado para substituir valores antes de os manifestos serem aplicados.
Após a renderização, o Cloud Deploy substitui os valores dos parâmetros de implementação.
Estes são os valores que configurou no primeiro passo.
O processo de renderização já aplicou valores aos modelos de manifesto, substituindo alguns valores e adicionando etiquetas específicas do Cloud Deploy. No entanto, os valores destes parâmetros de implementação são substituídos após a renderização. As diferenças entre os modelos de manifesto e os parâmetros de implementação estão descritas aqui.
O manifesto é aplicado ao tempo de execução de destino para implementar a sua aplicação.
Isto inclui os valores substituídos no momento da renderização e os valores de quaisquer parâmetros de implementação
Diferentes formas de transmitir valores
Pode fornecer parâmetros e valores para esses parâmetros de três formas:
Na definição do pipeline de entrega
Fornece o parâmetro e o respetivo valor na definição de uma fase na progressão do pipeline de entrega. O parâmetro é transmitido ao destino representado por essa fase. Se essa fase fizer referência a uma segmentação múltipla, os valores definidos aqui são usados para todos os alvos secundários.
Este método permite-lhe substituir um valor para todos os lançamentos num determinado pipeline, para todos os destinos afetados. Os parâmetros definidos para uma fase identificam uma etiqueta e o destino correspondente para essa fase tem de ter uma etiqueta correspondente.
-
Configura o parâmetro e o respetivo valor na definição do alvo. Este método permite-lhe substituir um valor para esse alvo em todos os lançamentos.
Na linha de comandos, quando cria um lançamento
Inclui o parâmetro e o respetivo valor através da flag
--deploy-parameters
no comandogcloud deploy releases create
.Este método permite-lhe substituir um valor no momento da criação do lançamento, aplicando esse valor aos manifestos de todos os alvos afetados.
A configuração destas opções é explicada mais detalhadamente aqui.
Posso usar mais do que um destes métodos?
Sim, pode incluir parâmetros de implementação na fase do pipeline, na configuração de destino e na linha de comandos. O resultado é que todos os parâmetros são aceites e adicionados ao dicionário. No entanto, se um parâmetro específico for transmitido em mais de um local, mas com valores diferentes, o comando gcloud deploy releases
create
falha com um erro.
Em que medida é que isto é diferente dos modelos de manifesto
Os parâmetros de implementação, conforme descrito neste artigo, distinguem-se dos marcadores de posição num manifesto baseado em modelos pela sintaxe. No entanto, se se questionar por que motivo precisa de implementar parâmetros em vez de usar apenas as técnicas padrão para manifestos baseados em modelos, a tabela seguinte mostra os diferentes objetivos:
Técnica | Tempo de substituição | Aplica-se a |
---|---|---|
Modelo de manifesto | Fase de renderização | Lançamento específico; alvo específico |
Na linha de comandos | Pós-renderização | Lançamento específico; todos os alvos |
No pipeline de fornecimento | Pós-renderização | Todos os lançamentos; alvos específicos (por editora) |
Dentro do objetivo | Pós-renderização | Todos os lançamentos; alvo específico |
Este documento aborda apenas os parâmetros de implementação (na linha de comandos, no pipeline e no destino) e não os manifestos baseados em modelos.
Limitações
Para cada tipo de parâmetro, pode criar um máximo de 50 parâmetros.
Uma segmentação secundária pode, adicionalmente, herdar até 50 parâmetros da respetiva segmentação múltipla principal, até um máximo de 200 parâmetros nas segmentações, incluindo os definidos na fase do pipeline.
O nome da chave está limitado a um máximo de 63 carateres e à seguinte expressão regular:
^[a-zA-Z0-9]([-A-Za-z0-9_.]{0,61}[a-zA-Z0-9])?$
Uma exceção a isto ocorre quando usa um parâmetro de implementação como uma variável de ambiente num alvo personalizado. Nesse caso, tem de usar uma barra entre a palavra-chave
customTarget
e o nome da variável (customTarget/VAR_NAME
). Consulte as entradas e saídas necessárias para ver a sintaxe suportada.O prefixo
CLOUD_DEPLOY_
está reservado e não pode ser usado para um nome de chave.Não pode ter duas chaves com o mesmo nome aplicadas ao mesmo destino.
O valor pode estar vazio, mas tem um máximo de 512 carateres.
Não é possível usar marcadores de posição de parâmetros de implementação para valores de configuração do Helm, mas têm de ser transmitidos por convenção.
Configure os parâmetros de implementação
Esta secção descreve como configurar valores de parâmetros de implementação que serão aplicados ao seu manifesto do Kubernetes, ao seu serviço do Cloud Run ou ao seu modelo do Helm.
Além de configurar esses pares de chave-valor, tem de adicionar o marcador de posição ou os marcadores de posição ao seu manifesto, conforme descrito nesta secção.
Adicione marcadores de posição ao manifesto
No manifesto do Kubernetes (para o GKE) ou no YAML do serviço (para o Cloud Run), adiciona marcadores de posição para quaisquer valores que queira substituir após a renderização.
Sintaxe
Para lançamentos que não usam o renderizador Helm com o Skaffold, use a seguinte sintaxe para os marcadores de posição:
[PROPERTY]: [DEFAULT_VALUE] # from-param: ${VAR_NAME}
Nesta linha…
PROPERTY:
A propriedade de configuração está no manifesto do Kubernetes ou no YAML do serviço do Cloud Run.
DEFAULT_VALUE
É um valor a usar se não forem fornecidos valores para esta propriedade na linha de comandos ou na configuração do pipeline ou do destino. O valor predefinido é obrigatório, mas pode ser uma string vazia (
""
).# from-param:
Usa um caráter de comentário para separar a diretiva do Cloud Deploy
deploy-parameters
efrom-param:
indica ao Cloud Deploy que se segue um marcador de posiçãodeploy-parameters
.${VAR_NAME}
É o marcador de posição a substituir. Isto tem de corresponder à chave de um par chave-valor fornecido no pipeline de fornecimento ou na configuração de destino, ou aquando da criação da versão.
Também pode usar vários parâmetros numa única linha e usar os parâmetros como parte de uma string mais longa, por exemplo:
image: my-image # from-param: ${artifactRegion}-docker.pkg.dev/my-project/my-repo/my-image@sha256:${imageSha}
Estes parâmetros podem ser provenientes de várias origens. No exemplo anterior, ${artifactRegion}
seria provavelmente definido na fase de destino ou pipeline de fornecimento, enquanto ${imageSha}
viria da linha de comandos no momento da criação do lançamento.
Parâmetros para valores do gráfico Helm
Se estiver a renderizar um gráfico Helm que aceite valores de configuração e quiser definir esses valores através de parâmetros de implementação, os parâmetros de implementação têm de ter nomes que correspondam aos valores de configuração do Helm que quer definir.
Todos os parâmetros de implementação são transmitidos ao Helm como argumentos --set
no momento da renderização,
sem necessidade de modificar o seu skaffold.yaml
.
Por exemplo, se o seu skaffold.yaml
estiver a instalar um gráfico Helm que recebe um parâmetro de configuração de webserver.port
para especificar em que porta o servidor Web vai ser iniciado e quiser definir este parâmetro dinamicamente a partir de um parâmetro de implementação, tem de criar um parâmetro de implementação com o nome webserver.port
com o valor pretendido para a porta do servidor Web.
Por conseguinte, se não estiver apenas a fazer referência a modelos Helm em skaffold.yaml
, mas também a criá-los, pode usar a sintaxe de variáveis Helm padrão de {{ .Values.VAR_NAME }}
nos seus modelos Helm.
Por exemplo, se tivermos um parâmetro de implementação de webserver.port
configurado,
podemos usá-lo da seguinte forma:
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver
spec:
replicas: 3
selector:
matchLabels:
app: webserver
template:
metadata:
labels:
app: webserver
spec:
containers:
- name: webserver
image: gcr.io/example/webserver:latest
ports:
- containerPort: {{ .Values.webserver.port }} # replaced by deploy parameter `webserver.port`.
name: web
env:
- name: WEBSERVER_PORT
value: {{ .Values.webserver.port }} # replaced by deploy parameter `webserver.port`.
Adicione um parâmetro à fase do pipeline
Pode adicionar pares de chave-valor a uma fase na progressão do pipeline de publicação. Isto é útil para implementações paralelas, para distinguir entre destinos secundários.
Adicione os marcadores de posição ao manifesto do Kubernetes ou ao serviço do Cloud Run, conforme descrito aqui.
Segue-se um exemplo:
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
Configure o pipeline de fornecimento para incluir
deployParameters
para a fase do pipeline aplicável.O YAML seguinte é a configuração de uma fase do pipeline cujo destino é um destino múltiplo, que, neste caso, tem dois destinos secundários:
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"
Nesta configuração da pipeline de entrega, a secção
deployParameters
inclui doisvalues
, cada um dos quais tem o seguinte:O nome da variável, que é o mesmo nome da variável que definiu no manifesto
Um valor para essa variável
Uma ou mais etiquetas (opcional) para corresponder a etiquetas específicas do destino
Se não especificar uma etiqueta, numa secção
matchTargetLabels
, esse valor é usado para todos os alvos na fase.
Se incluiu
matchTargetLabels
, também tem de incluir etiquetas nos alvos para que correspondam. Desta forma, identifica que valor atribuir a que alvo secundário.O destino tem de corresponder a todas as etiquetas definidas na secção
values
.Se omitir
matchTargetLabels
, ovalues
que definir no pipeline é aplicado a todos os alvos secundários. No entanto, se definir mais do que um valor para o mesmo parâmetro, a versão falha.
Após a renderização de cada manifesto, o Cloud Deploy adiciona o valor de cada variável ao manifesto renderizado.
Adicione um parâmetro à configuração do alvo
Pode adicionar pares de chave-valor a um alvo. Se estiver a usar parâmetros de implementação para distinguir entre várias segmentações secundárias, configure-os nessas segmentações secundárias e não na segmentação múltipla.
Configure o manifesto do Kubernetes ou a definição do serviço do Cloud Run com um parâmetro em vez do valor que quer definir no momento da implementação.
Segue-se um exemplo:
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}
Neste manifesto, o parâmetro
envvar1
está predefinido comoexample1
eenvvar2
está predefinido comoexample2
.Configure as suas segmentações para incluir
deployParameters
.Para cada parâmetro que incluir, identifica o seguinte:
O nome da chave, que é o mesmo nome da chave (variável) que definiu no manifesto.
Um valor para essa chave. Se não fornecer um valor, é usado o valor predefinido definido no manifesto.
O YAML seguinte é a configuração de dois destinos. Cada alvo inclui uma secção
deployParameters
que define um valor. Cada destino também inclui uma etiqueta, a ser associada aos parâmetros de implementação configurados numa fase do pipeline.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"
Quando a versão é criada, mas depois de os manifestos serem renderizados, o Cloud Deploy adiciona estes valores aos manifestos renderizados se incluírem as chaves associadas.
Transmita um parâmetro na criação do lançamento
Siga estes passos para transmitir parâmetros e valores para o lançamento:
Configure o manifesto do Kubernetes ou a definição do serviço do Cloud Run com um parâmetro em vez do valor que quer definir no momento da implementação.
Segue-se um exemplo:
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
Neste exemplo, o SHA de confirmação é definido como uma variável denominada
${git-sha}
. É transmitido um valor para esta opção no momento da criação do lançamento, através da opção--deploy-parameters=
, como se vê no passo seguinte.A sintaxe desta variável é
$
mais o nome da variável entre chavetas. Neste exemplo, é${git-sha}
.Quando criar um lançamento, inclua a opção
--deploy-parameters
no comandogcloud deploy releases create
.--deploy-parameters
usa uma lista de pares de chave-valor separados por vírgulas, em que a chave é o marcador de posição que adicionou ao manifesto.O comando vai ter um aspeto semelhante ao seguinte:
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"
Quando a versão é criada, mas após a renderização do manifesto, o Cloud Deploy fornece os valores aos manifestos renderizados se incluírem as chaves associadas.
Implemente parâmetros com segmentações personalizadas
Pode usar qualquer parâmetro de implementação como uma variável de ambiente em alvos personalizados. Ao fazê-lo, use a sintaxe especificada para segmentações personalizadas.
Os parâmetros implementados destinados a entradas para segmentações personalizadas podem começar com customTarget/
, por exemplo, customTarget/vertexAIModel
. Se usar este prefixo, use a seguinte sintaxe quando fizer referência a um parâmetro de implementação como uma variável de ambiente:
CLOUD_DEPLOY_customTarget_[VAR_NAME]
Em que VAR_NAME
é o nome que se segue à barra no nome do
parâmetro de implementação. Por exemplo, se definir um parâmetro de implementação denominado customTarget/vertexAIModel
, faça referência ao mesmo como CLOUD_DEPLOY_customTarget_vertexAIModel
.
Implemente parâmetros com hooks de implementação
Pode usar qualquer parâmetro de implementação como uma variável de ambiente nos hooks de implementação.
Implemente parâmetros com a validação da implementação
Pode usar qualquer parâmetro de implementação como uma variável de ambiente na validação da implementação.
Veja todos os parâmetros de um lançamento
Pode ver os parâmetros definidos para um determinado lançamento. São apresentados numa tabela na página Detalhes do lançamento e na linha de comandos (gcloud deploy releases describe
).
Na página principal do Cloud Deploy, clique no pipeline de implementação que inclui o lançamento que quer ver.
Na página Detalhes do lançamento, selecione o separador Artefactos.
Todos os parâmetros de implementação definidos para esta versão são apresentados numa tabela, com o nome e o valor da variável numa coluna e o alvo ou alvos afetados na outra coluna.
O que se segue?
Experimente o guia de início rápido: use parâmetros de implementação.
Saiba mais sobre a utilização de implementações paralelas.