<h2>Entendendo a Tríade CI/CD da AWS</h2>
<p>A integração contínua e deployment contínuo (CI/CD) é a espinha dorsal do desenvolvimento moderno. A AWS oferece três serviços nativos que funcionam em conjunto: CodeCommit (repositório), CodeBuild (compilação e testes) e CodeDeploy (entrega em produção). Eles formam um pipeline completo onde mudanças de código disparam automaticamente todo o ciclo de validação e entrega. Diferente de ferramentas terceiras como GitHub Actions ou GitLab CI, esses serviços integram-se profundamente com o ecossistema AWS, oferecendo segurança, escalabilidade e custos previsíveis.</p>
<h3>O que cada serviço faz</h3>
<p><strong>CodeCommit</strong> é um repositório Git gerenciado (equivalente ao GitHub, mas nativo AWS). <strong>CodeBuild</strong> executa compilações, testes e análises estáticas em contêineres isolados. <strong>CodeDeploy</strong> orquestra o lançamento do código em instâncias EC2, on-premises ou Lambda. Juntos, eles eliminam processos manuais e reduzem erros humanos. O grande diferencial é a integração automática com IAM, CloudWatch, SNS e outros serviços AWS.</p>
<p>---</p>
<h2>CodeCommit: Seu Repositório Gerenciado</h2>
<p>CodeCommit é um serviço Git totalmente gerenciado. Você não precisa manter servidores, apenas criar repositórios e configurar permissões via IAM. É ideal para equipes que já usam AWS e querem evitar a complexidade de gerenciar infraestrutura Git.</p>
<h3>Configuração Inicial</h3>
<pre><code class="language-bash"># Clone um repositório CodeCommit
git clone codecommit://seu-usuario@seu-repositorio.git
Configure credenciais Git (use AWS Credentials)
No arquivo ~/.aws/credentials, coloque suas chaves AWS
O CodeCommit usa as credenciais AWS para autenticação
Faça um push
git add .
git commit -m "Primeira mudança"
git push origin main</code></pre>
<p>Para usar CodeCommit, configure credenciais HTTPS com Git Credentials ou use AWS CLI com programmatic access. A autenticação é feita via IAM, garantindo que apenas usuários autorizados acessem os repositórios. Você também pode configurar triggers que disparam eventos quando código é pushado, iniciando automáticamente o pipeline CI/CD.</p>
<pre><code class="language-bash"># Use o AWS CLI para criar um repositório
aws codecommit create-repository \
--repository-name meu-app \
--description "Aplicação Node.js"</code></pre>
<p>---</p>
<h2>CodeBuild: Compilação e Testes Automatizados</h2>
<p>CodeBuild executa seus scripts de build em contêineres Docker gerenciados. Você define as etapas em um arquivo <code>buildspec.yml</code> que fica na raiz do repositório. Cada build roda em um ambiente limpo e isolado, garantindo consistência e reprodutibilidade.</p>
<h3>Estrutura do buildspec.yml</h3>
<pre><code class="language-yaml">version: 0.2
phases:
install:
runtime-versions:
nodejs: 18
commands:
- echo "Instalando dependências..."
- npm install
pre_build:
commands:
- echo "Executando testes..."
- npm run test
- echo "Rodando linter..."
- npm run lint
build:
commands:
- echo "Compilando aplicação..."
- npm run build
- echo "Build concluído em
date"
post_build:
commands:
- echo "Gerando artefatos..."
- zip -r app.zip dist/ node_modules/
artifacts:
files:
- app.zip
name: BuildArtifact
cache:
paths:
- '/root/.npm/*/'
reports:
coverage:
files:
- coverage/cobertura-coverage.xml
file-format: COBERTURAXML</code></pre>
<p>Este arquivo define quatro fases: <strong>install</strong> (prepara ambiente), <strong>pre_build</strong> (testes), <strong>build</strong> (compilação) e <strong>post_build</strong> (gera artefatos). Os artefatos são salvos em S3 e utilizados posteriormente pelo CodeDeploy. CodeBuild integra-se com CloudWatch Logs, enviando todos os logs do build automaticamente, facilitando debugging. Você também pode executar builds manualmente via AWS CLI ou disparar automaticamente por commits.</p>
<pre><code class="language-bash"># Inicie um build manualmente
aws codebuild start-build \
--project-name meu-app-build \
--source-version main</code></pre>
<p>---</p>
<h2>CodeDeploy: Entrega Controlada em Produção</h2>
<p>CodeDeploy automatiza o deployment de seu código em servidores. Ele suporta estratégias como Blue/Green (sem downtime) e Canary (rollout gradual). Diferente de ferramentas simples de SCP, CodeDeploy oferece health checks, rollbacks automáticos e coordenação de múltiplas instâncias.</p>
<h3>Configuração com appspec.yml</h3>
<pre><code class="language-yaml">version: 0.0
Resources:
- TargetService:
Type: AWS::EC2::Instance
Properties:
Name: !Ref AWS::StackName
Hooks:
BeforeInstall:
- Location: scripts/before_install.sh
Timeout: 300
RunAs: root
ApplicationStart:
- Location: scripts/start_server.sh
Timeout: 300
RunAs: root
ApplicationStop:
- Location: scripts/stop_server.sh
Timeout: 300
RunAs: root
ValidateService:
- Location: scripts/validate.sh
Timeout: 300
RunAs: root</code></pre>
<p>O <code>appspec.yml</code> define hooks (scripts executados em momentos específicos) que controlam todo o ciclo de vida do deployment. Antes de instalar, você para a aplicação; durante o deployment, copia arquivos; e após instalar, valida a saúde da aplicação. CodeDeploy aguarda o sucesso de todos os hooks antes de considerar o deployment bem-sucedido.</p>
<pre><code class="language-bash"># Script de validação (scripts/validate.sh)
#!/bin/bash
set -e
Aguarda a aplicação ficar pronta
for i in {1..30}; do
if curl -f http://localhost:3000/health; then
echo "Aplicação está saudável"
exit 0
fi
sleep 2
done
echo "Erro: Aplicação não respondeu"
exit 1</code></pre>
<p>Ao integrar os três serviços em um CodePipeline, o fluxo automático fica assim: commit dispara CodeBuild → testes e compilação → artefatos vão para S3 → CodeDeploy puxa artefatos e faz deploy → health checks validam sucesso. Tudo sem intervenção manual.</p>
<p>---</p>
<h2>Conclusão</h2>
<p><strong>Três aprendizados principais</strong>: (1) CodeCommit + CodeBuild + CodeDeploy formam um pipeline nativo robusto e integrado, eliminando ferramentas externas desnecessárias para quem já usa AWS. (2) O arquivo <code>buildspec.yml</code> é a chave do CodeBuild; defina fases claras e use caching para acelerar builds. (3) CodeDeploy com <code>appspec.yml</code> e health checks garante deployments seguros; sempre inclua scripts de validação que testam a saúde real da aplicação. Dominar esses três serviços torna você capaz de implementar CI/CD profissional e escalável em qualquer projeto AWS.</p>
<p>---</p>
<h2>Referências</h2>
<ul>
<li><a href="https://docs.aws.amazon.com/codecommit/" target="_blank" rel="noopener noreferrer">AWS CodeCommit Documentation</a></li>
<li><a href="https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html" target="_blank" rel="noopener noreferrer">AWS CodeBuild - Build Specifications Reference</a></li>
<li><a href="https://docs.aws.amazon.com/codedeploy/latest/userguide/application-specification.html" target="_blank" rel="noopener noreferrer">AWS CodeDeploy AppSpec Reference</a></li>
<li><a href="https://aws.amazon.com/devops/" target="_blank" rel="noopener noreferrer">AWS DevOps Competency Partner Program</a></li>
<li><a href="https://aws.amazon.com/devops/continuous-integration/" target="_blank" rel="noopener noreferrer">Continuous Integration and Continuous Delivery on AWS</a></li>
</ul>