Personalizando pipelines de DevSecOps para iniciantes
Aprenda os conceitos básicos para adotar o DevSecOps e integrar seu primeiro aplicativo ou microsserviço.
Sobre as cadeias de ferramentas DevSecops
Você descobriu e testou IBM Cloud Cadeias de ferramentas de Integração Contínua (CI), Implantação Contínua (CD) e Conformidade Contínua (CC) DevSecOps que implementam as práticas recomendadas e as ferramentas de segurança DevSecOps.
Agora, você está pronto para integrar seu próprio aplicativo ou microsserviço e adotar DevSecOps.
Antes de Iniciar
Você precisa dos seguintes recursos para integrar um aplicativo em uma cadeia de ferramentas DevSecOps:
- Um repositório de código-fonte do aplicativo Git que contém o código do seu aplicativo, geralmente referido como o "repositório do aplicativo".
- Um arquivo
.pipeline-config.yaml.. Esse arquivo é o arquivo de configuração principal que é usado pelos pipelines de CI, CD e CC para customizar qualquer um dos estágios no processo de execução de pipeline Introdução a um arquivo de amostra.pipeline-config.yaml, que pode ser transferido por download e customizado para ajustar suas necessidades. Todos os estágios, exceto o estágio inicial podem ser customizados usando o arquivo.pipeline-config.yaml. O arquivo aciona e executa seus scripts customizados para construir, testar e implementar seu aplicativo É possível mudar o nome do arquivo.pipeline-config.yamlou usar arquivos diferentes para diferentes pipelines ou acionadores Certifique-se de que os valores de parâmetro em seu pipeline ou acionador correspondam ao seu arquivo de configuração Para obter mais informações, consulte parâmetros de pipeline..
IBM Cloud tem os seguintes modelos de DevSecOps para você começar:
- Node aplicativo de amostra
- CodeEngine aplicativo de amostra de conformidade
- Aplicativo de amostra de conformidade do Go
- Python aplicativo de amostra de conformidade
- Node / Cloudant aplicativo de amostra de conformidade
Como os pipelines de DevSecOps usam repositórios
Para criar, testar e implantar seu aplicativo, os pipelines DevSecOps usam dois repositórios:
app-repo: o repositório do aplicativo, que contém o código-fonte para seu aplicativo...config-repo: o repositório de configuração, que contém seus arquivos e scripts YAML de configuração de pipeline..
No aplicativo de amostraDevSecOps, esses dois repositórios são os mesmos. A maioria dos adotantes de DevSecOps começa com esse padrão. Mas, conforme você integrar mais microsserviços, um repositório de configuração de pipeline dedicado e separado poderá ser necessário. Como o repositório do aplicativo e o repositório de configuração são os mesmos no aplicativo de amostra, o repositório é clonado duas vezes quando os pipelines são executados e podem levar a erros. Portanto, é uma prática recomendada ter um repositório de configuração separado para hospedar arquivos e scripts de configuração que possam ser compartilhados e reutilizados entre diferentes cadeias de ferramentas e pipelines de DevSecOps. Para obter mais informações sobre a customização do repositório de configuração, consulte as etapas avançadas de customização
DevSecOps os scripts consideram o app-repo e o config-repo como dois repositórios separados. Os scripts clonam os repositórios duas vezes durante o estágio de início do pipeline Esses clones são referidos como app-repo e one-pipeline-config-repo. Cada estágio é executado no contexto do config repo..
Migrar um aplicativo
Para simplificar, crie e teste uma cadeia de ferramentas de CI DevSecOps com o aplicativo de amostra Node antes de continuar.
Há três maneiras principais de integrar seu primeiro aplicativo em uma cadeia de ferramentas de CI de DevSecOps existente:
- Opção 1: inclua seu repositório de aplicativo na cadeia de ferramentas e use o repositório do aplicativo de amostra como o repositório de configuração.
- Opção 2: substitua o repositório do aplicativo de amostra pelo repositório do aplicativo.
- Opção 3: inclua seu repositório de aplicativo na sequência de ferramentas e use um repositório de configuração dedicado. Para obter mais informações sobre essa opção, consulte as etapas de customização avançadas
As cadeias de ferramentas DevSecOps usam repositórios do Gitlab que são gerenciados pelo IBM, também conhecido como GRIT. Outros provedores Git podem ser usados no lugar. Seu repositório de app pode ser hospedado no GitHub ou Gitlab, por exemplo.
Opção 1: inclua seu repositório do aplicativo e use o repositório do aplicativo de amostra como o repositório de configuração
Para incluir seu repositório de aplicativos na cadeia de ferramentas e usar o repositório de aplicativos de amostra como o repositório de configuração, conclua as seguintes etapas:
- No console " IBM Cloud, clique no ícone " Menu, "
> " Automação da plataforma > " Cadeias de ferramentas e selecione a cadeia de ferramentas que deseja editar.
- Clique em Incluir.
- Selecione onde o seu repositório de app está hospedado,
GitlabouGitHub - Use o servidor padrão ou inclua um novo.
- Digite o endereço URL do servidor personalizado e o token de acesso pessoal.
- Clique em Criar integração.
- Insira o repositório de código-fonte do aplicativo URL.
- Clique em Criar integração.
Em seguida, especifique o repositório do aplicativo de amostra como seu repositório de configuração concluindo as etapas a seguir:
- No console " IBM Cloud, clique no ícone " Menu, "
> " Automação da plataforma > " Cadeias de ferramentas e selecione a cadeia de ferramentas que deseja editar.
- Clique em pr-pipeline..
- Clique em Configurações e acesse a guia Propriedades do Ambiente..
- Edite o valor da propriedade
pipeline-config-repopara apontar para o repositório do aplicativo de amostra URL. - Volte para a sua cadeia de ferramentas de IC
- Clique em ci-pipeline.
- Clique em Configurações e acesse a guia Propriedades do Ambiente..
- Edite o valor da propriedade
pipeline-config-repopara apontar para o repositório do aplicativo de amostra URL.
Seus pipelines de IC agora usam o repositório de app de amostra pipeline-config como seu repositório de configuração
Opção 2: substituir o repositório do aplicativo de amostra por seu próprio repositório do aplicativo
Para substituir o repositório de app de amostra por seu próprio repositório de app, conclua as etapas a seguir:.:
- No console " IBM Cloud, clique no ícone " Menu, "
> " Automação da plataforma > " Cadeias de ferramentas e selecione a cadeia de ferramentas de CI que deseja editar.
- Localize o repositório de código-fonte do aplicativo de amostra e selecione Configurar
- Substitua o repositório URL pelo repositório de código-fonte do seu aplicativo URL.
- Clique em Salvar integração.
Depois de substituir o repositório de app de amostra, certifique-se de que o novo repositório de app contenha um arquivo .pipeline-config.yaml e os scripts correspondentes Copie o arquivo .pipeline-config.yaml e os
scripts do repositório de aplicativos de amostra para o seu repositório de aplicativos ou use este arquivo de configuração de amostra
Configurando os pipelines de IC
Depois de incluir seu repositório de aplicativos, deve-se configurar os pipelines de IC para trabalhar com o novo repositório
Configurando os acionadores de pipeline
Os acionadores padrão usam o repositório do aplicativo de amostra, portanto, deve-se atualizá-los para usar o seu repositório de aplicativos Verifique as configurações do acionador e modifique-as se necessário para assegurar que todos os acionadores apontem para seu repositório de app. Conclua as etapas a seguir:
- No console " IBM Cloud, clique no ícone " Menu, "
> " Automação da plataforma > " Cadeias de ferramentas e selecione a cadeia de ferramentas de CI que deseja editar.
- Clique em pr-pipeline..
- Edite o Git PR Trigger e forneça o repositório do aplicativo URL e a ramificação.
- Clique em Salvar.
- Volte para a cadeia de ferramentas de IC e selecione ci-pipeline.
- Edite o Git CI Trigger e forneça o repositório do aplicativo URL e a ramificação. Certifique-se que o nome do aplicativo esteja correto na seção Propriedades.
- Clique em Salvar.
- Edite o Acionador Manual Na seção Propriedades, certifique-se de que o nome do app esteja correto
- Certifique-se de que as propriedades do repositório e da ramificação estejam corretas e apontando para o seu repositório de aplicativos
Configurando o arquivo .pipeline-config.yaml
Copie o arquivo .pipeline-config.yaml do repositório de aplicativos de amostra para o seu repositório de aplicativos ou use este arquivo de configuração de amostra
Para pr-pipeline e ci-pipeline, certifique-se de que os parâmetros pipeline-config, pipeline-config-branch e pipeline-config-repo estejam configurados corretamente e correspondam
à sua configuração. Se esses parâmetros não forem configurados corretamente, você poderá confirmar as mudanças na ramificação errada, o que resulta em um erro com seu pipeline
Se a variável pipeline-config-repo não for definida, os pipelines DevSecOps assumirão que se trata do mesmo repositório que o repositório de código-fonte do aplicativo.
Uso de scripts personalizados com DevSecOps
O arquivo " pipeline-config.yaml é o principal componente que orquestra e personaliza o comportamento do pipeline do DevSecOps. O arquivo usa scripts para construir, testar e implementar seu aplicativo.. O arquivo define
como os estágios são configurados, e quais scripts são executados Para obter mais informações, consulte scripts customizados..
Há duas categorias principais de scripts que são usadas pelos pipelines de DevSecOps:
- Scripts relacionados ao aplicativo usados para construir, testar e implementar seu aplicativo. Esses scripts são de sua própria responsabilidade e estão fora do escopo do suporte DevSecOps. Como esses scripts não têm uma implementação padrão, deve-se incluí-los em seu repositório de aplicativo ou de configuração Pode ser necessário extrair os scripts de Jenkins, ou de outra origem.
- Scripts de segurança e conformidade que executam varreduras de segurança e conformidade. A maioria vem com scripts padrão que podem ser substituídos para usar sua própria implementação customizada.
Exceto para o estágio inicial, cada estágio de um pipeline de IC, CD ou CC pode ser customizado com seus próprios scripts para substituir a implementação padrão do estágio. O estágio inicial não pode ser customizado com seus scripts.
Embora scripts Bash sejam fornecidos como amostras, é possível construir, testar e implementar seu aplicativo usando outras linguagens como Python ou Go. Certifique-se de usar o image correto para cada estágio. Consulte as
imagensDocker na seção de pipelines DevSecOps.
Consulte a tabela Estágios e tarefas que resumem vários estágios do Pipeline de IC A tabela também fornece informações consolidadas sobre se o estágio possui uma implementação de referência padrão, se ele pode ser customizado ou ignorado ou se há uma coleta de evidência explícita que é necessária pela execução do estágio
Migração de Jenkins ou Travis para DevSecOps
A maioria dos adotantes de DevSecOps não começa do nada. A maioria dos adotantes já possui integração contínua e processos de entrega contínuos no local, juntamente com uma biblioteca de scripts correspondente.. Esses processos geralmente são implementados usando Jenkins, Travis ou alguma outra plataforma.
Pontos-chave para a migração para DevSecOps:
- O arquivo de configuração
pipeline-config.yamldeve refletir como os pipelines de CI e CD são orquestrados atualmente Os estágios e as etapas devem ser mapeados para os estágios do pipeline doDevSecOps. - Você deve usar os mesmos scripts, imagens de base e variáveis que já estão em vigor no local.
- As propriedades secretas precisam ser migradas para um armazenamento secreto.
- Propriedades não secretas precisam ser incluídas como propriedades de pipeline ou acionador.
Trabalhando no modo de desenvolvimento..
É possível usar o modo de desenvolvimento para pipelines de IC e CD para testar a implementação de seu arquivo .pipeline-config.yaml e scripts O pipeline do modo de desenvolvimento não executa nenhuma tarefa relacionada à segurança
ou conformidade, que reduz o tempo de execução para o pipeline. Para obter mais informações, consulte executando pipelines no modo de desenvolvimento..
Use o modo de desenvolvimento apenas para propósitos de desenvolvimento O modo de desenvolvimento não substitui os pipelines oficiais de CI e CD do DevSecOps, que continuam sendo as implementações de referência.
Configurando o pipeline do CD
No fluxo de trabalho de integração contínua e implantação contínuaDevSecOps, o pipeline de CI envia atualizações para o repositório de inventário durante o
estágio " deploy-release do pipeline de CI. Para obter mais informações, consulte o script release.sh de amostra.
Nesse fluxo de trabalho, vários acionadores de CI e diferentes cadeias de ferramentas de CI DevSecOps podem contribuir para o mesmo repositório de inventário.
Ao contrário do pipeline de IC, o script de implementação que é usado pelo pipeline de CD precisa ser adaptado de seus scripts atuais em Jenkins, Travis ou alguma outra plataforma para usar as entradas no repositório de inventário.
Este código de amostra mostra como recuperar informações do inventário e usá-lo para executar uma implementação do Kubernetes
Localização dos scripts DevSecOps
Os pipelines de DevSecOps vêm com ferramentas padrão de segurança e varredura e scripts associados.
Por exemplo, o início de um log de estágio referencia o script padrão:
scan-artifact:
image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
dind: true
dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
abort_on_failure: false
image_pull_policy: IfNotPresent
script: |
#!/bin/sh
"/opt/commons/scan-artifact/scan.sh"
/opt/commons/scan-artifact/scan.sh é o script padrão..
O pipeline DevSecOps fornece o caminho para a pasta raiz da biblioteca commons em uma variável de ambiente chamada ' COMMONS_PATH, que está disponível
em todas as tarefas e etapas. Para acessar um script que é construído na imagem base de conformidade, use a variável COMMONS_PATH com a pasta de script que você precisa:
source "${COMMONS_PATH}/<script folder in commons>/<script file name>
Consulte a tabela Estágios e tarefas que resume vários estágios do Pipeline do CD A tabela também fornece informações consolidadas sobre se o estágio possui uma implementação de referência padrão, se ele pode ser customizado ou ignorado ou se há uma coleção de evidências explícita requerida pela execução do estágio
Propriedades do ambiente
Os pipelines DevSecOps vêm com propriedades de ambiente predefinidas, mas você pode adicionar quantas propriedades personalizadas forem necessárias. É possível acessar
esses valores de propriedades em seus scripts usando o Comando get_env
Após incluir sua propriedade e seu valor padrão opcional no pipeline ou acionador, use o comando get_env em seu script para recuperar o valor da propriedade. O exemplo a seguir recupera o valor da propriedade my-variable:
MY_VARIABLE=$(get_env my-variable "")
Também é possível substituir dinamicamente o valor de uma propriedade em um script usando o Comando set_env. O exemplo a seguir substitui o valor na propriedade
my-variable:
set_env my-variable new-value
Ignorando estágios
Alguns estágios podem ser irrelevantes. Por exemplo, você pode não estar construindo nenhuma imagem do Docker ou você ainda não implementou testes de aceitação ainda. Se desejar ignorar um estágio, será possível editar o arquivo .pipeline-config.yaml para incluir exit 0 ou configurar a variável skip como true.
O exemplo a seguir inclui exit 0 para ignorar um estágio:
scan-artifact:
image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
dind: true
dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
abort_on_failure: false
image_pull_policy: IfNotPresent
skip: false
runAfter: null
script: |
#!/bin/sh
exit 0
"/opt/commons/scan-artifact/scan.sh"
Imagens Docker em pipelines de DevSecOps
Por padrão, os pipelines DevSecOps usam IBM Imagens Continuous Delivery. Essas imagens contêm algumas das ferramentas mais comuns, como Node e Java para executar seus scripts.. Também é possível usar as imagens de outros fornecedores ou suas próprias imagens customizadas que contêm suas ferramentas preferenciais.
As imagens Docker que são usadas pelos pipelines DevSecOps são especificadas no arquivo " .pipeline-config.yaml. Cada estágio pode usar
uma imagem diferente
Alterando a versão da imagem
Com base em seus requisitos, pode ser necessário usar uma versão diferente de uma imagem Para alterar a versão da imagem, edite o arquivo .pipeline-config.yaml Por exemplo, se você referenciou a seguinte imagem em seu arquivo
YAML icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24, alterá-la para icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.27 resulta no uso da versão 3.27 da imagem.
Da mesma forma, mude o dind_image para o estágio:
scan-artifact:
image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
dind: true
dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
(...)
Obtendo suporte
IBM Cloud o assistente de IA da IBM, que é alimentado pela watsonx, foi projetado para ajudá-lo a aprender sobre como trabalhar na IBM Cloud e criar soluções com o catálogo de ofertas disponível. Consulte Obter ajuda do assistente de IA.
Se ainda não for possível resolver o problema, será possível abrir um caso de suporte. Para obter mais informações, consulte Criando casos de suporte. E, se você quiser fornecer feedback, consulte Envio de feedback.