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
-
Abra um editor de texto e, em seguida, copie e cole o Dockerfile acima em um novo arquivo.
-
Confirme e envie o arquivo
Dockerfilepara o repositório de origem.-
Adicione o arquivo.
git add . -
Confirme a alteração.
git commit -m "Adding Dockerfile." -
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
-
Abra um editor de texto e, em seguida, copie e cole o exemplo acima em um novo arquivo.
-
Confirme e envie o arquivo
imagedefinitions.jsonpara o repositório de origem.-
Adicione o arquivo.
git add . -
Confirme a alteração.
git commit -m "Adding imagedefinitions.json." -
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
Abra o console do CodePipeline em https://console.aws.amazon.com/codesuite/codepipeline/
. -
Na página Welcome (Bem-vindo), Getting started (Conceitos básicos) ou Pipelines, selecione Create pipeline (Criar pipeline).
-
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.
-
Em Etapa 2: Escolher as configurações do pipeline, em Nome do pipeline, insira
MyPipeline. -
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
. -
Em Perfil de serviço, selecione Novo perfil de serviço para permitir que o CodePipeline crie um perfil de serviço no IAM.
-
Deixe as configurações em Advanced settings (Configurações avançadas) como padrão e escolha Next (Próximo).
-
Na página Etapa 3: Adicionar etapa de origem, adicione uma etapa de origem:
-
Em Provedor de origem, escolha GitHub (por meio do aplicativo do GitHub).
-
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.
-
Em Nome do repositório, selecione o nome do seu repositório do GitHub.
-
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.
-
-
Na página Etapa 4: Adicionar etapa de compilação, escolha Outros fornecedores de compilação, escolha ECRBuildAndPublish.
-
Para Nome do repositório do ECR, escolha o repositório de imagens.
-
Escolha Próximo.
-
-
Em Etapa 5: Adicionar etapa de teste, escolha Ignorar etapa de teste e aceite a mensagem de aviso escolhendo Ignorar novamente.
Escolha Próximo.
-
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.
-
Na página Step 7: Review, revise a configuração do pipeline e escolha Create pipeline para criá-lo.
-
Edite o pipeline para adicionar a ação de implantação do Amazon ECS ao pipeline:
-
No canto superior direito, escolha Edit (Editar).
-
Na parte inferior do diagrama, escolha + Add stage (+ Adicionar estágio). Em Nome do estágio, insira um nome, como
Deploy. -
Escolha + Add action group (Adicionar grupo de ação).
-
Em Nome da ação, insira um nome.
-
Em Provedor de ação, escolha Amazon ECR. Permita que Region (Região) seja definida para a região do pipeline.
-
Em Artefatos de entrada, escolha o artefato do estágio de origem, como
SourceArtifact. -
Em Nome do cluster, escolha o cluster do Amazon ECS no qual o serviço está em execução.
-
Para Nome do serviço, escolha o serviço a ser atualizado.
-
Escolha Salvar.
-
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.
-
Para enviar suas alterações e iniciar uma compilação do pipeline, selecione Liberar alteração e, depois, Liberar.
-
-
Depois que o pipeline for executado, exiba a estrutura e o status do pipeline.
-
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.
-
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.
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
-
Faça uma alteração no código no repositório de origem configurado, confirme e envie a alteração.
Abra o console do CodePipeline em https://console.aws.amazon.com/codesuite/codepipeline/
. -
Escolha o pipeline na lista.
-
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.