Pipeline de promoção
O pipeline de promoção transfere registros de estoque de um ambiente para outro e cria uma solicitação de extração/fusão de promoção.
Separação de funções durante as promoções
-
Promoções alcançadas principalmente por meio do fluxo de trabalho de Pull Request
- → Criar PR de promoção (por exemplo, do ramo do ambiente de origem para o do ambiente de destino)
- → Revisar/editar o PR (incluindo a verificação do status de validação do PR)
- → Incorporar o PR ao branch do ambiente de destino
- → Executar o pipeline de implantação do CD (ao fazer commit, por temporizador ou por acionamento manual)
- → Enxágue e repita o procedimento para o próximo ramo de ambiente
- → Pode ter um número arbitrário de ramificações de ambiente
-
Funções
- Desenvolvedor: Envia o código, o que faz com que o pipeline de CI atualize o inventário principal (não de produção)
- Operações de Promoção / Gerente de Lançamento: Acionar o pipeline de promoção (principal → staging e/ou staging → produção), criando PRs com verificação de status para controle de acesso (imposta pela ACL da cadeia de ferramentas e pelas proteções do branch de inventário)
- Operações de Produção / Responsável pela aprovação: Revisar e mesclar o PR de promoção no branch de produção. Executar pipelines de produção. (impostas pela proteção de ramificação de inventário)
-
Aproveitar as cargas de trabalho d conjuntos de ferramentas de CD distintos para os ambientes de teste e produção (Ops distintas)
-
Isso significa que um desenvolvedor pode preparar uma alteração, mas não pode colocá-la em produção unilateralmente se a proteção do branch exigir um aprovador específico.
-
O PR de promoção passa a ser o registro formal de aprovação da alteração, e o histórico de mesclagem fornece evidências auditáveis sobre quem aprovou a promoção para produção e quando.
Etapas do pipeline de promoção
- Obter informações para a promoção e para a solicitação de pull/merge da promoção.
- Promova as entradas de inventário do ambiente de origem para o ambiente de destino.
- Crie a solicitação de pull/merge para a promoção. Edite a solicitação de pull / merge para indicar quais mudanças a executar. Assista a campos opcionais e obrigatórios.
- Opcional. Configure os status de evidência e inclua o resumo de evidência agregado na solicitação pull / merge da promoção.
- Mesclar o pedido de pull / merge.
- Envie uma notificação no Slack se o recurso estiver ativado.
Estágios e tarefas
A tabela a seguir lista as tarefas executadas em um pipeline de promoção. Além disso, a tabela também apresenta uma visão geral de cada uma dessas etapas:
-
Tarefa ou Etapa: Refere-se ao nome da etapa, conforme definido no arquivo de configuração
.pipeline-config.yaml. -
Breve descrição: Esta seção oferece uma explicação concisa das ações realizadas durante a execução da etapa.
-
Personalização permitida: Isso indica se os usuários têm a flexibilidade de modificar ou substituir o comportamento padrão da etapa inserindo um script personalizado no arquivo
.pipeline-config.yaml. -
Implementação de referência padrão: Isso indica se os pipelines do DevSecOps vêm com uma implementação predefinida ou padrão para a etapa. Vale destacar que, para certas etapas, como
unit-testsousetup, o pipeline DevSecOps não oferece nenhuma implementação pronta para uso. Em vez disso, os usuários precisam fornecer scripts personalizados ou código adaptado às necessidades de suas aplicações. -
Coleta de provas: Isso indica se a etapa realiza a coleta de provas padrão. Quando o Pipeline “ DevSecOps ” fornece uma implementação de referência para uma etapa, a coleta de evidências é realizada de forma pronta para uso. No entanto, caso o usuário opte por modificar ou substituir essas etapas predefinidas, ele deverá garantir que suas implementações personalizadas incluam a coleta adequada de evidências. A mesma responsabilidade recai sobre os usuários nas etapas em que o pipeline do DevSecOps não oferece 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 pela coleta de evidências.
-
Permissão para pular (aplicável à versão >= v10 ): Isso indica se os usuários podem optar por não executar esta etapa, definindo a propriedade “skip” como “true” no arquivo
.pipeline-config.yaml. No entanto, recomenda-se cautela ao usar esse recurso, especialmente em etapas destinadas à coleta de provas. Ignorar essas etapas pode fazer com que se percam evidências essenciais para a compilação.
| Tarefa ou estágio | Descrição simples | Personalização permitida em .pipeline-config.yaml |
Implementação de referência padrão | Coleta de evidências | É permitido pular |
|---|---|---|---|---|---|
inventory-promotion |
Crie uma solicitação de pull para a promoção. | Não | True | N/D | Não |
inventory-finish |
Coleta e upload dos arquivos de log, artefatos e evidências, colocando-os no armazenamento de evidências. | True | Não | N/D | Não |
Para obter mais informações sobre como personalizar etapas usando o arquivo .pipeline-config.yaml , consulte as listas “Scripts personalizados ” e “Parâmetros do pipeline ”.
Executando o pipeline de promoção
Use o acionador de promoção manual para executar o pipeline de promoção. Se o branch de origem (master) estiver mais avançado que o branch de destino (prod), o pipeline cria uma solicitação de pull/merge de promoção que você pode revisar e editar.
Se a ramificação de origem estiver atrás do destino, o pipeline de promoção falhará com a mensagem All changes have already been promoted.
Para alterar os valores padrão da solicitação de pull/merge de promoção ou para promover a partir de uma origem alternativa para o destino, os usuários podem modificar os dados de entrada na interface de usuário das Variáveis de Ambiente do Pipeline.
Antes de executar o pipeline de implantação contínua, certifique-se de que a solicitação de pull/fusão para promoção tenha sido incorporada. Você pode encontrar a solicitação de URL pull/merge nos registros do pipeline.
Para obter mais informações sobre o processo de inventário e promoção, consulte Promoção de inventário.
Promoção parcial de itens de inventário
O método de promoção parcial permite que o pipeline de promoção promova um subconjunto selecionado de inventário disponível.
Nesse contexto, um item do inventário seria um único arquivo (do tipo “inventário”) presente no repositório de inventário, o que corresponderia a um nome de arquivo exclusivo no sistema de arquivos local
Usando os parâmetros inventory-include e inventory-exclude habilita o método de promoção parcial.
Ao usar inventory-include, os padrões/nomes de arquivos fornecidos nessa propriedade de ambiente serão resolvidos para suas respectivas entradas e promovidos pelo pipeline. Da mesma forma, as entradas fornecidas em inventory-exclude ser excluído da promoção.
O formato utiliza padrão glob (também suporta caminhos completos), semelhante ao que é seguido no pipeline CC. Para obter mais informações sobre padrões glob, consulte o globo manual.
Filtragem aplicada em promoção parcial
A promoção parcial aplica dois níveis de filtragem - usando o .inventoryignore arquivo e aplicando filtragem com base nos padrões glob fornecidos para inventory-include e inventory-exclude
Usando o arquivo .inventoryignore
Para excluir um conjunto de arquivos ou pastas por padrão para cada execução de promoção parcial, bem como execução de pipeline de CD, você pode adicionar a lista de arquivos/pastas ao arquivo .inventoryignore arquivo para excluir
essas entradas.
A lista de entradas disponíveis (que o pipeline pode promover) fica disponível após filtrar as entradas do .inventoryignore arquivo.
O pipeline procura o .inventoryignore arquivo na raiz do repositório. Se preferir um nome diferente para o arquivo de exclusão de inventário, você poderá especificá-lo definindo a opção inventory-ignore-file key
como uma propriedade de ambiente em seu pipeline. Certifique-se de que este arquivo esteja na raiz do repositório de inventário.
Usando o parâmetro de inclusão de inventário
A lista de entradas a serem promovidas após filtrar as entradas fornecidas pelo inventory-include e/ou inventory-exclude
Se ambos inventory-include e inventory-exclude estão presentes,inventory-include tem precedência e então inventory-exclude exclui itens do subconjunto definido pela lista de inclusão.
Se uma dessas variáveis for fornecida, o pipeline tentará resolver os caminhos completos dos padrões glob ou apenas nomes de arquivos diretos e prosseguirá com a promoção parcial.
Somente a lista comum de entradas entre os 2 níveis de filtragem é promovida pelo pipeline.
Exemplo de uso de parâmetros de inclusão e exclusão de inventário
Esta seção mostra exemplos de uso de padrões glob e também de sua incorporação no inventory-include e inventory-exclude parâmetros. Aqui está um exemplo de estrutura de diretório para um repositório de inventário,
contendo microsserviços, arquivos de configuração (aninhados) e gráficos de leme.
cd-pipeline-deps
my-application-plugin-component-config
my-application-plugin-component-diagnostic-monitor
configuration # directory entry
configuration/my-staging-region # directory entry
configuration/my-staging-region/environment-1-cluster # directory entry
configuration/my-staging-region/environment-1-cluster/serviceA-component_config
configuration/my-staging-region/environment-1-cluster/serviceB-system_config
configuration/my-staging-region/environment-1-cluster/serviceC-params_config
configuration/serviceX-dashboard-setup_helm
configuration/serviceY-releases_helm
my-application-task-runner
my-application-dashboard
my-application-dashboard_deployment
my-application-module
my-application-module_deployment
.inventoryignore
global_deployment
README.md
Para selecionar todas as entradas de submódulo de um componente
inventory-include definido como :*plugin-component*
Entradas de inventário selecionadas:
my-application-plugin-component-config
my-application-plugin-component-diagnostic-monitor
Para selecionar todos os gráficos do leme em uma determinada pasta de configuração
inventory-include definido como :configuration/*helm
Entradas de inventário selecionadas:
configuration/serviceX-dashboard-setup_helm
configuration/serviceY-releases_helm
Para selecionar todos os arquivos de configuração de um ambiente específico
inventory-include definido como :configuration/my-staging-region/environment-1-cluster/*_config
Entradas de inventário selecionadas:
configuration/my-staging-region/environment-1-cluster/serviceA-component_config
configuration/my-staging-region/environment-1-cluster/serviceB-system_config
configuration/my-staging-region/environment-1-cluster/serviceC-params_config
Para selecionar apenas um componente
inventory-include definido como :my-application-dashboard*
Entradas de inventário selecionadas:
my-application-dashboard
my-application-dashboard_deployment
Usando combinação de padrões glob no inventário incluído
inventory-include definido como :*plugin-component*,configuration/*helm
Entradas de inventário selecionadas:
my-application-plugin-component-config
my-application-plugin-component-diagnostic-monitor
configuration/serviceX-dashboard-setup_helm
configuration/serviceY-releases_helm
Usando combinação de padrões glob na exclusão de inventário
inventory-exclude definido como :configuration/**, my-application-dashboard*
Entradas de inventário selecionadas:
cd-pipeline-deps
my-application-plugin-component-config
my-application-plugin-component-diagnostic-monitor
my-application-task-runner
my-application-module
my-application-module_deployment
.inventoryignore
global_deployment
Solicitações de pull / merge de promoção
As informações contidas no corpo da solicitação de pull/merge da promoção são utilizadas para criar a solicitação de alteração. Os arquivos alterados pela solicitação de pull/merge de promoção representam as entradas, como imagens, que são implantadas
pelo pipeline de implantação contínua. Se as alterações tiverem sido feitas devido a uma emergência, a solicitação de pull/merge da promoção é marcada com um selo de emergência. A solicitação de alteração criada pelo pipeline de implantação
contínua também é marcada como “ emergency ”.
A evidência coletada no pipeline de integração contínua é resumida e anexada à solicitação de mudança no pipeline de implementação contínua.
Pipeline de validação de promoção
Depois que uma RC de promoção é aberta, é possível, opcionalmente, executar a agregação de evidência e a geração de resumo no pipeline de validação de Promoção e configurar os status de evidência na solicitação de pull / mesclagem (RC) de promoção A RC pode ter sido criada pelo pipeline de Promoção ou manualmente no repositório de inventário
O pipeline permite a validação antecipada da RC de promoção antes da RC ser mesclada com a ramificação de destino (ambiente). Com base no status da RC, os usuários podem continuar com a promoção (quando todos os status de evidência estiverem verdes) ou optar por corrigir o problema no pipeline de integração contínua (quando o status de evidência estiver vermelho)...
Além disso, o pipeline de validação também adiciona o resumo agregado das evidências para um ou mais aplicativos no inventário à solicitação de promoção pull/merge como um comentário, em um formato tabular fácil de usar (conforme mostrado na Figura 3). A tabela fornece links úteis, como links para execuções de pipeline, repositórios de aplicativos e problemas criados para cada um dos aplicativos.
Por padrão, cada linha na tabela Status detalhado da evidência corresponde a um contexto de aplicação fornecido por um repositório de origem usado para criar artefatos referenciados nas entradas do inventário. Esse agrupamento padrão
do aplicativo pode ser personalizado com base em um valor de agrupamento obtido pela aplicação do filtro JSON (definido na propriedade application-group-by-filter) em cada arquivo de entrada do inventário.
Enquanto a validação está em andamento, a mesclagem da solicitação de pull / merge de promoção está bloqueada. Quando o pipeline de validação for concluído, o status de evidência será configurado na solicitação pull / merge. Clicar em cada entrada no status leva o usuário para o estágio específico na execução de pipeline de CI correspondente.
Estágios e tarefas
A tabela a seguir lista as tarefas executadas em um pipeline de validação de promoção. Além disso, a tabela também apresenta uma visão geral de cada uma dessas etapas:
-
Tarefa ou Etapa: Refere-se ao nome da etapa, conforme definido no arquivo de configuração
.pipeline-config.yaml. -
Breve descrição: Esta seção oferece uma explicação concisa das ações realizadas durante a execução da etapa.
-
Personalização permitida: Isso indica se os usuários têm a flexibilidade de modificar ou substituir o comportamento padrão da etapa inserindo um script personalizado no arquivo
.pipeline-config.yaml. -
Implementação de referência padrão: Isso indica se os pipelines do DevSecOps vêm com uma implementação predefinida ou padrão para a etapa. Vale destacar que, para certas etapas, como
unit-testsousetup, o pipeline DevSecOps não oferece nenhuma implementação pronta para uso. Em vez disso, os usuários precisam fornecer scripts personalizados ou código adaptado às necessidades de suas aplicações. -
Coleta de provas: Isso indica se a etapa realiza a coleta de provas padrão. Quando o Pipeline “ DevSecOps ” fornece uma implementação de referência para uma etapa, a coleta de evidências é realizada de forma pronta para uso. No entanto, caso o usuário opte por modificar ou substituir essas etapas predefinidas, ele deverá garantir que suas implementações personalizadas incluam a coleta adequada de evidências. A mesma responsabilidade recai sobre os usuários nas etapas em que o pipeline do DevSecOps não oferece 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 pela coleta de evidências.
-
Permissão para pular (aplicável à versão >= v10 ): Isso indica se os usuários podem optar por não executar esta etapa, definindo a propriedade “skip” como “true” no arquivo
.pipeline-config.yaml. No entanto, recomenda-se cautela ao usar esse recurso, especialmente em etapas destinadas à coleta de provas. Ignorar essas etapas pode fazer com que se percam evidências essenciais para a compilação.
| Tarefa ou estágio | Descrição simples | Personalização permitida em .pipeline-config.yaml |
Implementação de referência padrão | Coleta de evidências | É permitido pular |
|---|---|---|---|---|---|
inventory-validation |
Valida a solicitação de pull criada para a promoção. | Não | True | N/D | Não |
validation-finish |
Coleta e upload dos arquivos de log, artefatos e evidências, colocando-os no armazenamento de evidências. | True | Não | N/D | Não |
Para obter mais informações sobre como personalizar etapas usando o arquivo .pipeline-config.yaml , consulte as listas “Scripts personalizados ” e “Parâmetros do pipeline ”.
Como optar pela validação da promoção?
Preterida A opção opt-in-promotion-validation que era usada para iniciar automaticamente o pipeline de validação de promoção em um pull request é deprecated em favor da
opção Git Promotion Validation trigger. Se você tiver essa propriedade nas configurações do ambiente, você verá o aviso de descontinuação nos logs de pipeline e na notificação do Slack
Como ativar a validação da promoção?
Para todas as novas cadeias de ferramentas de CD, um gatilho de validação de promoção do tipo “ Git ” é criado automaticamente e definido como ativado.
Para ativar o acionador Git Promotion Validation em um pipeline existente, é possível usar as etapas a seguir.
- Acesse a página Acionador do pipeline de CD no qual deseja incluí-lo.
- Selecione Incluir> Git Repository para incluir um novo acionador.
- Insira as seguintes informações necessárias para o acionador:
- Forneça um nome de acionador.. Por exemplo: Git Promotion Validation Trigger.
- Especifique
promotion-validation-listener or promotion-validation-listener-gitlabcomoEventListener. - Selecione o repositório de inventário correspondente para o pipeline para o campo Repositório.
- Selecione o nome do ambiente de destino para a Ramificação
- Marque a caixa para o campo Quando uma solicitação pull é aberta ou atualizada
- Clique em Incluir.
- Configure o acionador como Ativado.
Entradas
| Variável | Descrição | Valor Padrão | Obrigatório ou opcional |
|---|---|---|---|
| source-environment | A ramificação de inventário de origem da promoção. | master |
Obrigatório |
| target-environment | A ramificação de inventário de destino da promoção. | prod |
Obrigatório |
| prioridade | A prioridade da mudança. | critical, high, moderate, low ou planning |
Opcional |
| assignee | O ID funcional ou o e-mail da pessoa à qual designar a solicitação de mudança na organização IBM Cloud da solicitação de mudança . | '' |
Opcional |
| descrição | A descrição da mudança, que é anexada à descrição da solicitação de mudança. | '' |
Opcional |
| Propósito | O motivo pelo qual a mudança é necessária. | '' |
Opcional |
| impact | Mais observações sobre o que essa implementação de mudança afeta. | '' |
Opcional |
| inventário-ignorar-arquivo | Nome de arquivo personalizado para o arquivo .inventoryignore, este arquivo contém uma lista de arquivos/pastas a serem ignorados em cada execução de promoção parcial. | .inventoryignore |
Opcional |
| inclusão de inventário | Entradas de inventário para promoção seletiva (promoção parcial). | '' |
Opcional |
| exclusão de inventário | Entradas de inventário a serem excluídas em promoção parcial. | '' |
Opcional |
| backout-plan | O plano que descreve como a mudança será revertida em caso de falha. | '' |
Opcional |
| slack-notifications | O comutador usado para ativar ou desativar a integração do Slack. | 0 | Opcional |
| cliente-impacto | Impacto da mudança nos clientes. | critical, high, moderate, low ou no_impact |
Opcional |
Saídas e efeitos
- Notificação do Slack
- Solicitação de pull / merge de promoção
Você deve editar e modificar a solicitação de pull / merge se os parâmetros opcionais não foram fornecidos.
| Variável | Descrição | Obrigatório ou opcional |
|---|---|---|
| Prioridade | Um dos valores a seguir: Critical, High, Moderate, Low, Planning |
Obrigatório |
| Alterar designador de Solicitação | O ID do e-mail do asssignee. | Obrigatório |
| Descrição adicional | A descrição sobre as alterações no aplicativo. | Opcional |
| Propósito | O objetivo das alterações realizadas no aplicativo. | Opcional |
| Explicação do Impacto | O impacto da alteração no comportamento ou no ambiente do aplicativo. | Opcional |
| Impacto do Cliente | Um dos valores a seguir: Critical, High, Moderate, Low, No_Impact |
Obrigatório |
| Impacto da Implementação. | Um dos seguintes valores: Small, Large |
Obrigatório |
| Plano de Backout | As etapas para recuar se a implementação falhar. | Opcional |
Quando a validação do PR de promoção (opcional) for executada, o status da evidência será configurado no pedido de pull / merge.
O resumo de evidência agregado das evidências (que podem ser provenientes de vários apps no inventário) é exibido no formato tabular como um comentário na RC.
Próxima etapa
Depois que o Promotion Pipeline terminar com sucesso, você pode prosseguir para o CD Pipeline.