Pipeline de implementação contínua
O pipeline de implantação contínua gera todas as evidências e o conteúdo do resumo da solicitação de alteração. O pipeline implementa os artefatos de compilação em um ambiente, como preparação ou produção, e, em seguida, coleta, cria e faz upload de todos os arquivos de registro, evidências e artefatos existentes para o armário de evidências.
Estágios e tarefas
A tabela a seguir lista as tarefas executadas em um CD Pipeline. Além disso, a tabela também fornece uma visão geral de cada um desses estágios:
-
Tarefa ou Estágio: refere-se ao nome do estágio conforme definido no arquivo de configuração
.pipeline-config.yaml. -
Descrição simples: fornece uma explicação concisa das ações executadas durante a execução do estágio.
-
Customização permitida: isso indica se os usuários têm a flexibilidade para modificar ou substituir o comportamento padrão do estágio inserindo um script customizado no arquivo
.pipeline-config.yaml. -
Implementação de referência padrão: Indica se os pipelines DevSecOps vêm com uma implementação predefinida ou padrão para o estágio. Notavelmente, para determinados estágios como "
unit-testsou "setup, o pipeline DevSecOps não oferece nenhuma implementação pronta para uso. Em vez disso, os usuários precisam fornecer scripts customizados ou código customizado para os requisitos de seus aplicativos -
Coleção de evidência: indica se o estágio executa a coleção de evidência padrão. Quando DevSecOps Pipeline fornece uma implementação de referência para um estágio, a coleta de evidências é realizada imediatamente. No entanto, se o Usuário optar por modificar ou substituir esses estágios predefinidos, eles deverão assegurar que suas implementações customizadas incluam a coleta de evidência apropriada A mesma responsabilidade recai sobre os usuários nos estágios em que o pipeline DevSecOps não fornece uma implementação pronta para uso, exigindo que eles realizem a coleta de evidências. A coluna indica a entidade (Usuário / Pipeline) responsável por executar a coleta de evidências...
-
Ignorar permitido (aplicável à versão> = v10): isso indica se os usuários podem optar por não executar esse estágio configurando a propriedade ignorar como true no
.pipeline-config.yamlNo entanto, recomenda-se cuidado ao usar esse recurso, especialmente para estágios designados para coletar evidências. Ignorar tais estágios pode levar à ausência de evidências essenciais para a construção.
| Tarefa ou estágio | Descrição simples | Customização permitida em .pipeline-config.yaml |
Implementação de Referência Padrão | Coleta de evidências | Ignorar permissível |
|---|---|---|---|---|---|
start |
Configuração do ambiente de pipeline. | Não | True | N/D | Não |
setup |
Configuração do ambiente de construção e teste. | True | Não | N/D | Não |
verify-peer-review |
Assegure-se de que as solicitações pull destinadas à implementação atual tenham sido aprovadas. Esse estágio gerará uma lista de solicitações pull vinculadas à implementação em andamento Se quaisquer solicitações pull permanecerem não aprovadas, a implementação será interrompida | True | True | Pipeline | True |
verify-artifact |
Valide a assinatura correta da imagem planejada para a implementação Se a imagem não tiver a assinatura adequada, a implementação será obstruída e o processo de coleta de evidências correspondente será iniciado | True | True | Pipeline | True |
change-request |
Gerarção da solicitação de mudança e criação do resumo da evidência. | Não | True | Pipeline | Não |
deployment |
Implementação dos artefatos de construção no ambiente, como preparação ou produção. | True | Não | N/D | Não |
acceptance-test |
Execução de testes de aceitação e integração na implementação. | True | Não | Usuário | True |
finish |
Coleta e upload dos arquivos de log, artefatos e evidências, colocando-os no armazenamento de evidências. | True | True | Pipeline | True |
rollback |
Esta é uma etapa dentro do prod-finish, que é executada sempre que um cenário de retrocesso é encontrado |
True | True | N/D | Não |
Para obter mais informações sobre como personalizar os estágios usando o arquivo .pipeline-config.yaml, consulte Scripts personalizados e listas
de parâmetros do pipeline.
Delta de implementação
Quando a promoção do inventário estiver pronta, o pipeline de implementação contínua poderá ser iniciado. O delta de implementação é a diferença entre o conteúdo da última implementação concluída e da implementação atual. O delta de implementação lista os itens de inventário que estão sendo implementados.
Para acessar o delta de implementação em seus scripts de implementação, você pode utilizar os seguintes comandos:
# return a JSON file path with an array of inventory entries that were changed
get_env DEPLOYMENT_DELTA_PATH
# return a JSON file path with an array of inventory entries that were deleted
get_env DEPLOYMENT_DELTA_DELETIONS_PATH
# returns a JSON file path with an array of all inventory entries
get_env INVENTORY_ENTRIES_PATH
Calcular o BOM de implementação
O BOM (Bill of Material) da implementação representa todos os artefatos que serão implementados como parte de uma única solicitação de mudança. Após o cálculo do delta de implementação, o pipeline cria o BOM da implementação com base nesses itens.
Coleta do resumo de evidências
Um resumo de evidência é criado a partir de todas as evidências que foram criadas durante a construção relevante que levou a uma implementação. As evidências criadas durante a própria implementação também são incluídas no resumo. O resumo de evidências é incluído na descrição da solicitação de mudança. Por padrão, o resumo de evidência inclui evidência de tempo de construção reunida no pipeline de IC juntamente com evidências reunidas durante a execução do pipeline de CD atual.
As instruções a seguir se aplicam exclusivamente a Pipelines de CD visando ambientes de produção. Use a sinalização target-environment-purpose para determinar se o ambiente está designado como pre_prod ou production.
Pré-requisito: no pipeline de CD destinado ao ambiente pre_prod, configure o sinalizador pre-prod-evidence-collection como 1. Isso permite a coleta e o armazenamento de evidências de tempo de construção no cacifo de evidências para todos os ativos implementados pelo Pipeline de CD, executando a implementação no ambiente de pré-produção Por padrão, para ambientes designados como pre_prod, o sinalizador pre-prod-evidence-collection é configurado como 1.
No pipeline de CD destinado ao ambiente de produção, configure o sinalizador pré-prod-evidence-collection como 1. Isso permite que o Pipeline de CD direcionar o ambiente de produção para recuperar evidências reunidas
durante a implementação para o ambiente de pré-produção Por padrão, para ambientes designados como produção, a sinalização pre-prod-evidence-collection é configurada como 0.
Quando a sinalização pre-prod-evidence-collection for configurada como 1, as Solicitações de Mudança geradas pelo Pipeline de CD destinado ao ambiente de produção incluirão referências aos IDs de Solicitação de Mudança
de ambientes de pré-produção no campo Registro de Validação.
Para obter mais informações, consulte Resumo da evidência..
Preparar e criar uma solicitação de mudança
Tudo aquilo que causar mudanças na linha de base deve ser identificado por meio de uma solicitação de mudança. Essas mudanças incluem atualizações no nível de código existente, mudanças na configuração e atualizações dos nós do trabalhador. A coleta de dados de conformidade de revisão de peer baseia-se nos dados que estão acessíveis no inventário, no armazenamento de evidências e no repositório de emissões de incidentes.
Use get_env CHANGE_REQUEST_ID para alavancar o valor do ID de Solicitação de Mudança nos estágios subsequentes.
Não altere o valor da variável que usa set_env, pois isso se destina apenas à implementação interna.
Esta etapa cria a solicitação de mudança, anexando os dados de conformidade disponíveis com base nos campos da solicitação pull de promoção . A disponibilidade de implementação é calculada com base nas evidências disponíveis no status de conformidade coletado.
Se as evidências de pré-produção forem capturadas na implantação de produção, as solicitações de alteração de pré-produção serão vinculadas à solicitação de alteração de produção. Para obter mais informações, consulte Dados incluídos em solicitações de mudanças
Várias solicitações de alteração podem ser pré-criadas usando um ouvinte de solicitação de alteração dedicado para diferentes configurações de implantação, incluindo implantações em várias regiões, destinos e clusters. Essas solicitações de alteração pré-criadas, após aprovação, podem ser encaminhadas para o pipeline de implantação just-in-time, que aproveita informações pré-calculadas para acelerar a implantação real.
Verificar aprovação da solicitação de mudança
Se todas as verificações de conformidade forem bem-sucedidas, como testes de unidade, tarefas do Code Risk Analyzer, proteção de ramificação e detecção de segredos, a solicitação de alteração será aprovada automaticamente e a tarefa será executada com êxito. Para obter mais informações, consulte Automatizando gerenciamento de mudanças.
Em caso de falha de uma das verificações de conformidade, o estado da solicitação de mudança será não aprovado. Você pode aprovar a solicitação de alteração manualmente e
adicionar o endereço change-request-id às propriedades do ambiente para usar a solicitação de alteração criada anteriormente na próxima execução. Também é possível aprovar manualmente a solicitação de mudança e incluir um rótulo
de emergência.
Implementação
No estágio de implementação, o pipeline implementa os artefatos criados em um ambiente, como o de preparação ou de produção. As variáveis e credenciais para estes estágios podem ser encontradas nas seguintes fontes:
- Variáveis da IU do pipeline (
get_env)
Para obter mais informações sobre como acessar essas variáveis, consulte Scripts customizados.
Teste de aceitação
É possível executar um conjunto de testes automatizados para verificar se a implementação foi bem-sucedida e está funcionando conforme o esperado.. Para fins de rastreabilidade, certifique-se de que o log de teste contenha uma referência ao nível de código ou imagem que está sendo testado.
Encerramento da solicitação de mudança
Os detalhes da implementação são transferidos por upload para a tarefa de encerramento do resumo de mudanças e, em seguida, a tarefa fecha a solicitação de mudança. close_category é incluído na tarefa de encerramento da solicitação
de mudança, com os seguintes valores:
- Successful (se a implantação estiver pronta e a implantação do CD for bem-sucedida)
- Sucesso com problemas (se o resumo tiver problemas, ele não foi implementado pronto e a implementação de CD aconteceu com emergência)
Conclusão do inventário
Para obter mais informações sobre a conclusão do inventário, consulte Inventário.
Reimplantar um aplicativo
Visão geral
Se um aplicativo travar ou apresentar comportamento inesperado após alterações na infraestrutura, você pode forçar uma reimplantação para resolver o problema.
Use force-redeploy=true ao acionar uma execução manual do pipeline de CD para substituir o comportamento padrão de detecção de alterações. Essa configuração instrui o pipeline a reimplantar todo o inventário,
mesmo quando nenhuma nova alteração for detectada.
Comportamento padrão (sem reimplantação forçada)
Quando não force-redeploy está definido ou está definido como false, o pipeline é implantado apenas quando novas alterações são detectadas no repositório de inventário do ambiente de destino.
-
O pipeline do CD é iniciado e marca o commit atual com o ID de execução do pipeline.
-
O pipeline lê o conteúdo do ramo do ambiente correspondente a partir dessa tag.
-
O pipeline calcula o delta de implementação entre o commit atual e o commit associado à tag
<target-environment>_latest. -
O pipeline avalia o delta:
- Se o delta estiver vazio, o pipeline será interrompido e nenhuma implantação ocorrerá.
- Se o delta contiver alterações, o pipeline continua.
-
O pipeline implementa as alterações identificadas no delta.
-
Após uma implantação bem-sucedida, o pipeline anexa a
<target-environment>_latesttag ao novo commit.
Comportamento forçado (com reimplantação forçada)
Quando force-redeploy está definido como true, o pipeline ignora a validação delta e reimplemente o inventário completo, independentemente das alterações detectadas. Essa abordagem garante que o estado completo
do aplicativo seja reaplicado ao destino da implantação.
- O pipeline do CD é iniciado e marca o commit atual com o ID de execução do pipeline.
- O pipeline lê o conteúdo do ramo do ambiente correspondente a partir dessa tag.
- O pipeline calcula o delta de implantação, que normalmente está vazio neste cenário.
- A
force-redeploy=trueconfiguração faz com que o pipeline ignore a verificação delta e prossiga. - O pipeline reimplemente todo o estado do aplicativo a partir do branch.
- Após uma reimplantação bem-sucedida, o pipeline anexa a
<target-environment>_latesttag ao commit que acabou de implantar.
Procedimento
-
Inicie uma nova execução manual do pipeline do CD.
-
Na configuração do pipeline, defina a variável
force-redeployde ambiente comotrue. -
Execute o pipeline.
Reverter uma implantação
Visão geral
Uma reversão cancela uma implantação anterior e restaura um estado conhecido do aplicativo quando uma implantação causa instabilidade, falhas ou problemas de conformidade. As reversões são normalmente realizadas para recuperar a confiabilidade do serviço, garantir a consistência da configuração ou manter a conformidade regulatória.
Estão disponíveis três abordagens de reversão, cada uma adequada a diferentes cenários de recuperação:
- Reverter totalmente: restaura a última configuração válida conhecida, referenciando um ID de ServiceNow solicitação de alteração. Recomendado para recuperação controlada e auditável.
- Rollback completo usando GitOps: Restaura um estado anterior ao reverter manualmente os commits no repositório do inventário. Não recomendado devido ao tratamento limitado de conformidade.
- Revertimento em linha: reverte uma implantação com falha na mesma execução do pipeline quando ocorrem erros de execução.
Reverter totalmente
Visão geral do pipeline de reversão
Esse pipeline permite que você reverta para uma configuração anterior conhecida como válida, direcionando uma ID de solicitação de ServiceNow alteração específica (por exemplo, CHG-12345).
Este ID de solicitação de alteração serve como um marcador exclusivo para uma implantação bem-sucedida e é uma entrada obrigatória para o pipeline de reversão.
Você pode encontrar o ID da solicitação de alteração para uma implantação anterior de duas maneiras:
- ServiceNow: Localize a solicitação de mudança para a implementação que você deseja restaurar.
- Repositório de inventário: como o estado do inventário é gerenciado no controle de origem, cada implantação é identificada de forma exclusiva por um commit. Você pode encontrar o commit que deseja reverter e identificar
a
CHG-***tag associada a esse commit.
O pipeline de reversão contém as seguintes etapas:
prod-rollback-startprod-setupprod-rollback-change-requestprod-deploymentprod-acceptance-testsprod-rollback-finish
A execução do pipeline usa informações da propriedade rollback-change-request-id environment para criar uma nova solicitação de alteração.
Para manter a conformidade, o pipeline reabre questões relacionadas à implantação anterior. Essas questões estão anexadas à nova solicitação de alteração, e suas datas de vencimento originais permanecem inalteradas. Uma reversão bem-sucedida
move a _latest tag no inventário para o commit anterior.
Criar um pipeline de reversão
Use o cd-rollback-listener para acionar uma reversão para a última versão válida conhecida.
- Vá para o seu pipeline de CD.
- Adicione um acionador manual ou duplique o Acionador Manual de CD.
- Edite o gatilho e defina o ouvinte como
cd-rollback-listener. - Selecione Salvar.
- Crie um gatilho separado para cada combinação necessária de região e ambiente de destino.
Acionar um pipeline de reversão
Uma execução do pipeline de reversão usa as seguintes propriedades de ambiente:
| Propriedade do ambiente | Descrição |
|---|---|
rollback-change-request-id |
(Obrigatório) O ID da solicitação de alteração da implantação concluída que você deseja reverter. |
rollback-limit |
O número máximo de implantações que você pode reverter. O padrão é 1 (a última implantação concluída). |
region |
A região para a reversão. |
target-environment |
O ambiente de destino para a reversão (por exemplo, ambiente de teste ou produção). |
O pipeline é encerrado, a menos que os seguintes critérios sejam atendidos:
rollback-change-request-iddeve ser o ID de uma implantação concluída para a mesma região e ambiente de destino.- A implantação associada a não
rollback-change-request-iddeve ser mais antiga do que o número de implantações especificado por rollback-limit.
A propriedade PIPELINE_NAME do ambiente Tekton determina se uma execução é uma implantação ou uma reversão.
cd-rollback-pipeline: Valor padrão para uma reversão.cd-pipeline: Valor padrão para uma implantação.
Você pode usar essa propriedade para personalizar a lógica de ramificação.
Reverter totalmente usando GitOps
Visão geral da reversão usando GitOps
Use o pipeline de implantação contínua para implantar uma versão anterior do inventário no ambiente de destino usando Git operações que revertem as alterações para um específico commit-id.
Como você está revertendo commits diretamente no repositório de inventário, em vez de acionar o pipeline de reversão com um ID de ServiceNow solicitação de alteração, esse processo não reabre automaticamente as questões de conformidade anteriores nem gerencia suas datas de vencimento.
Quando acionado, o pipeline de CD conclui as seguintes etapas para a reimplantação:
- O pipeline é iniciado e marca o commit atual (o commit de reversão) com o ID de execução do pipeline.
- O pipeline lê o conteúdo do ramo do ambiente correspondente a partir dessa tag.
- O pipeline calcula o delta de implementação entre o commit atual e o commit associado à tag
<target-environment>_latest. - Após uma implantação bem-sucedida, a
<target-environment>_latesttag é movida para o novo commit (revertido).
Criar uma solicitação pull para promoção de reversão
- Identifique a versão
commit-idda implantação no inventário para a qual você deseja reverter. - Reverta o estado do repositório para esse commit.
- Crie uma solicitação pull para promover o estado revertido.
O exemplo a seguir mostra esse cenário usando git comandos.
-
Liste commits e tags para encontrar o ID do commit do último estado válido conhecido (por exemplo,
refs/tags/8)# /c/usr/devsecops/compliance-inventory (master) $ git show-ref --tags ... 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8 refs/tags/8 ... 1914a125e76aa97c497f4bd2c2f455b58cf079b8 refs/tags/prod_latest -
Liste todos os commits entre o estado atual (
refs/tags/prod_latest) e o estado alvo (refs/tags/8).# /c/usr/devsecops/compliance-inventory (master) $ git rev-list --no-merges HEAD...83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8 67cc8babdff3e09c1f0e632f897798c1b5424f38 6fab5ce3d60590cd858206424ecfd7d3a8c9ceb4 ... -
Reverter o estado do inventário para o commit de destino (
refs/tags/8).# /c/usr/devsecops/compliance-inventory (master) $ git revert -n $(git rev-list --no-merges HEAD...83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8) -
Confirme o novo estado.
# /c/usr/devsecops/compliance-inventory (master|REVERTING) $ git commit -m "revert master to 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8" [master af82538] revert master to 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8 -
Envie a atualização para o branch master.
# /c/usr/devsecops/compliance-inventory (master) $ git push --set-upstream origin master ... To [https://us-south.git.cloud.ibm.com/jaunin.b/compliance-inventory.git](https://us-south.git.cloud.ibm.com/jaunin.b/compliance-inventory.git) 67cc8ba..af82538 master -> master ...
Acionar o pipeline de implantação contínua
-
Crie uma solicitação pull para as alterações de promoção de reversão.
-
Revisar e mesclar o pull request.
-
Acionar a execução manual do pipeline de CD em sua cadeia de ferramentas de CD.
Retrocesso sequencial
Visão geral do Rollback em linha
Este modo reverte a implantação atual dentro do contexto da mesma execução do pipeline. É necessário quando ocorre um erro ou falha durante a fase de implantação ou teste de aceitação, fazendo com que a tentativa de implantação seja marcada como falha.
Uma reversão em linha é executada automaticamente se a propriedade rollback-enabled do ambiente estiver definida como 1 e ocorrer uma falha na fase de teste de implantação ou aceitação.
Se uma reversão for acionada, o pipeline de CD executa o segmento definido para rollback em seu .pipeline-config.yaml arquivo. Se um rollback segmento não estiver definido no arquivo, uma implementação
padrão será executada e solicitará que você forneça um script de reversão.
Exemplo de script de reversão em .pipeline-config.yaml:
rollback:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.74
script: |
#!/usr/bin/env bash
if [[ "$PIPELINE_DEBUG" == 1 ]]; then
trap env EXIT
env
set -x
fi
source $WORKSPACE/$PIPELINE_CONFIG_REPO_PATH/scripts/deploy_setup.sh
source $WORKSPACE/$PIPELINE_CONFIG_REPO_PATH/scripts/rollback.sh
Propriedades definidas durante a reversão inline
rollback-status: Indica o status da etapa de reversão. Valores possíveis:[notRun, success, failure]rollback-exit-code: O código de saída da etapa de reversão. Este valor fica vazio se a reversão não tiver sido executada.default-rollback-executed: Defina comotruese a implementação padrão (que solicita um script) foi executada. Esse valor está vazio por padrão.pipeline-execution-status: Indica o status da execução geral do pipeline. Valores possíveis:[successful_deployment, failed_deployment_failed_rollback, failed_deployment_successful_rollback]
Possibilitando a rastreabilidade da implementação
Quando uma solicitação de mesclagem ou PR é mesclada, o sistema aumenta a transparência e a rastreabilidade, fornecendo visibilidade clara do que acontece em seguida. Ele atualiza automaticamente o PR com o status da implementação, permitindo
que as partes interessadas acompanhem facilmente o progresso de uma correção ou recurso sem precisar acessar os detalhes do pipeline. Essa abordagem simplificada não apenas melhora a transparência, mas também facilita a rastreabilidade, reduzindo
o esforço necessário para coletar e verificar informações. Após uma implantação bem-sucedida, um rótulo no formato deploy:{region}:{env} é aplicado aos pull requests incluídos na implantação.
Um sinalizador opcional deployment-traceability está disponível para ativar esse recurso no pipeline de CD. Os usuários podem ativar a rastreabilidade da implementação definindo o sinalizador como 1 quando necessário.
Para dar mais suporte a essa funcionalidade, se o usuário quiser fornecer um token específico para adicionar rótulos a PRs no repositório de aplicativos, ele poderá usar as seguintes propriedades de ambiente para especificar o token Git. A ordem em que o token Git é pesquisado é a seguinte:
- Uma propriedade de ambiente existente para um token específico do repositório:
git-token-$repo_name-$repo_org. - Uma nova propriedade de ambiente para um token específico da organização:
git-token-$repo_org.