Este documento descreve as regras de automação, que são ações que podem ser realizadas automaticamente no seu pipeline de entrega. Por exemplo, você pode configurar seu pipeline de entrega para que a promoção para um destino específico aconteça automaticamente, nas circunstâncias certas.
Só é possível usar regras de automação integradas ao Cloud Deploy. As regras de automação disponíveis estão listadas neste documento.
Regras de automação disponíveis
As seguintes regras de automação estão disponíveis no Cloud Deploy:
Regra | Descrição |
---|---|
timedPromoteReleaseRule
|
Promover automaticamente de um destino para o próximo
com base em uma programação do cron. |
promoteReleaseRule
|
Promove automaticamente uma versão para o destino indicado após o sucesso
lançamento no destino anterior da progressão. |
advanceRolloutRule
|
Avança automaticamente um lançamento da
fase para a próxima fase. |
repairRolloutRule
|
Tentar de novo automaticamente o job ou os jobs com falha no lançamento
especificado de vezes e reverter se todas as novas tentativas falharem. |
Configurar regras de automação
A configuração de cada regra de automação depende da regra específica. Esta seção descreve a configuração que todas as regras têm em comum, bem como a forma de configurar cada uma das regras disponíveis.
Cada regra de automação é configurada como parte da configuração do
recurso de automação. Ele pode estar no mesmo arquivo da configuração do pipeline de entrega relevante (geralmente chamado de clouddeploy.yaml
) ou em qualquer arquivo que você quiser. Saiba mais sobre
como configurar automações.
As seções a seguir descrevem a configuração específica de cada regra de automação. Consulte Automatizar sua implantação para configurar a automação.
Configurar uma regra de automação do timedPromoteReleaseRule
Com a regra timedPromoteReleaseRule
, é possível programar quando promover uma versão
do destino ou destinos selecionados para o próximo destino na progressão ou para
um destino especificado. Ao configurar uma automação de timedPromoteReleaseRule
,
você especifica quando promover a versão, com base em uma programação cron.
rules:
- timedPromoteReleaseRule:
name: "[RULE_NAME]"
schedule: "[CRON]"
timeZone: "[TIME_ZONE]"
destinationTargetId: "[TO_TARGET]"
destinationPhase: "[TO_PHASE]"
Em que:
[RULE_NAME]
É qualquer nome que você queira dar a essa regra. Ele precisa ser exclusivo no pipeline de entrega.
[CRON]
É a programação do cron que especifica quando promover a versão. Use essa programação para especificar a data e a hora em que você quer promover o lançamento.
Essa programação usa a sintaxe padrão
cron
:* * * * *
Nesta programação...
- A primeira posição é o minuto (
0
-59
). - A segunda posição é a hora (
0
-23
). - A terceira posição é o dia do mês (
1
-31
). - A quarta posição é o mês (
1
-12
). - A quinta posição é o dia da semana (
0
-6
, de domingo a sábado)
Por exemplo, se a regra de promoção programada incluir a seguinte programação:
0 9 * * 1
, sua versão será promovida toda segunda-feira às 9h.Você também pode usar recursos padrão de programação cron, como:
- Um intervalo (
0
-5
) - Uma lista (
1
,3
,5
) - Uma função de etapa (por exemplo,
*/3
no campo "horas" ativa a cada três horas)
- A primeira posição é o minuto (
[TIME_ZONE]
É o fuso horário que você quer usar para programar a promoção, no formato IANA.
[TO_TARGET]
É o
targetId
do destino para promover ou@next
para promover a versão automaticamente para o próximo destino após o destino especificado noselector.targets property
nesta configuração de automação. Isso é opcional. O padrão é@next
.[TO_PHASE]
É o nome da fase da fase que você quer promover, por exemplo,
canary-25
oustable
. Essa propriedade é opcional. Se você omitir, a versão será promovida para a primeira fase no destino.
Configurar uma regra de automação do promoteReleaseRule
A regra promoteReleaseRule
promove a versão depois de um lançamento bem-sucedido em
um destino. Por exemplo, se você tiver três destinos, poderá configurar essa regra para que, quando a versão for implantada com sucesso no primeiro destino, ela seja promovida automaticamente para o segundo.
Ao configurar uma automação de promoteReleaseRule
, é possível especificar um
destino para promover (destinationTargetId
) ou @next
. Quando o lançamento
termina com sucesso no destino especificado na definição Automation
, a
versão é promovida para o destino especificado em destinationTargetId
,
sujeita a um intervalo de tempo wait
.
Também é possível promover uma versão para uma fase específica no destino pretendido usando
a propriedade destinationPhase
. A seção rules
mostrada aqui fica dentro da sua
definição de automação.
rules:
- promoteReleaseRule:
name: "[RULE_NAME]"
wait: [WAIT_TIME]
destinationTargetId: "[TO_TARGET]"
destinationPhase: "[TO_PHASE]"
Em que:
[RULE_NAME]
É qualquer nome que você queira dar a essa regra. Ele precisa ser exclusivo no recurso de automação.
[WAIT_TIME]
É o tempo, em minutos, que aguardamos depois que a versão está pronta para promoção antes de ser promovida. Por exemplo,
1m
Om
é obrigatório.O valor padrão é
0
, ou seja, nenhum tempo de espera. O máximo é20160m
(ou 14 dias).[TO_TARGET]
É o
targetId
do destino a ser promovido.Também pode ser
@next
, que promove automaticamente a versão para o próximo destino após o especificado na propriedadeselector.targets
nesta configuração de automação. Esse é o padrão se você omitir o valor dedestinationTargetId
.[TO_PHASE]
É o nome da fase para a qual você quer promover, por exemplo,
canary-25
oustable
. Essa propriedade é opcional. Se você omitir, a versão será promovida para a primeira fase no destino.
Configurar uma regra de automação do advanceRolloutRule
O advanceRolloutRule
avança o lançamento automaticamente para a próxima fase após a conclusão
de uma delas. Essa regra de automação é útil para implantações canário. Por exemplo, se você tiver uma estratégia de implantação canário
configurada em uma meta, com fases de 25%
, 50%
e stable
, poderá
configurar uma regra de automação que avança automaticamente para a fase stable
depois que a fase 50%
terminar.
Ao configurar uma automação do advanceRolloutRule
, você identifica a fase para
avançar de (o sourcePhase
). A estrofe rules
mostrada aqui fica dentro
da sua definição de automação.
rules:
- advanceRolloutRule:
name: "[RULE_NAME]"
sourcePhases: ["[START_PHASE]", "[START_PHASE]"...]
wait: [WAIT_TIME]
Em que:
[RULE_NAME]
É qualquer nome que você queira dar a essa regra. Ele precisa ser exclusivo no pipeline de entrega.
[WAIT_TIME]
É a quantidade de tempo, em minutos, que aguarda para avançar o lançamento depois que ele está pronto. Por exemplo,
1m
Om
é obrigatório.O valor padrão é
0
, ou seja, nenhum tempo de espera. O máximo é20160m
(ou 14 dias).["[START_PHASE]", "[START_PHASE]"...]
É a fase ou as fases de onde o lançamento é avançado automaticamente. Ou seja, quando qualquer uma das fases listadas é concluída com sucesso, o lançamento é automaticamente avançado dessa fase para a próxima.
Os nomes das fases diferenciam maiúsculas de minúsculas. Além disso, esses nomes de fase são opcionais. Se você omitir
sourcePhases
, todas as fases do lançamento serão avançadas automaticamente.
Configurar uma regra de automação do repairRolloutRule
A regra repairRolloutRule
tenta novamente um lançamento com falha um número especificado de
vezes. Se esse número de novas tentativas for esgotado, a regra poderá reverter automaticamente o destino para a última versão bem-sucedida.
Ao configurar uma automação de repairRolloutRule
, é possível especificar quantas
vezes tentar novamente o lançamento e o tempo de espera entre as tentativas. Também é possível
configurar fases ou jobs específicos, ou ambos, para repetição. Se cada tentativa de nova tentativa
falhar, o lançamento vai falhar. Se alguma nova tentativa for bem-sucedida, a automação será interrompida e o
lançamento será concluído.
Também é possível configurar a automação para reverter para a última versão bem-sucedida no destino. As novas tentativas também são opcionais, mas você precisa ter um número de novas tentativas ou um rollback, ou ambos.
A estrofe rules
mostrada aqui fica dentro da sua
definição de automação.
rules:
- repairRolloutRule:
name: "[RULE_NAME]"
phases: [PHASES_TO_REPAIR]
jobs: [JOBS_TO_REPAIR]
repairPhases:
- retry:
attempts: [NUMBER_OF_ATTEMPTS]
wait: [WAIT_TIME]
backoffMode: [LINEAR | EXPONENTIAL]
- rollback:
destinationPhase: [PHASE_NAME]
Em que:
[RULE_NAME]
É qualquer nome que você queira dar a essa regra. Ele precisa ser exclusivo no pipeline de entrega.
[PHASES_TO_REPAIR]
É a fase ou as fases de lançamento a serem repetidas. Isso é opcional, e o padrão são todas as fases do lançamento.
[JOBS_TO_REPAIR]
É o job ou os jobs a serem repetidos. Isso é opcional, e o padrão são todos os jobs.
[NUMBER_OF_ATTEMPTS]
Opcional: o número de vezes que o lançamento é repetido antes de ser considerado com falha.
[WAIT_TIME]
É o tempo de espera entre as repetições das tentativas. Por exemplo,
1m
para um intervalo de um minuto. A unidade de tempo (m
neste caso) é obrigatória.Se
mode
forlinear
, esse intervalo será o mesmo para cada nova tentativa. Semode
forexponential
, o intervalo vai aumentar a cada vez. Consultemode
para mais detalhes.backoffMode
LINEAR
ouEXPONENTIAL
, indicando se o tempo entre as novas tentativas deve ser aumentado ou não. SeLINEAR
, o tempo entre novas tentativas será constante, emWAIT_TIME
. SeEXPONENTIAL
, o tempo entre novas tentativas vai dobrar a cada nova tentativa sucessiva. O padrão éLINEAR
.Por exemplo, se
WAIT_TIME
for 1m ebackoffMode
estiver definido comoEXPONENTIAL
, o tempo entre a falha e a primeira nova tentativa será de 1 minuto, entre a primeira e a segunda será de 2 minutos e entre a segunda e a terceira será de 4 minutos.rollback
Opcional. Indica se a reverter do lançamento com falha deve ser feita após todas as tentativas de nova tentativa serem esgotadas.
[PHASE_NAME]
É o nome de uma fase específica para a qual você quer fazer reverter. Se você omitir
toPhase
, o rollback vai usar a fasestable
por padrão.
Interromper uma execução de automação do repairRolloutRule
Se você executar qualquer um dos comandos a seguir no seu lançamento, a
automação do repairRolloutRule
será cancelada:
Exemplo
Confira a seguir um exemplo de configuração de automação com um
repairRolloutRule
:
apiVersion: deploy.cloud.google.com/v1
kind: Automation
metadata:
name: regular-repair/regular
description: repair regular rollouts
suspended: false
serviceAccount: (REDACTED)
selector:
targets:
- id: t1
rules:
- repairRolloutRule:
name: "repair-rollout"
repairPhases:
- retry:
attempts: 3
wait: 1m
backoffMode: LINEAR
- rollback:
destinationPhase: "stable"
Nessa automação, se um lançamento falhar no destino identificado, ele será tentado novamente até três vezes, com um minuto de espera entre as tentativas. Se todas as tentativas de repetição falharem, uma reversão será iniciada criando uma nova implantação para implantar a versão mais recente do destino para ele.
A seguir
Confira o guia de início rápido: automatizar a criação de versões e o avanço de lançamentos.
Saiba mais sobre a automação de implantação no Cloud Deploy.