Implementar uma pipeline de integração e entrega contínua (CI/CD) é essencial para automatizar testes, builds e o deploy de aplicações. Neste post, veremos como configurar uma pipeline CI/CD em um projeto Node.js com TypeScript usando GitHub Actions e Docker.
Pré-requisitos
Para seguir este guia, você precisará:
- Um repositório no GitHub com um projeto Node.js configurado com TypeScript.
- Docker instalado em sua máquina para testes locais.
Passo 1: Configurando o Projeto Node.js com TypeScript
Certifique-se de que seu projeto está pronto para ser containerizado e que ele usa TypeScript. Inclua um Dockerfile
para gerar a imagem e defina os scripts necessários no package.json
.
{ "scripts": { "build": "tsc", "start": "node dist/index.js", "test": "jest" } }
Crie um Dockerfile
para o ambiente de produção:
# Dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install --production COPY . . RUN npm run build EXPOSE 3000 CMD ["npm", "start"]
Passo 2: Escrevendo o Workflow do GitHub Actions
No repositório GitHub, crie o diretório .github/workflows/
e, dentro dele, um arquivo YAML chamado ci.yml
. Esse arquivo vai definir o workflow da pipeline.
# .github/workflows/ci.yml name: CI/CD Pipeline on: push: branches: - main pull_request: branches: - main jobs: build: runs-on: ubuntu-latest services: docker: image: docker:20.10.7 options: --privileged ports: - 3000:3000 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: 18 - name: Install dependencies run: npm install - name: Run TypeScript build run: npm run build - name: Run Tests run: npm test - name: Build Docker image run: docker build -t my-app:latest . - name: Push Docker image env: DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} DOCKER_HUB_ACCESS_TOKEN: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} run: | echo $DOCKER_HUB_ACCESS_TOKEN | docker login -u $DOCKER_HUB_USERNAME --password-stdin docker tag my-app:latest $DOCKER_HUB_USERNAME/my-app:latest docker push $DOCKER_HUB_USERNAME/my-app:latest
Explicação do Workflow
- Triggers: A pipeline é acionada em
push
epull_request
na branchmain
. - Jobs: A pipeline é dividida em etapas (jobs) que incluem a instalação de dependências, a construção do projeto TypeScript, testes, criação de imagem Docker e envio da imagem para o Docker Hub.
- Secrets: As credenciais do Docker Hub estão armazenadas como secrets no GitHub (
DOCKER_HUB_USERNAME
eDOCKER_HUB_ACCESS_TOKEN
).
Passo 3: Configurando os Secrets
No GitHub:
- Acesse
Settings > Secrets and Variables > Actions
. - Adicione
DOCKER_HUB_USERNAME
eDOCKER_HUB_ACCESS_TOKEN
como secrets.
Passo 4: Validando e Testando a Pipeline
Realize um push ou uma pull request para a branch main
para verificar a execução da pipeline. No GitHub, em Actions, você verá o status da execução em tempo real, e, ao final, uma imagem Docker será enviada para o Docker Hub, pronta para ser utilizada.
Conclusão
A pipeline CI/CD automatizada garante que cada modificação no código passe por um ciclo de testes e criação de imagem Docker, reduzindo erros em produção e aumentando a eficiência do processo de desenvolvimento. Esta abordagem é essencial para manter um fluxo de desenvolvimento robusto e confiável.
Top comments (0)