Tutorial: Compilar e enviar por push uma imagem do Docker para o Amazon ECR com o CodePipeline (tipo V2) - AWS CodePipeline

Tutorial: Compilar e enviar por push uma imagem do Docker para o Amazon ECR com o CodePipeline (tipo V2)

Este tutorial ajuda você a criar uma ação de compilação no CodePipeline que vai executar e enviar por push a imagem do Docker para o Amazon ECR depois de uma alteração feita no código-fonte. Este tutorial também mostra como adicionar uma ação de implantação do Amazon ECS que implanta a imagem enviada por push.

Importante

Como parte da criação de um pipeline no console, um bucket de artefatos do S3 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.

nota

Este tutorial é para a ação de compilação ECRBuildAndPublish de um pipeline do CodePipeline com um repositório de origem do GitHub e uma ação padrão do Amazon ECS para implantação em um cluster do Amazon ECS. Para um tutorial que usa um pipeline com um repositório de imagens ECR como a ação de implantação azul/verde do Amazon ECS no CodeDeploy no CodePipeline, consulte Tutorial: Criar um pipeline com a origem do Amazon ECR e a implantação do ECS para CodeDeploy.

Importante

Essa ação usa a computação do CodeBuild gerenciada pelo CodePipeline para executar comandos em um ambiente de compilação. A execução da ação Comandos incorrerá em cobranças separadas no AWS CodeBuild.

Pré-requisitos

Para você usar este tutorial para criar seu pipeline de CD, alguns recursos precisam estar em operação. Veja aqui estão os itens que você precisa para começar:

nota

Todos esses recursos devem ser criados na mesma região da AWS.

  • Um repositório do controle de origem (este tutorial usa o GitHub) no qual você adicionará o seguinte para este tutorial:

    • Na Etapa 1, você adicionará um Dockerfile de amostra ao repositório de origem como o artefato de entrada da ação de compilação ECRBuildAndPublish no CodePipeline.

    • Na Etapa 2, você adicionará um arquivo imagedefinitions.json de amostra ao repositório de origem como um requisito para a ação de implantação padrão do Amazon ECS no CodePipeline.

  • Um repositório de imagens do Amazon ECR que contém uma imagem compilada por você a partir do Dockerfile. Para obter mais informações, consulte Criação de um repositório e Envio de uma imagem por push no Guia do usuário do Amazon Elastic Container Registry.

  • Um cluster e um serviço do Amazon ECS criados na mesma região do repositório de imagens. Para obter mais informações, consulte Criação de um cluster e Criação de um serviço no Guia do desenvolvedor do Amazon Elastic Container Service.

Assim que você atender a esses pré-requisitos, poderá continuar com o tutorial e criar seu pipeline de CD.

Etapa 1: Adicionar um Dockerfile ao repositório de origem

Este tutorial usa a ação ECRBuildAndPublish para compilar a imagem do Docker e enviá-la por push ao Amazon ECR. A ação de computação gerenciada no CodePipeline usa o CodeBuild a fim de executar os comandos de login do ECR e envio por push de imagem. Você não precisa adicionar um arquivo buildspec.yml ao repositório de código-fonte para informar o CodeBuild como fazer isso. Você só fornece o Dockerfile no repositório da mesma forma que faz para este exemplo.

Cole esse texto de amostra para criar o arquivo Dockerfile. Este Dockerfile de amostra é o mesmo da amostra usada nas instruções de imagem do ECR nos pré-requisitos.

FROM public.ecr.aws/amazonlinux/amazonlinux:latest # Install dependencies RUN yum update -y && \ yum install -y httpd # Install apache and write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure apache RUN echo 'mkdir -p /var/run/httpd' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/httpd' >> /root/run_apache.sh && \ echo '/usr/sbin/httpd -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh
Para adicionar um arquivo Dockerfile ao repositório de origem
  1. Abra um editor de texto e, em seguida, copie e cole o Dockerfile acima em um novo arquivo.

  2. Confirme e envie o arquivo Dockerfile para o repositório de origem.

    1. Adicione o arquivo.

      git add .
    2. Confirme a alteração.

      git commit -m "Adding Dockerfile."
    3. Envie a confirmação.

      git push

    Não se esqueça de colocar o arquivo no nível raiz do repositório.

    / Dockerfile

Etapa 2: Adicionar um arquivo imagedefinitions.json ao repositório de origem

Este tutorial usa a ação de implantação padrão do Amazon ECS no CodePipeline para implantar o contêiner no cluster do Amazon ECS. A ação de implantação padrão do Amazon ECS exige um arquivo imagedefinitions.json contendo o nome e o URI da imagem. Para obter mais informações sobre o arquivo imagedefinitions.json, consulte Arquivo imagedefinitions.json para ações de implantação padrão do Amazon ECS.

Cole esse texto de amostra para criar o arquivo imagedefinitions.json. Use o nome no Dockerfile, como hello-world, e use o URI do repositório do Amazon ECR onde a imagem está armazenada.

[ { "name": "hello-world", "imageUri": "ACCOUNT-ID.dkr.ecr.us-east-1.amazonaws.com/actions/image-repo" } ]
Para adicionar um arquivo imagedefinitions.json ao repositório de origem
  1. Abra um editor de texto e, em seguida, copie e cole o exemplo acima em um novo arquivo.

  2. Confirme e envie o arquivo imagedefinitions.json para o repositório de origem.

    1. Adicione o arquivo.

      git add .
    2. Confirme a alteração.

      git commit -m "Adding imagedefinitions.json."
    3. Envie a confirmação.

      git push

    Não se esqueça de colocar o arquivo no nível raiz do repositório.

    / imagedefinitions.json

Etapa 3: Criação do pipeline

Use o assistente do CodePipeline para criar os estágios de pipeline e conectar o repositório de origem.

Para criar o pipeline
  1. Abra o console do CodePipeline em https://console.aws.amazon.com/codesuite/codepipeline/.

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

  3. 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.

  4. Em Etapa 2: Escolher as configurações do pipeline, em Nome do pipeline, insira MyPipeline.

  5. 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.

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

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

  8. Na página Etapa 3: Adicionar etapa de origem, adicione uma etapa de origem:

    1. Em Provedor de origem, escolha GitHub (por meio do aplicativo do GitHub).

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

    3. Em Nome do repositório, selecione o nome do seu repositório do GitHub.

    4. Em Ramificação padrão, selecione a ramificação que você deseja especificar quando o pipeline é iniciado manualmente ou com um evento de origem que não seja uma tag do Git. Se a origem da alteração não for o gatilho ou se a execução de um pipeline tiver sido iniciada manualmente, a alteração usada será a confirmação HEAD da ramificação padrão.

    Escolha Próximo.

  9. Na página Etapa 4: Adicionar etapa de compilação, escolha Outros fornecedores de compilação, escolha ECRBuildAndPublish.

    Adicione uma ação de compilação do Amazon ECR ao pipeline.
    1. Para Nome do repositório do ECR, escolha o repositório de imagens.

    2. Escolha Próximo.

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

    Escolha Próximo.

  11. Na página Etapa 6: Adicionar etapa de implantação, escolha Ignorar etapa de implantação. Você adicionará a ação do ECS na etapa a seguir.

  12. Na página Step 7: Review, revise a configuração do pipeline e escolha Create pipeline para criá-lo.

  13. Edite o pipeline para adicionar a ação de implantação do Amazon ECS ao pipeline:

    1. No canto superior direito, escolha Edit (Editar).

    2. Na parte inferior do diagrama, escolha + Add stage (+ Adicionar estágio). Em Nome do estágio, insira um nome, como Deploy.

    3. Escolha + Add action group (Adicionar grupo de ação).

    4. Em Nome da ação, insira um nome.

    5. Em Provedor de ação, escolha Amazon ECR. Permita que Region (Região) seja definida para a região do pipeline.

    6. Em Artefatos de entrada, escolha o artefato do estágio de origem, como SourceArtifact.

    7. Em Nome do cluster, escolha o cluster do Amazon ECS no qual o serviço está em execução.

    8. Para Nome do serviço, escolha o serviço a ser atualizado.

    9. Escolha Salvar.

    10. No estágio que está editando, escolha Done (Concluído). No painel do AWS CodePipeline, escolha Save (Salvar) e selecione Save (Salvar) na mensagem de aviso.

    11. Para enviar suas alterações e iniciar uma compilação do pipeline, selecione Liberar alteração e, depois, Liberar.

  14. Depois que o pipeline for executado, exiba a estrutura e o status do pipeline.

    Um diagrama de console mostrando uma execução bem-sucedida do pipeline com a ação de implantação do Amazon ECS adicionada ao pipeline.
  15. Depois que o pipeline for executado com êxito, escolha Visualizar detalhes para exibir os logs na ação a fim de exibir a saída da ação da computação gerenciada.

    Exiba logs da ação de implantação do Amazon ECR no pipeline.
  16. Solucione o problema de qualquer falha. Por exemplo, a ação de implantação do ECS poderá falhar se o arquivo imagedefinitions.json não estiver no repositório de origem. Este é um exemplo da mensagem de erro exibida quando o arquivo imagedefinitions.json não é encontrado.

    Exiba logs da ação de implantação do Amazon ECR no pipeline.

Etapa 4: Testar o pipeline

O pipeline deve ter tudo para realizar uma implantação contínua de ponta a ponta nativa da AWS. Agora, teste a funcionalidade enviando uma alteração de código ao repositório de origem.

Para testar o pipeline
  1. Faça uma alteração no código no repositório de origem configurado, confirme e envie a alteração.

  2. Abra o console do CodePipeline em https://console.aws.amazon.com/codesuite/codepipeline/.

  3. Escolha o pipeline na lista.

  4. Observe a evolução do pipeline pelos respectivos estágios. O pipeline deve ser concluído e a ação, enviar por push a imagem do Docker que foi criada a partir da alteração do código.