- Primeiro crie uma chave ssh para deploy que será salva no github actions para ter acesso a maquina da digital ocean 1.1 Crie utilizando esses steps https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
- Adicione ssh.publica no servidor no arquivo authorized_keys
- Adiciona o ssh ao repositório do github nas settings do repositório 3.1 Caso possua pacotes privados do github não esqueça de configrar o .npmrc na pasta do package.json setando token de leitura para instalação de packages do repositório do gitbub
3.3 Adicione as configurações de conexão ssh utilizando as enviroments do repositório seguindo padrão de prefixo no nome SSH SSH_HOST -> ip da maquina SSH_PORT -> porta ssh 22 SSH_KEY -> chave ssh utilizada para conectar na maquina SSH_USERNAME -> nome de usuário root
arquivo de exmeplo
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: CI/CD Production
on:
# Só irá rodar nas seguintes situações das seguintes branhces
push:
branches: [production]
pull_request:
branches: [production]
jobs:
build-front:
# qual sistema operacional vai rodar
runs-on: ubuntu-latest
defaults:
run:
working-directory: client
strategy:
matrix:
# Sua versão do nodejs para ser utilizada
node-version: ["12.18.3"]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
# instala e roda build de produção
- run: |
npm install
npm run build-prod
- name: Install Zip
uses: montudor/[email protected]
# Compacta pasta dist como .zip na pasta raiz
- name: Zip Dist as Artifact (at root /)
run: |
cd ./dist
echo "Compressing these files:"
ls -al
zip -qq -r -T ../../omega-web.zip *
# Salva o .zip entre os passos de deploy
- name: Save Build Artifact
uses: actions/upload-artifact@v2
with:
name: omega-web.zip
path: omega-web.zip
if-no-files-found: error
deploy-web-production:
needs: [build-front]
runs-on: ubuntu-latest
defaults:
run:
working-directory: client
steps:
# Baixa o artefato que teve upload no passo de build
- uses: actions/download-artifact@v2
with:
name: omega-web.zip
# Faz upload de artefatos para o VPS para o uso posterior
- name: Upload Artifact over SSH
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_KEY }}
port: ${{ secrets.SSH_PORT }}
overwrite: true
source: "omega-web.zip"
target: "~/artifacts"
# Efetua descompactação do webapp na pasta de produção do servidor
- name: Enter SSH and unzip Artifact
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_KEY }}
port: ${{ secrets.SSH_PORT }}
script: |
unzip -o ~/artifacts/omega-web.zip -d /var/www/omega.3ccloud.com.br/html/
deploy-server-production:
needs: [build-front]
runs-on: ubuntu-latest
defaults:
run:
working-directory: server
steps:
- name: SSH PULL/INSTALL/MIGRATE/RESTART
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_KEY }}
port: ${{ secrets.SSH_PORT }}
# Exporta envs para ter acesso ao nodejs
script: |
export PATH=/root/.nvm/versions/node/v12.19.0/bin:$PATH
cd ~/pm2-services/omega/source/server
git fetch
git checkout production
git pull origin production
npm install --production
adonis migration:run --force
pm2 startOrRestart ./ecosystem.config.js --env production
- Setar as credenciais para não impedir o fetch durante a conexão ssh
root@bohrio:
# git config --global user.name "Seu Nome" root@bohrio:# git config --global user.email "[email protected]"