|
1 |
| -name: CI/CD for PostgreSQL Docker |
| 1 | +name: CI/CD for PostgreSQL Docker - Build, Push, and Deploy |
2 | 2 |
|
3 | 3 | on:
|
4 | 4 | workflow_dispatch:
|
|
8 | 8 | required: true
|
9 | 9 | default: 'development'
|
10 | 10 | postgres_version:
|
11 |
| - description: 'Postgres Version' |
| 11 | + description: 'PostgreSQL Version' |
12 | 12 | required: true
|
13 |
| - default: '17' |
| 13 | + default: '17.0' |
14 | 14 |
|
15 | 15 | jobs:
|
16 | 16 | build-and-push:
|
17 |
| - name: Build and Push Docker Images for PostgreSQL |
| 17 | + name: Build and Push PostgreSQL Docker Image |
18 | 18 | runs-on: ubuntu-latest
|
19 | 19 |
|
20 | 20 | steps:
|
21 |
| - # Checkout Postgres Docker repository into a specific directory |
22 | 21 | - name: Checkout Postgres Repository
|
23 | 22 | uses: actions/checkout@v3
|
24 | 23 | with:
|
25 | 24 | repository: trplgit/postgres
|
26 | 25 | token: ${{ secrets.GITHUB_TOKEN }}
|
27 |
| - path: postgres # Checkout into the 'postgres' directory |
| 26 | + path: postgres |
28 | 27 |
|
29 |
| - # Set up Docker buildx |
30 | 28 | - name: Set up Docker
|
31 | 29 | uses: docker/setup-buildx-action@v2
|
32 | 30 | with:
|
33 | 31 | version: latest
|
34 | 32 |
|
35 |
| - # Log in to Azure Container Registry |
36 | 33 | - name: Log in to Azure Container Registry
|
37 | 34 | uses: azure/docker-login@v1
|
38 | 35 | with:
|
39 | 36 | login-server: ${{ vars.ACR_NAME }}.azurecr.io
|
40 | 37 | username: ${{ vars.ACR_USERNAME }}
|
41 | 38 | password: ${{ secrets.ACR_PASSWORD }}
|
42 | 39 |
|
43 |
| - # Build and Push Postgres Docker Image for PostgreSQL 17 |
44 | 40 | - name: Build and Push Postgres Docker Image
|
45 | 41 | run: |
|
46 | 42 | docker build -f ./postgres/17/alpine3.21/Dockerfile -t ${{ vars.ACR_NAME }}.azurecr.io/${{ inputs.environment }}/trpl-postgres-docker:v17 ./postgres/17/alpine3.21
|
47 | 43 | docker push ${{ vars.ACR_NAME }}.azurecr.io/${{ inputs.environment }}/trpl-postgres-docker:v17
|
48 | 44 |
|
49 | 45 | deploy:
|
50 |
| - name: Deploy PostgreSQL to Linux VM |
| 46 | + name: Deploy PostgreSQL Docker Container to Linux VM |
51 | 47 | runs-on: ubuntu-latest
|
52 | 48 | needs: build-and-push
|
53 | 49 |
|
54 | 50 | steps:
|
55 |
| - # Install OpenVPN |
56 | 51 | - name: Install OpenVPN
|
57 | 52 | run: sudo apt-get install -y openvpn
|
58 | 53 |
|
59 |
| - # Prepare VPN files |
60 | 54 | - name: Prepare VPN Files
|
61 | 55 | run: |
|
62 | 56 | echo "${{ secrets.VPN_PKCS12_FILE }}" | base64 -d > TRPL-FW-TCP-1194-ci-cd-automation.p12
|
63 | 57 | echo "${{ secrets.VPN_TLS_KEY_FILE }}" | base64 -d > TRPL-FW-TCP-1194-ci-cd-automation-tls.key
|
64 | 58 |
|
65 |
| - # Connect to VPN |
66 | 59 | - name: Connect to VPN
|
67 | 60 | run: |
|
68 | 61 | echo "${{ secrets.VPN_CONFIG_FILE }}" > vpn-config.ovpn
|
69 | 62 | echo -e "${{ vars.VPN_USERNAME }}\n${{ secrets.VPN_PASSWORD }}" > vpn-credentials.txt
|
70 | 63 | sudo openvpn --config vpn-config.ovpn --auth-user-pass vpn-credentials.txt --daemon
|
71 | 64 |
|
72 |
| - # Wait for VPN connection |
73 | 65 | - name: Wait for VPN Connection
|
74 | 66 | run: sleep 15
|
75 | 67 |
|
76 |
| - # Verify VPN connection |
77 | 68 | - name: Verify VPN Connection
|
78 | 69 | run: |
|
79 | 70 | ifconfig | grep tun || (echo "VPN connection failed" && exit 1)
|
80 | 71 |
|
81 |
| - # Add user to Docker group to allow Docker commands without sudo |
82 | 72 | - name: Add user to Docker group
|
83 | 73 | run: |
|
84 | 74 | sudo usermod -aG docker $USER
|
85 | 75 | newgrp docker || true
|
86 | 76 |
|
87 |
| - # Create Docker network if not exists |
88 | 77 | - name: Create Docker Network if not exists
|
89 | 78 | run: |
|
90 | 79 | echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker network create odoo-postgres-network || echo "Network already exists"
|
91 | 80 |
|
92 |
| - # Deploy Postgres Docker container to VM |
93 |
| - - name: Deploy Postgres Docker Container to VM |
| 81 | + - name: Deploy PostgreSQL Docker Container to VM |
94 | 82 | uses: appleboy/ssh-action@v0.1.6
|
95 | 83 | with:
|
96 | 84 | host: ${{ vars.LINUX_VM_HOST_DEVELOPMENT }}
|
|
106 | 94 | # Run Postgres container (PostgreSQL 17)
|
107 | 95 | echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker run -d --restart always --name postgres-container --network=odoo-postgres-network -e POSTGRES_PASSWORD=mysecretpassword -p 5433:5433 ${{ vars.ACR_NAME }}.azurecr.io/${{ inputs.environment }}/trpl-postgres-docker:v17
|
108 | 96 |
|
109 |
| - # Cleanup VPN credentials |
110 | 97 | - name: Cleanup VPN Credentials
|
111 | 98 | run: |
|
112 | 99 | rm -f vpn-config.ovpn vpn-credentials.txt
|
0 commit comments