Tutorial: Criar um pipeline de quatro estágios - AWS CodePipeline

Tutorial: Criar um pipeline de quatro estágios

Agora que criou o primeiro pipeline em Tutorial: Criar um pipeline simples (bucket do S3) ou Tutorial: Criar um pipeline simples (repositório do CodeCommit), você pode começar a criar pipelines mais complexos. Este tutorial orientará você na criação de um pipeline de quatro estágios que use um repositório do GitHub para a origem, um servidor de compilação Jenkins para compilar o projeto e uma aplicação do CodeDeploy para implantar o código criado em um servidor de preparação. O diagrama a seguir mostra o pipeline inicial de três estágios.

Um diagrama mostrando o estágio de origem com a ação de origem, um estágio de compilação com a ação do Jenkins e um estágio de implantação com a ação de implantação.

Após a criação do pipeline, você o editará para adicionar um estágio com uma ação de teste para testar o código, também usando Jenkins.

Antes de criar esse pipeline, você deve configurar os recursos necessários. Por exemplo, se você quiser usar um repositório GitHub para o código-fonte, você deverá criar o repositório antes de adicioná-lo ao pipeline. Como parte da configuração, este tutorial orienta você a configurar o Jenkins em uma instância do EC2 para fins de demonstração.

Importante

Muitas das ações adicionadas ao pipeline neste procedimento envolvem recursos da AWS que você precisa criar antes do pipeline. Os recursos da AWS para as ações de origem sempre devem ser criados na mesma região da AWS na qual o pipeline será criado. Por exemplo, se você criar o pipeline na região Leste dos EUA (Ohio), o repositório do CodeCommit deverá estar na região Leste dos EUA (Ohio).

Você pode adicionar ações entre regiões ao criar seu pipeline. Os recursos da AWS para ações entre regiões devem estar na mesma região da AWS em que você planeja executar a ação. Para obter mais informações, consulte Adicionar uma ação entre regiões no CodePipeline.

Importante

Como parte da criação de um pipeline, um bucket de artefatos do S3 fornecido pelo cliente será usado pelo CodePipeline para artefatos. (Este bucket não é o mesmo utilizado para uma ação de origem do S3.) Se o bucket de artefatos do S3 estiver em uma conta diferente da conta do pipeline, garanta que o bucket de artefatos do S3 seja de propriedade de Contas da AWS seguras e confiáveis.

Antes de iniciar este tutorial, você já deve ter concluído os pré-requisitos gerais em Conceitos básicos do CodePipeline.

Etapa 1: Concluir os pré-requisitos

Para integrar-se ao Jenkins, o AWS CodePipeline exige a instalação do Plugin do CodePipeline em todas as instâncias do Jenkins que você deseja usar com o CodePipeline. Também é necessário configurar um usuário ou um perfil do IAM dedicado para usar as permissões entre o projeto do Jenkins e o CodePipeline. A maneira mais fácil de integrar o Jenkins e o CodePipeline é instalar o Jenkins em uma instância do EC2 que use um perfil de instância do IAM criado para a integração com o Jenkins. Para a conexão dos links no pipeline das ações do Jenkins ocorrer com êxito, é necessário definir as configurações de proxy e firewall no servidor ou na instância do EC2 para permitir conexões de entrada na porta usada pelo projeto do Jenkins. Verifique se você configurou o Jenkins para autenticar usuários e aplicar o controle de acesso antes de permitir conexões nessas portas (por exemplo, 443 e 8443 se você fixou Jenkins para usar somente conexões HTTPS, ou 80 e 8080 se você permite conexões HTTP). Para obter mais informações, consulte Como fixar Jenkins.

nota

Este tutorial usa uma amostra de código e configura as etapas de criação que convertem a amostra de Haml em HTML. Faça download do exemplo de código aberto do repositório GitHub seguindo as etapas em Copiar ou reproduzir a amostra em um repositório GitHub. Você precisará da amostra inteira no repositório GitHub, não apenas do arquivo .zip.

Este tutorial também pressupõe que:

  • Você está familiarizado com a instalação e administração do Jenkins e com a criação de projetos do Jenkins.

  • Você instalou o Rake e o gem de Haml para Ruby no mesmo computador ou instância que hospeda o projeto do Jenkins.

  • Você definiu as variáveis do ambiente do sistema exigidas para que os comandos do Rake possam ser executados do terminal ou da linha de comando (por exemplo, em sistemas Windows, alterar a variável PATH para incluir o diretório em que o Rake está instalado).

Copiar ou reproduzir a amostra em um repositório GitHub

Como clonar a amostra e enviá-la para um repositório GitHub
  1. Faça o download do código de exemplo a partir do repositório GitHub ou clone os repositórios para o seu computador local. Há dois pacotes de amostra:

  2. No repositório, selecione Fork para clonar a amostra do repositório em um repositório na sua conta do Github. Para mais informações, consulte a Documentação do GitHub.

Criar um perfil do IAM a ser usado na integração do Jenkins

Como prática recomendada, inicie uma instância do EC2 para hospedar o servidor Jenkins e use um perfil do IAM para conceder à instância as permissões necessárias para interagir com o CodePipeline.

  1. Faça login no Console de gerenciamento da AWS e abra o console do IAM, em https://console.aws.amazon.com/iam/.

  2. No painel de navegação do console do IAM, selecione Perfis e, depois, Criar perfil.

  3. Em Select type of trusted entity (Selecionar o tipo de entidade confiável), escolha AWS service (Serviço da AWS). Em Choose the service that will use this role (Escolha o serviço que usará essa função), escolha EC2. Em Select your use case (Selecione seu caso de uso), escolha EC2.

  4. Escolha Próximo: Permissões. Na página Attach permissions policies (Anexar políticas de permissões), selecione a política gerenciada AWSCodePipelineCustomActionAccess e escolha Next: Tags (Próximo: tags). Escolha Próximo: revisar.

  5. Na página Revisar em Nome do perfil, insira o nome do perfil a ser criado especificamente para integração do Jenkins (por exemplo JenkinsAccess) e selecione Criar perfil.

Ao criar a instância do EC2 em que você instalará o Jenkins, em Etapa 3: Configurar os detalhes da instância, selecione o perfil da instância (por exemplo, JenkinsAccess).

Para obter mais informações sobre os perfis de instância e o Amazon EC2, consulte Funções do IAM para Amazon EC2, Uso de uma função do IAM para conceder permissões a aplicações em execução em instâncias do Amazon EC2 e Criar uma função para delegar permissões a um AWS service (Serviço da AWS).

Instalar e configurar o Jenkins e o Plug-in do CodePipeline para Jenkins

Como instalar o Jenkins e o Plug-in do CodePipeline para Jenkins
  1. Crie uma instância do EC2 em que você instalará o Jenkins e, em Etapa 3: Configurar os detalhes da instância, selecione o perfil da instância que você criou (por exemplo, JenkinsAccess). Para obter mais informações sobre a criação de instâncias do EC2, consulte Launch an Amazon EC2 instance no Guia do usuário do Amazon EC2.

    nota

    Se você já tem recursos do Jenkins que deseja utilizar, pode usá-los, mas deve criar um usuário especial do IAM, aplicar a política gerenciada AWSCodePipelineCustomActionAccess a esse usuário e, depois, configurar e usar as credenciais de acesso para esse usuário no recurso do Jenkins. Se deseja utilizar a IU Jenkins para fornecer as credenciais, configure o Jenkins para permitir apenas HTTPS. Para obter mais informações, consulte Solução de problemas do CodePipeline.

  2. Instale o Jenkins na instância do EC2. Para obter mais informações, consulte a documentação do Jenkins para instalar o Jenkins e iniciar e acessar o Jenkins, assim como details of integration with Jenkins em Integrações de produtos e serviços com o CodePipeline.

  3. Inicie o Jenkins e, na página inicial, selecione Gerenciar Jenkins.

  4. Na página Gerenciar Jenkins, selecione Gerenciar plug-ins.

  5. Selecione a guia Available (Disponível) e, na caixa de pesquisa Filter (Filtro), insira AWS CodePipeline. Selecione Plug-ins do CodePipeline para Jenkins na lista e Baixar agora e instalar após reiniciar.

  6. Na página Instalar plug-ins/atualizações, selecione Reiniciar Jenkins quando a instalação estiver concluída e nenhum trabalho estiver em execução.

  7. Selecione Voltar para o painel.

  8. Na página principal, selecione Novo item.

  9. Em Nome do item, insira um nome para o projeto do Jenkins (por exemplo, MyDemoProject). Selecione Projeto estilo livre e depois OK.

    nota

    Verifique se o nome do projeto atende aos requisitos do CodePipeline. Para obter mais informações, consulte Cotas no AWS CodePipeline..

  10. Na página de configuração do projeto, selecione a caixa de seleção Executar construções simultâneas se necessário. Em Source Code Management (Gerenciamento de código-fonte), selecione AWS CodePipeline. Se você instalou o Jenkins em uma instância do EC2 e configurou a AWS CLI com o perfil para o usuário do IAM criado para a integração entre o CodePipeline e o Jenkins, deixe todos os outros campos em branco.

  11. Selecione Avançado e, em Provedor, insira um nome para o provedor da ação que será exibido no CodePipeline (por exemplo, MyJenkinsProviderName). Certifique-se de que esse nome seja exclusivo e fácil de lembrar. Você o utilizará quando adicionar uma ação de construção para o pipeline mais adiante neste tutorial e novamente quando adicionar uma ação de teste.

    nota

    Este nome de ação deve atender aos requisitos de nomenclatura para ações no CodePipeline. Para obter mais informações, consulte Cotas no AWS CodePipeline..

  12. Em Construir triggers, desmarque todas as caixas de seleção e depois selecione Apurar SCM. Em Schedule (Programação), insira cinco asteriscos separados por espaços, conforme a seguir:

    * * * * *

    Isso pesquisa o CodePipeline a cada minuto.

  13. Em Construir, selecione Adicionar etapa da construção. Selecione Executar shell (Amazon Linux, RHEL ou Ubuntu Server) Executar comando em lote (Windows Server) e, depois, digite o seguinte:

    rake
    nota

    Verifique se o ambiente está configurado com as variáveis e as configurações necessárias para executar rake; caso contrário, a construção falhará.

  14. Selecione Adicionar ação pós-criação e depois AWS CodePipeline Publisher. Selecione Adicionar, e em Criar pontos de saída, deixe o local em branco. Esta configuração é o padrão. Ela criará um arquivo compactado no final do processo de construção.

  15. Selecione Salvar para salvar seu projeto Jenkins.

Etapa 2: criar um pipeline no CodePipeline

Nesta parte do tutorial, você criará o pipeline usando o assistente Create Pipeline (Criar pipeline).

Para criar um processo de liberação automatizada do CodePipeline
  1. Faça login no Console de gerenciamento da AWS e abra o console do CodePipeline em http://console.aws.amazon.com/codesuite/codepipeline/home.

  2. Se necessário, use o seletor de região para alterar a região para aquela em que os recursos do pipeline estão localizados. Por exemplo, se você criou recursos para o tutorial anterior em us-east-2, verifique se o seletor de região está definido como Leste dos EUA (Ohio).

    Para obter mais informações sobre as regiões e os endpoints disponíveis para o CodePipeline, consulte Endpoints e cotas do AWS CodePipeline.

  3. Na página Welcome (Bem-vindo), Getting started (Conceitos básicos) ou Pipelines, selecione Create pipeline (Criar pipeline).

  4. Na página Etapa 1: Escolher opção de criação, em Opções de criação, selecione a opção Criar pipeline personalizado. Escolha Próximo.

  5. Em Etapa 2: escolher a página de configurações do pipeline, em Nome do pipeline, insira o nome do seu pipeline.

  6. O CodePipeline disponibiliza pipelines dos tipos V1 e V2, que apresentam características e custos diferentes. O tipo V2 é o único tipo que você pode escolher no console. Para ter mais informações, consulte Pipeline types. Para obter informações sobre preços do CodePipeline, consulte Preços.

  7. Em Perfil de serviço, escolha Novo perfil de serviço para permitir que o CodePipeline crie um perfil de serviço no IAM.

  8. Deixe as configurações em Advanced settings (Configurações avançadas) como padrão e escolha Next (Próximo).

  9. Na página Etapa 3: Adicionar etapa de origem, em Provedor de origem, escolha GitHub.

  10. Em Conexão, escolha uma conexão existente ou crie uma nova. Para criar ou gerenciar uma conexão para sua ação de origem do GitHub, consulte Conexões do GitHub.

  11. Em Etapa 4: adicionar estágio de compilação, escolha Adicionar Jenkins. Em Nome do provedor, insira o nome da ação que você forneceu no CodePipeline Plugin for Jenkins (por exemplo, MyJenkinsProviderName). Esse nome deve corresponder exatamente ao nome no CodePipeline Plugin for Jenkins. Em Server URL (URL do servidor), digite o URL da instância do EC2 onde Jenkins está instalado. Em Project name (Nome do projeto), insira o nome do projeto criado no Jenkins, como MyDemoProject e escolha Next (Próximo).

  12. Em Etapa 5: Adicionar etapa de teste, escolha Ignorar etapa de teste e aceite a mensagem de aviso escolhendo Ignorar novamente.

    Escolha Próximo.

  13. Em Etapa 6: Adicionar estágio de implantação, reutilize o aplicativo do CodeDeploy e o grupo de implantação que você criou em Tutorial: Criar um pipeline simples (bucket do S3). Em Deploy provider, escolha CodeDeploy. Em Application name (Nome do aplicativo), insira CodePipelineDemoApplication ou selecione o botão de atualização e selecione o nome do aplicativo na lista. Em Deployment group (Grupo de implantação), insira CodePipelineDemoFleet ou selecione-o na lista e selecione Next (Próximo).

    nota

    É possível usar seus próprios recursos CodeDeploy ou criar outros recursos, mas isso pode gerar custos adicionais.

  14. Em Etapa 7: Revisar, revise as informações e, então selecione Criar pipeline.

  15. O pipeline inicia automaticamente e executa a amostra através do pipeline. É possível visualizar o andamento e as mensagens de êxito e falha à medida que o pipeline cria a amostra Haml para HTML e implanta uma página da web para cada uma das instâncias do Amazon EC2 na implantação do CodeDeploy.

Etapa 3: Adicionar outro estágio ao pipeline

Agora, você adicionará um estágio de teste e uma ação de teste a esse estágio que use o teste do Jenkins incluído na amostra para determinar se a página da web tem algum conteúdo. Esse teste é apenas para fins de demonstração.

nota

Se não quiser adicionar outro estágio ao pipeline, você poderá adicionar uma ação de teste ao estágio Preparação do pipeline, antes ou depois da ação de implantação.

Adicionar um estágio de teste ao pipeline

Procurar o endereço IP de uma instância

Para verificar o endereço IP de uma instância onde você implantou seu código
  1. Após a exibição do status Bem-sucedido para o pipeline, na área do status para o estágio Staging, selecione Detalhes.

  2. Na seção Detalhes da implantação, em ID da instância, selecione a ID da instância de uma das instâncias implantadas com êxito.

  3. Copie o endereço IP da instância (por exemplo, 192.168.0.4). Você usará esse endereço IP em seu teste Jenkins.

Criar um projeto do Jenkins para testar a implantação

Para criar o projeto Jenkins
  1. Na instância onde você instalou o Jenkins, abra Jenkins e, na página principal, selecione Novo item.

  2. Em Item Name (Nome do item), insira um nome para o projeto Jenkins (por exemplo, MyTestProject). Selecione Projeto estilo livre e depois OK.

    nota

    Verifique se o nome do projeto atende aos requisitos do CodePipeline. Para obter mais informações, consulte Cotas no AWS CodePipeline..

  3. Na página de configuração do projeto, selecione a caixa de seleção Executar construções simultâneas se necessário. Em Source Code Management (Gerenciamento de código-fonte), selecione AWS CodePipeline. Se você instalou o Jenkins em uma instância do EC2 e configurou a AWS CLI com o perfil do usuário do IAM que você criou para a integração entre o CodePipeline e o Jenkins, deixe todos os outros campos em branco.

    Importante

    Se você estiver configurando um projeto do Jenkins, e ele não estiver instalado em uma instância do Amazon EC2 ou estiver instalado em uma instância do EC2 que está executando um sistema operacional Windows, preencha os campos conforme exigido pelas configurações da porta e o host do proxy e forneça as credenciais do usuário ou do perfil do IAM configurado para integração entre o Jenkins e o CodePipeline.

  4. Selecione Avançado e, em Categoria, selecione Testar.

  5. Em Provider (Provedor), insira o mesmo nome que você usou para o projeto de compilação (por exemplo, MyJenkinsProviderName). Você usará esse nome quando adicionar a ação de teste ao seu pipeline mais adiante neste tutorial.

    nota

    Este nome deve atender aos requisitos de nomenclatura do CodePipeline para ações. Para obter mais informações, consulte Cotas no AWS CodePipeline..

  6. Em Construir triggers, desmarque todas as caixas de seleção e depois selecione Apurar SCM. Em Schedule (Programação), insira cinco asteriscos separados por espaços, conforme a seguir:

    * * * * *

    Isso pesquisa o CodePipeline a cada minuto.

  7. Em Construir, selecione Adicionar etapa da construção. Se você estiver implantando em instâncias do Amazon Linux, do RHEL ou do Ubuntu Server, selecione Executar shell. Insira o seguinte, onde o endereço IP é o endereço da instância do EC2 que você copiou anteriormente:

    TEST_IP_ADDRESS=192.168.0.4 rake test

    Se você estiver implantando em instâncias do Windows Server, selecione Executar comando em lote e insira o seguinte, em que o endereço IP é o endereço da instância do EC2 que você copiou anteriormente:

    set TEST_IP_ADDRESS=192.168.0.4 rake test
    nota

    O teste assume uma porta padrão de 80. Se você deseja especificar uma porta diferente, adicione uma instrução de porta de teste, conforme a seguir:

    TEST_IP_ADDRESS=192.168.0.4 TEST_PORT=8000 rake test
  8. Selecione Adicionar ação pós-compilação e, depois, AWS CodePipeline Publisher. Não selecione Adicionar.

  9. Selecione Salvar para salvar seu projeto Jenkins.

Criar um quarto estágio

Para adicionar um estágio ao seu pipeline que inclui a ação de teste Jenkins
  1. Faça login no Console de gerenciamento da AWS e abra o console do CodePipeline em http://console.aws.amazon.com/codesuite/codepipeline/home.

  2. Em Nome, selecione o nome do pipeline que você criou, MySecondPipeline.

  3. Na página de detalhes do pipeline, selecione Editar.

  4. Na página Edit (Editar), selecione + Stage (Estágio) para adicionar um estágio imediatamente após o estágio de compilação.

  5. No campo de nome para o novo estágio, insira um nome (por exemplo, Testing) e escolha + Add action group (+ Adicionar grupo de ações).

  6. Em Action name (Nome da ação), insira MyJenkinsTest-Action. Em Provedor do teste, selecione o nome do provedor que você especificou em Jenkins (por exemplo, MyJenkinsProviderName). Em Project name (Nome do projeto), insira o nome do projeto criado em Jenkins (por exemplo, MyTestProject). Em Input artifacts (Artefatos de entrada), escolha o artefato da compilação Jenkins cujo nome padrão é BuildArtifact e selecione Done (Concluído).

    nota

    Como a ação de teste do Jenkins é executada no aplicativo criado na etapa de compilação do Jenkins, use o artefato de compilação para o artefato de entrada na ação de teste.

    Para obter mais informações sobre artefatos de entrada e saída e a estrutura de pipelines, consulte Referência da estrutura do pipeline do CodePipeline.

  7. Na página Editar, selecione Salvar alterações do pipeline. Na caixa de diálogo da opção Salvar alterações do pipeline, selecione Salvar e continuar.

  8. Embora o novo estágio tenha sido adicionado ao seu pipeline, um status de Ainda não executado é exibido para o estágio, pois nenhuma alteração acionou outra execução do pipeline. Para executar a amostra por meio do pipeline revisado, na página de detalhes do pipeline, selecione Lançar alteração.

    A visualização do pipeline exibe os estágios e ações em seu pipeline e o estado da revisão em execução através desses quatro estágios. O tempo necessário para que o pipeline seja executado por todos os estágios dependerá do tamanho dos artefatos, da complexidade de sua construção ações de teste, além de outros fatores.

Etapa 4: Limpar os recursos

Após concluir este tutorial, você deverá excluir o pipeline e os recursos usados para não ser cobrado pelo uso contínuo desses recursos. Se você não pretende continuar usando o CodePipeline, exclua-o, depois, a aplicação do CodeDeploy e as instâncias do Amazon EC2 associadas e, por último, o bucket do Amazon S3 usado para armazenar os artefatos. Caso não pretenda continuar usando os outros recursos, como o repositório GitHub, pode ser uma boa ideia apagá-los também.

Para limpar os recursos usados neste tutorial
  1. Abra uma sessão de terminal em sua máquina Linux, macOS ou Unix local ou um prompt de comando em sua máquina Windows local e execute o comando delete-pipeline para excluir o pipeline que você criou. Em MySecondPipeline, insira o seguinte comando:

    aws codepipeline delete-pipeline --name "MySecondPipeline"

    Esse comando não retorna nada.

  2. Para limpar os recursos do CodeDeploy, siga as instruções em Limpeza.

  3. Para limpar os recursos de sua instância, exclua a instância do EC2 onde você instalou o Jenkins. Para obter mais informações, consulte Limpeza da sua instância.

  4. Se você não pretende criar mais pipelines ou usar o CodePipeline novamente, exclua o bucket do Amazon S3 usado para armazenar artefatos para seu pipeline. Para excluir o bucket, siga as instruções em Excluir um bucket.

  5. Se você não pretende usar a outros recursos para esse pipeline novamente, considere excluí-los, seguindo as orientações para esse recurso específico. Por exemplo, se você deseja excluir o repositório GitHub, siga as instruções em Excluir um repositório no site GitHub.