-
Notifications
You must be signed in to change notification settings - Fork 0
81 lines (65 loc) · 2.46 KB
/
Copy pathdeploy.yml
File metadata and controls
81 lines (65 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
name: Deploy to EC2
on:
push:
branches:
- main # Deploy quando houver push na branch main
workflow_dispatch: # Permite executar manualmente
jobs:
deploy:
name: Build and Deploy
runs-on: ubuntu-latest
steps:
# 1. Checkout do código
- name: Checkout code
uses: actions/checkout@v4
# 2. Setup Go
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.22'
# 3. Executar testes
- name: Run tests
run: |
go mod download
go test ./... -v
# 4. Build do binário para Linux AMD64
- name: Build binary
run: |
GOOS=linux GOARCH=amd64 go build -o finance-tracker ./cmd/api
# 5. Deploy para EC2
- name: Deploy to EC2
env:
EC2_HOST: ${{ secrets.EC2_HOST }}
EC2_USER: ${{ secrets.EC2_USER }}
EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }}
run: |
# Criar chave SSH temporária
echo "$EC2_SSH_KEY" > deploy_key.pem
chmod 600 deploy_key.pem
# Copiar binário para EC2
scp -i deploy_key.pem -o StrictHostKeyChecking=no \
finance-tracker ${EC2_USER}@${EC2_HOST}:/tmp/finance-tracker
# Conectar na EC2 e fazer deploy
ssh -i deploy_key.pem -o StrictHostKeyChecking=no \
${EC2_USER}@${EC2_HOST} << 'ENDSSH'
# Parar o serviço
sudo systemctl stop finance-tracker
# Backup do binário anterior
sudo cp /opt/finance-tracker/finance-tracker /opt/finance-tracker/finance-tracker.backup || true
# Mover novo binário
sudo mv /tmp/finance-tracker /opt/finance-tracker/finance-tracker
sudo chmod +x /opt/finance-tracker/finance-tracker
sudo chown ec2-user:ec2-user /opt/finance-tracker/finance-tracker
# Reiniciar o serviço
sudo systemctl start finance-tracker
# Verificar status
sudo systemctl status finance-tracker
# Aguardar 2 segundos e fazer health check
sleep 2
curl -f http://localhost:8080/health || exit 1
ENDSSH
# Limpar chave temporária
rm -f deploy_key.pem
# 6. Notificar sucesso
- name: Deployment successful
run: echo "✅ Deploy realizado com sucesso!"