Ola devs e devas!
Porque iremos usar Nestjs?!
Nestjs é um framework Nodejs que conseguimos escalar muito rapidamente usando POO e é meu framework favorito.
Em primeiro lugar precisa ter instalados node
e o cli do nestjs, para instalarmos o cli rodamos esse comando npm i -g @nesjs/cli
Agora iremos criar o projeto com cli do nest: nest new api-example-dev.to-ci-cd
O cli do nest é muito poderoso e cria toda uma estrutura inicial para nós.
Para acessar digitaremos: cd api-example-dev.to-ci-cd && code .
Essa é a estrutura de pasta que temos:
Agora iremos rodar o projeto com o comando: yarn start:dev
Aplicação de pé:
Agora iremos criar o projeto no heroku:
Antes disso, precisamos instalar o cli do heroku e fazer o login:
sudo snap install heroku --classic
heroku login
Iremos adicionar o remote do heroku no nosso projeto: heroku git:remote -a api-example-dev-to-ci-cd
Agora criaremos o arquivo Procfile que sera lido pelo heroku na hora que fizermos o push:
Procfile:
web: npm run start:prod
Agora iremos preparar para fazer o push:
git add .
git commit -m "chore: add setup"
git push heroku main
Iremos criar o nosso projeto no Github:
Precisamos adicionar a porta do projeto no heroku:
Iremos acessar a nossa aplicação:
Tudo ok com nossa aplicação, agora iremos implementar nosso CI/CD para automatizar nossos deploy.
Criaremos o arquivo ci-cd.yml
:
name: 'CI/CD'
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
continuous-integration:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: yarn install
continuos-delivery:
runs-on: ubuntu-latest
needs: [continuous-integration]
steps:
- uses: actions/checkout@v2
- name: Deploy to heroku
if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main'}}
uses: akhileshns/heroku-deploy@v3.12.12
with:
heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
heroku_app_name: ${{ secrets.HEROKU_APP_NAME }}
heroku_email: ${{ secrets.HEROKU_EMAIL }}
Agora iremos adicionar as secrets no Github:
Iremos preparar para fazer o push, mas agora no github:
git add .
git commit -m "chore: add ci/cd workflow"
git push origin main
Rodando o Actions:
Agora iremos mudar o retorno para vermos o CI/CD funcionando:
export class AppService {
getHello(): { message: string } {
return {
message: `welcome to the @dev.to example api with CI/CD Heroku`,
};
}
}
Precisamos alterar o retorno na nossa controller também:
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): { message: string } {
return this.appService.getHello();
}
}
Preparando o push:
git add .
git commit -m "feat: add new return"
git push origen main
Rodando a Action com a nova alteração:
Iremos acessar a aplicação novamente:
Pronto, implementamos CI/CD no Github Actions com deploy no Heroku
Top comments (1)
Gostei da objetividade e simplicidade com que explicou. Parabéns !