Praticar de graça

🛤️Entenda o AWS CodePipeline

O CodePipeline é a linha de montagem do software: você desenha os estágios uma vez (pegar o código, montar, aprovar, entregar) e cada versão passa por eles na ordem, sozinha. Se um estágio falha, a linha para ali — nada quebrado chega na produção.

Pra que serve

É o que transforma CodeCommit, CodeBuild e CodeDeploy num fluxo só. Sem esteira, alguém roda cada peça à mão e esquece uma; com ela, todo commit percorre o mesmo caminho, com aprovação humana onde precisa e histórico de quem liberou o quê.

Onde se usa no mundo real

Vocabulário

Esteira (pipeline)
a planta: estágios, ações, a role e o bucket de artefatos.
Execução
cada passada de uma versão do código pela esteira, com id próprio.
Estágio e ação
o passo (Source, Build, Deploy) e quem faz o trabalho nele (CodeCommit, CodeBuild, CodeDeploy).
Artefato
o pacote que sai de um estágio e entra no próximo, guardado no bucket da esteira.
Aprovação manual
um estágio que espera uma pessoa aprovar ou rejeitar (put-approval-result).
Transição
a porta entre estágios; fechada, a execução espera em vez de seguir.
💰 Como cobra: A esteira V2 cobra US$ 0,002 por minuto de ação executada, com 100 minutos grátis por mês; a V1 cobra US$ 1 por esteira ativa no mês (uma grátis). O build e o deploy que ela chama são cobrados à parte, cada um no seu serviço. Comparando: CodePipeline x GitHub Actions — os dois orquestram CI/CD; o CodePipeline vive na conta AWS e chama os serviços dela com role do IAM, o Actions vive no repositório.

Comandos que você aprende nesta trilha

Cada um deles roda de verdade no terminal do CLImb, com a mesma saída e as mesmas mensagens de erro que a AWS devolve.

aws codepipeline list-pipelines

USO

aws codepipeline list-pipelines

aws s3 mb

make bucket (criar bucket)

aws s3 mb s3://<nome-do-bucket>

aws codebuild create-project

USO

aws codebuild create-project --name <nome> \
--source type=GITHUB,location=https://github.com/<org>/<repo> \
--artifacts type=NO_ARTIFACTS \
--environment type=LINUX_CONTAINER,image=aws/codebuild/standard:7.0,computeType=BUILD_GENERAL1_SMALL \
--service-role arn:aws:iam::<conta>:role/<role>

aws codepipeline create-pipeline

USO

aws codepipeline create-pipeline --cli-input-json file://<planta>.json

aws codepipeline get-pipeline

USO

aws codepipeline get-pipeline --name <esteira>

aws codepipeline get-pipeline-state

USO

aws codepipeline get-pipeline-state --name <esteira>

aws codepipeline list-pipeline-executions

USO

aws codepipeline list-pipeline-executions --pipeline-name <esteira>

aws codepipeline get-pipeline-execution

USO

aws codepipeline get-pipeline-execution --pipeline-name <esteira> --pipeline-execution-id <id>

aws codepipeline list-action-executions

USO

aws codepipeline list-action-executions --pipeline-name <esteira> [--filter pipelineExecutionId=<id>]

aws codepipeline start-pipeline-execution

USO

aws codepipeline start-pipeline-execution --name <esteira>

aws codepipeline update-pipeline

USO

aws codepipeline update-pipeline --cli-input-json file://<planta>.json

aws codepipeline put-approval-result

USO

aws codepipeline put-approval-result --pipeline-name <esteira> --stage-name <estágio> \
--action-name <ação> --result summary="<motivo>",status=Approved|Rejected --token <token>

aws codepipeline retry-stage-execution

USO

aws codepipeline retry-stage-execution --pipeline-name <esteira> --stage-name <estágio> \
--pipeline-execution-id <id> --retry-mode FAILED_ACTIONS|ALL_ACTIONS

aws codecommit put-file

USO

aws codecommit put-file --repository-name <repo> --branch-name <branch> \
--file-content fileb://<arquivo> --file-path <caminho/no/repo> \
[--parent-commit-id <commit-da-ponta>] [--commit-message <texto>] [--name <autor>] [--email <email>]

aws codebuild batch-get-builds

USO

aws codebuild batch-get-builds --ids <id-do-build> [<id2> ...]

aws codepipeline disable-stage-transition

USO

aws codepipeline disable-stage-transition --pipeline-name <esteira> --stage-name <estágio> \
--transition-type Inbound|Outbound --reason <motivo>

aws codepipeline enable-stage-transition

USO

aws codepipeline enable-stage-transition --pipeline-name <esteira> --stage-name <estágio> --transition-type Inbound|Outbound

aws codepipeline stop-pipeline-execution

USO

aws codepipeline stop-pipeline-execution --pipeline-name <esteira> --pipeline-execution-id <id> [--abandon] [--reason <texto>]

aws codepipeline delete-pipeline

USO

aws codepipeline delete-pipeline --name <esteira>

O que você pratica (35 atividades)

Cada atividade é um pedido de trabalho, do jeito que ele chega no dia a dia — você resolve digitando os comandos, não escolhendo alternativa.

A esteira que falta

O portal do RH já tem repositório (CodeCommit), deploy (CodeDeploy) e o time sabe usar o CodeBuild — mas alguém ainda roda cada peça à mão, e toda sexta uma fica esquecida. Hora da esteira. Veja se já existe alguma pipeline na conta.

O depósito da esteira

A esteira passa o pacote de um estágio pro outro por um bucket do S3 — o artifact store. Pelo CLI ele precisa existir ANTES da esteira. Crie o bucket portal-rh-artefatos.

Leia a planta antes de construir

A planta da esteira já está pronta, no arquivo esteira-portal-rh.json (no trabalho, ela mora no repositório). Leia o arquivo e repare nos três estágios: Source (CodeCommit), Build (CodeBuild) e Deploy (CodeDeploy).

O build que a esteira chama

A planta chama o projeto de build portal-rh-build, que ainda não existe. Crie no CodeBuild com fonte e artefato do tipo CODEPIPELINE (quem entrega o código e recebe o pacote é a esteira), máquina LINUX_CONTAINER com a imagem aws/codebuild/standard:7.0 no tamanho BUILD_GENERAL1_SMALL, e a role arn:aws:iam::123456789012:role/codebuild-servico.

A esteira do portal

Tudo no lugar. Crie a esteira a partir da planta esteira-portal-rh.json. É o marco da trilha: repare que ela já sai rodando.

Nome e versão, em texto

Pro inventário, liste as esteiras trazendo só nome e versão de cada uma, em texto puro.

A planta que ficou valendo

Confira como a AWS guardou a portal-rh-esteira: estágios, ações e o metadata (ARN e datas).

Só os nomes dos estágios

Pra documentação do time, traga só os nomes dos estágios da portal-rh-esteira, na ordem.

Acompanhe a primeira passada

A esteira está rodando desde a criação. Olhe o painel dela — e olhe de novo até os três estágios ficarem Succeeded. Cada olhada avança um estágio.

O painel em uma linha por estágio

O painel completo é grande. Traga só estágio e status de cada um, em texto — o formato que cabe na mensagem do chat.

O histórico da esteira

Liste as execuções da portal-rh-esteira: quando rodou, com que resultado e com qual commit.

Qual commit foi pro ar?

A auditoria pergunta qual versão do código a última execução levou. Consulte a execução pelo id e veja o artifactRevisions.

Só o id do commit

O relatório de mudanças só quer o id do commit que a última execução levou.

O que cada ação chamou

Veja cada ação das execuções da esteira: o externalExecutionId de cada uma é o id do job de verdade — o build no CodeBuild, o deploy no CodeDeploy.

Rode de novo

O time trocou a máquina de build e quer ver a esteira passar de novo, do começo. Dispare uma execução nova da portal-rh-esteira e acompanhe até o fim.

Ninguém vai pra produção sem OK

A gerente quer aprovar cada ida pra produção. A planta nova, esteira-portal-rh-v2.json, tem um estágio Aprovacao entre o build e o deploy (leia com cat se quiser). Aplique a planta nova na esteira.

A esteira esperando a gerente

Rode a esteira e acompanhe até ela parar no estágio Aprovacao. No painel, ache o token do pedido de aprovação.

Aprovado pela gerente

A gerente conferiu a homologação e liberou. Aprove o pedido com o resumo Homologacao conferida.

Chegou na produção?

Depois da aprovação, a esteira seguiu pro deploy. Acompanhe até a execução aprovada terminar.

Hoje não: véspera de feriado

Outra execução chegou na aprovação, mas é véspera de feriado e a gerente não quer deploy hoje. Rode a esteira, acompanhe até a aprovação e rejeite com o resumo Vespera de feriado.

Peça a aprovação de novo

Passou o feriado. Em vez de rodar tudo do zero, repita só o estágio Aprovacao da execução rejeitada — a gerente recebe um pedido novo, com outro token.

Agora pode

Aprove o pedido novo da execução repetida (resumo Liberado apos o feriado) e acompanhe até ela chegar na produção.

O commit que quebrou o build

Um dev trocou o buildspec da main por um com exit 1 (um teste que sempre falha). Reproduza: crie o buildspec.yml com o texto exit 1, grave na main do portal-rh (mensagem Buildspec novo), rode a esteira e acompanhe até ela falhar no Build.

Por que o build quebrou?

A esteira só diz "Build terminated with state: FAILED". Ache o motivo de verdade: liste as ações da execução que falhou, pegue o externalExecutionId do Build e consulte esse build no CodeBuild.

Retry não pega commit novo

O dev corrigiu: grave o buildspec.yml com version: 0.2 na main (mensagem Conserta buildspec). Aí tente o atalho: repita o estágio Build da execução que falhou e acompanhe. Repare no resultado — e no porquê.

Agora sim: commit novo, execução nova

Retry repete o código velho. O código consertado entra com uma execução nova. Rode a esteira, acompanhe até a aprovação, aprove (resumo Build consertado) e acompanhe até a produção.

Congelamento de fim de ano

Dezembro: nada entra em produção até janeiro, mas o time continua fazendo build. Feche a porta de entrada do estágio Deploy com o motivo Congelamento de fim de ano.

A execução espera na porta

Veja o congelamento funcionando: rode a esteira, acompanhe, aprove quando pedir (resumo Pronto pra janeiro) e olhe o painel — a execução fica esperando na porta do Deploy, sem falhar.

Janeiro chegou

Fim do congelamento. Abra a porta do estágio Deploy e acompanhe a execução que estava esperando chegar na produção.

Auditoria na porta da aprovação

A auditoria vai revisar o processo de aprovação amanhã, e até lá nada deve pedir aprovação. Feche a porta de entrada do estágio Aprovacao (motivo Auditoria) e, terminada a auditoria, abra de novo.

Execução disparada por engano

Alguém disparou a esteira sem querer, no meio de um incidente. Dispare pra ver o cenário e pare a execução na hora, abandonando o que estiver rodando.

Parada com motivo registrado

Uma execução chegou na aprovação, mas a versão foi cancelada pelo produto. Rode, acompanhe até a aprovação e pare a execução com --abandon e o motivo Versao cancelada pelo produto. Depois confira no histórico que o motivo ficou registrado.

A aprovação mudou de lugar

O time passou a aprovar no próprio pull request, então o estágio de aprovação saiu da esteira. Volte a esteira pra planta original, esteira-portal-rh.json, e confira a versão.

O rascunho que sobrou

Alguém criou uma esteira de teste a partir do esteira-rascunho.json e esqueceu. Crie pra ver o cenário e apague a portal-rh-rascunho.

A esteira da intranet antiga

Existe uma planta velha, esteira-intranet.json, da intranet que foi desligada. Crie a esteira, olhe o painel e descubra por que ela falha logo no primeiro estágio. Depois, apague a intranet-esteira.

Continue por aqui

Ler explica. Digitar fixa. No CLImb você roda os comandos de verdade num terminal AWS simulado — o estado persiste entre eles, como na nuvem real.

As 3 primeiras atividades desta trilha são abertas; o resto faz parte do plano Pro.

Começar — 3 atividades grátis
Todas as lições · Instalar a AWS CLI · Comandos básicos · Erros comuns · Praticar no terminal · Sobre