Configure um pipeline de CI/CD usando a AWS e o CodePipeline AWS CDK - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configure um pipeline de CI/CD usando a AWS e o CodePipeline AWS CDK

Criado por Konstantin Zarudaev (AWS), Cizer Pereira (AWS), Lars Kinder (AWS) e Yasha Dabas (AWS)

Repositório de código: AWS CodePipeline com CI/CD

Ambiente: PoC ou piloto

Tecnologias: DevOps

Workload: código aberto

Serviços da AWS: AWS CodePipeline

Início

A automatização de seu processo de compilação e lançamento de software com integração e entrega contínuas (CI/CD) oferece suporte a compilações repetíveis e entrega rápida de novos atributos para seus usuários. Você pode testar de forma rápida e fácil cada alteração de código e pode capturar e corrigir bugs antes de lançar seu software. Ao executar cada alteração em seu processo de preparação e lançamento, você pode verificar a qualidade do seu aplicativo ou código de infraestrutura. A CI/CD incorpora uma cultura, um conjunto de princípios operacionais e um conjunto de práticas que ajudam as equipes de desenvolvimento de aplicativos a realizar alterações de código com mais frequência e confiabilidade. A implementação também é conhecida como pipeline de CI/CD.

Esse padrão define um pipeline reutilizável de integração e entrega contínuas (CI/CD) na Amazon Web Services (AWS). O CodePipeline pipeline da AWS é escrito usando o AWS Cloud Development Kit (AWS CDK) v2.

Usando CodePipeline, você pode modelar os diferentes estágios do seu processo de lançamento de software por meio da interface do AWS Management Console, da AWS Command Line Interface (AWS CLI), da AWS ou dos CloudFormation SDKs da AWS. Esse padrão demonstra a implementação CodePipeline e seus componentes usando o AWS CDK. Além da estrutura de bibliotecas, o AWS CDK inclui um kit de ferramentas (o comando cdk CLI), que é a principal ferramenta para interagir com seu aplicativo do AWS CDK. Entre outras funções, o kit de ferramentas oferece a capacidade de converter uma ou mais pilhas em CloudFormation modelos e implantá-las em uma conta da AWS.

O pipeline inclui testes para validar a segurança de suas bibliotecas de terceiros e ajuda a garantir o lançamento rápido e automatizado nos ambientes especificados. Você pode aumentar a segurança geral de seus aplicativos submetendo-os a um processo de validação.

A intenção desse padrão é acelerar o uso de pipelines de CI/CD para implantar seu código e, ao mesmo tempo, garantir que os recursos implantados sigam as melhores práticas. DevOps Depois de implementar o código de exemplo, você terá uma AWS CodePipeline com processos de linting, testes, verificação de segurança, implantação e pós-implantação. Esse padrão também inclui etapas para o Makefile. Usando um Makefile, os desenvolvedores podem reproduzir as etapas de CI/CD localmente e aumentar a velocidade do processo de desenvolvimento.

Pré-requisitos e limitações

Pré-requisitos

  • Uma conta AWS ativa

  • Um entendimento básico sobre o seguinte:

    • AWS CDK

    • AWS CloudFormation

    • AWS CodePipeline

    • TypeScript

Limitações

Esse padrão usa o AWS CDK TypeScript apenas para. Ela não abrange outras linguagens suportadas pelo AWS CDK.

Versões do produto

Use as versões mais recentes das seguintes ferramentas:

  • AWS Command Line Interface (AWS CLI)

  • cfn_nag

  • git-remote-codecommit

  • Node.js

Arquitetura

Pilha de tecnologias de destino

  • AWS CDK

  • AWS CloudFormation

  • AWS CodeCommit

  • AWS CodePipeline

Arquitetura de destino

O pipeline é acionado por uma alteração no CodeCommit repositório da AWS (SampleRepository). No início, CodePipeline cria artefatos, se atualiza e inicia o processo de implantação. O pipeline resultante implanta uma solução em três ambientes independentes:

  • Dev – Verificação de código em três etapas no ambiente de desenvolvimento ativo

  • Teste: ambiente de teste de integração e regressão

  • Prod: ambiente de produção

As três etapas incluídas no estágio de desenvolvimento são linting, segurança e testes unitários. Essas etapas são executadas paralelamente para acelerar o processo. Para garantir que o pipeline forneça somente artefatos funcionais, sua execução será interrompida sempre que uma etapa do processo falhar. Depois de uma implantação em fase de desenvolvimento, o pipeline executa testes de validação para verificar os resultados. Em caso de sucesso, o pipeline implantará os artefatos no ambiente de teste, que contém a validação pós-implantação. A etapa final é implantar os artefatos no ambiente do Prod.

O diagrama a seguir mostra o fluxo de trabalho do CodeCommit repositório até os processos de criação e atualização executados por CodePipeline, as três etapas do ambiente de desenvolvimento e a implantação e validação subsequentes em cada um dos três ambientes.

O ambiente de desenvolvimento inclui linting, segurança e testes unitários, todos incluem implantação e validação.

Ferramentas

Serviços da AWS

  • O AWS Cloud Development Kit (AWS CDK) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura da Nuvem AWS em código.

  • CloudFormationA AWS ajuda você a configurar recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas as contas e regiões da AWS. Nesse padrão, os CloudFormation modelos podem ser usados para criar um CodeCommit repositório e um pipeline de CodePipeline CI/CD.

  • CodeCommitA AWS é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.

  • CodePipelineA AWS é um serviço de CI/CD que ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar alterações de software continuamente.

  • A ‭AWS Command Line Interface (AWS CLI)‭ é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

Outras ferramentas

  • cfn_nag é uma ferramenta de código aberto que procura padrões em CloudFormation modelos para identificar possíveis problemas de segurança.

  • git-remote-codecommité um utilitário para enviar e extrair código de CodeCommit repositórios estendendo o Git.

  • O Node.js é um ambiente de tempo de JavaScript execução orientado a eventos projetado para criar aplicativos de rede escaláveis.

Código

O código desse padrão está disponível no repositório de práticas CodePipeline de CI/CD GitHub da AWS.

Práticas recomendadas

Analise os recursos, como políticas do AWS Identity and Access Management (IAM), para confirmar se eles estão alinhados com as melhores práticas organizacionais.

Épicos

TarefaDescriçãoHabilidades necessárias

Instale ferramentas no Linux ou no macOS.

Se você estiver usando macOS ou Linux, poderá instalar as ferramentas executando o seguinte comando no terminal de sua preferência ou usando o Homebrew para Linux.

brew install brew install git-remote-codecommit brew install ruby brew-gem brew-gem install cfn-nag
DevOps engenheiro

Instale ferramentas usando o AWS Cloud9.

Se você estiver usando o AWS Cloud9, instale as ferramentas executando o comando a seguir.

gem install cfn-nag

Observação: o AWS Cloud9 deve ter o Node.js e o npm instalados. Para verificar a instalação ou a versão, execute o comando a seguir.

node -v npm -v
DevOps engenheiro

Configure a AWS CLI.

Para configurar a AWS CLI, use as instruções para seu sistema operacional:

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Faça download ou clonagem do código.

Para obter o código usado por esse padrão, siga um destes procedimentos:

  • Baixe o código-fonte mais recente das versões no GitHub repositório e descompacte o arquivo baixado em uma pasta.

  • Clonagem do projeto executando o seguinte comando:

git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git

Remova o diretório .git do repositório clonado.

cd ./aws-codepipeline-cicd rm -rf ./.git

Posteriormente, você usará um CodeCommit repositório AWS recém-criado como origem remota.

DevOps engenheiro

Conecte-se à conta da AWS.

Você pode se conectar usando um token de segurança temporário ou autenticação de zona de pouso. Para confirmar que você está usando a conta e a região da AWS corretas, execute os comandos a seguir.

AWS_REGION="eu-west-1" ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text) echo "${ACCOUNT_NUMBER}"
DevOps engenheiro

Faça o bootstrap do ambiente.

Para fazer o bootstrap de um ambiente AWS CDK, execute os seguintes comandos:

npm install npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"

Depois de inicializar o ambiente com sucesso, a saída a seguir deve ser exibida.

⏳ Bootstrapping environment aws://{account}/{region}... ✅ Environment aws://{account}/{region} bootstrapped

Para obter mais informações sobre o bootstrapping do AWS CDK, consulte a documentação do AWS CDK.

DevOps engenheiro

Sintetize um modelo.

Para sintetizar um aplicativo do AWS CDK, use o comando cdk synth.

npm run cdk synth

Você verá a saída a seguir.

Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out Supply a stack id (CodePipeline, Dev-MainStack) to display its template.
DevOps engenheiro

Implante a CodePipeline pilha.

Agora que você inicializou e sintetizou o CloudFormation modelo, você pode implantá-lo. A implantação criará o CodePipeline pipeline e um CodeCommit repositório, que serão a fonte e o gatilho do pipeline.

npm run cdk -- deploy CodePipeline --require-approval never

Depois de executar o comando, você deverá ver uma implantação bem-sucedida das informações de CodePipeline pilha e saída. CodePipeline.RepositoryNameFornece o nome do CodeCommit repositório na conta da AWS.

CodePipeline: deploying... CodePipeline: creating CloudFormation changeset... ✅ CodePipeline Outputs: CodePipeline.RepositoryName = SampleRepository Stack ARN: arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID
DevOps engenheiro

Configure o CodeCommit repositório e a ramificação remotos.

Depois de uma implantação bem-sucedida, CodePipeline iniciará a primeira execução do pipeline, que você pode encontrar no CodePipeline console da AWS. Como o AWS CDK e CodeCommit não iniciam uma ramificação padrão, essa execução inicial do pipeline falhará e retornará a seguinte mensagem de erro.

The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null

Para corrigir esse erro, configure uma origem remota como SampleRepository e crie a ramificação main necessária.

RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text) echo "${RepoName}" # git init git branch -m master main git remote add origin codecommit://${RepoName} git add . git commit -m "Initial commit" git push -u origin main
DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Confirme uma alteração para ativar o pipeline.

Depois de uma implantação inicial bem-sucedida, você deve ter um pipeline de CI/CD completo com uma ramificação main para SampleRepository como ramificação de origem. Assim que você confirmar as alterações na ramificação main, o pipeline iniciará e executará a seguinte sequência de ações:

  1. Obtenha seu código do CodeCommit repositório.

  2. Compile seu código.

  3. Atualize o próprio pipeline (UpdatePipeline).

  4. Execute três trabalhos paralelos para verificações de linting, segurança e testes unitários.

  5. Em caso de sucesso, o pipeline implantará a pilha Main para ./lib/main-stack.ts no ambiente de Desenvolvimento.

  6. Execute uma verificação pós-implantação dos recursos implantados. Você pode seguir todas CodePipeline as etapas e resultados no CodePipeline console.

  7. Em caso de sucesso, o pipeline repetirá a implantação e a validação para os ambientes de teste e produção.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Execute o processo de desenvolvimento usando um Makefile.

Você pode executar todo o pipeline localmente usando o comandomake ou pode executar uma etapa individual (por exemplo, make linting).

Para testar o uso de make, execute as seguintes ações:

  • Implemente o pipeline local: make

  • Execute somente o teste de unidade: make unittest

  • Implante na conta atual: make deploy

  • Limpe o meio ambiente: make clean

Desenvolvedor de aplicativos, DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Exclua os recursos do aplicativo AWS CDK.

Para limpar seu aplicativo AWS CDK, execute o comando a seguir.

cdk destroy --all

Esteja ciente de que os buckets do Amazon Simple Storage Service (Amazon S3) criados durante a inicialização não são excluídos automaticamente. Eles precisam de uma política de retenção que permita a exclusão, ou você precisa excluí-los manualmente na sua conta da AWS.

DevOps engenheiro

Solução de problemas

ProblemaSolução

O modelo não está funcionando conforme o esperado.

Se algo der errado e o modelo não estiver funcionando, verifique se você tem o seguinte:

  • As versões adequadas das ferramentas.

  • Acesso à conta de destino da AWS (conectividade de rede).

  • Permissões suficientes para a conta de destino da AWS.

Recursos relacionados