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

  1. Obter informações para a promoção e para a solicitação de pull/merge da promoção.
  2. Promova as entradas de inventário do ambiente de origem para o ambiente de destino.
  3. 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.
  4. Opcional. Configure os status de evidência e inclua o resumo de evidência agregado na solicitação pull / merge da promoção.
  5. Mesclar o pedido de pull / merge.
  6. 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-tests ou setup, 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.

Etapas e tarefas do pipeline de promoçã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-tests ou setup, 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.

Etapas e tarefas do fluxo de trabalho de validação de promoções
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.

  1. Acesse a página Acionador do pipeline de CD no qual deseja incluí-lo.
  2. Selecione Incluir> Git Repository para incluir um novo acionador.
  3. 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-gitlab como EventListener.
    • 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
  4. Clique em Incluir.
  5. Configure o acionador como Ativado.

Entradas

Entradas do pipeline de promoção
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.

Tabela 2.Optional
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

Promoção de pull e solicitação de merge
' Promoção de pull e solicitação de merge

Quando a validação do PR de promoção (opcional) for executada, o status da evidência será configurado no pedido de pull / merge.

Status de evidência opcional definido na solicitação de pull e merge da promoção
Status de evidência na solicitação de pull e merge da promoção
'

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.

Resumo opcional de evidências agregadas capturado em um comentário sobre a solicitação de promoção, extração e mesclagem
Resumo de evidências agregadas na solicitação de promoção, extração e mesclagem

Próxima etapa

Depois que o Promotion Pipeline terminar com sucesso, você pode prosseguir para o CD Pipeline.