Thanks to visit codestin.com
Credit goes to github.com

Skip to content

CI/CD for PostgreSQL Docker - Build, Push, and Deploy #5

CI/CD for PostgreSQL Docker - Build, Push, and Deploy

CI/CD for PostgreSQL Docker - Build, Push, and Deploy #5

Workflow file for this run

name: CI/CD for PostgreSQL Docker - Build, Push, and Deploy
on:
workflow_dispatch:
inputs:
environment:
description: 'Environment to deploy (Development/Production)'
required: true
default: 'development'
postgres_version:
description: 'PostgreSQL Version'
required: true
default: '17.0'
jobs:
build-and-push:
name: Build and Push PostgreSQL Docker Image
runs-on: ubuntu-latest
steps:
- name: Checkout Postgres Repository
uses: actions/checkout@v3
with:
repository: trplgit/postgres
token: ${{ secrets.GH_TOKEN }}
path: postgres
- name: Set up Docker
uses: docker/setup-buildx-action@v2
with:
version: latest
- name: Log in to Azure Container Registry
uses: azure/docker-login@v1
with:
login-server: ${{ vars.ACR_NAME }}.azurecr.io
username: ${{ vars.ACR_USERNAME }}
password: ${{ secrets.ACR_PASSWORD }}
- name: Build and Push Postgres Docker Image
run: |
docker build -f ./postgres/17/alpine3.21/Dockerfile -t ${{ vars.ACR_NAME }}.azurecr.io/${{ inputs.environment }}/trpl-postgres-docker:v17 ./postgres/17/alpine3.21
docker push ${{ vars.ACR_NAME }}.azurecr.io/${{ inputs.environment }}/trpl-postgres-docker:v17
deploy:
name: Deploy PostgreSQL Docker Container to Linux VM
runs-on: ubuntu-latest
needs: build-and-push
steps:
- name: Install OpenVPN
run: sudo apt-get install -y openvpn
- name: Prepare VPN Files
run: |
echo "${{ secrets.VPN_PKCS12_FILE }}" | base64 -d > TRPL-FW-TCP-1194-ci-cd-automation.p12
echo "${{ secrets.VPN_TLS_KEY_FILE }}" | base64 -d > TRPL-FW-TCP-1194-ci-cd-automation-tls.key
- name: Connect to VPN
run: |
echo "${{ secrets.VPN_CONFIG_FILE }}" > vpn-config.ovpn
echo -e "${{ vars.VPN_USERNAME }}\n${{ secrets.VPN_PASSWORD }}" > vpn-credentials.txt
sudo openvpn --config vpn-config.ovpn --auth-user-pass vpn-credentials.txt --daemon
- name: Wait for VPN Connection
run: sleep 15
- name: Verify VPN Connection
run: |
ifconfig | grep tun || (echo "VPN connection failed" && exit 1)
- name: Add user to Docker group
run: |
sudo usermod -aG docker $USER
newgrp docker || true
- name: Create Docker Network if not exists
run: |
echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker network create odoo-postgres-network || echo "Network already exists"
- name: Deploy PostgreSQL Docker Container to VM
uses: appleboy/[email protected]
with:
host: ${{ vars.LINUX_VM_HOST_DEVELOPMENT }}
username: ${{ vars.LINUX_VM_USERNAME_DEVELOPMENT }}
password: ${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}
port: 22
script: |
echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker login ${{ vars.ACR_NAME }}.azurecr.io -u ${{ vars.ACR_USERNAME }} -p ${{ secrets.ACR_PASSWORD }}
echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker pull ${{ vars.ACR_NAME }}.azurecr.io/${{ inputs.environment }}/trpl-postgres-docker:v17
echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker stop postgres-container || true
echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker rm postgres-container || true
# Run Postgres container (PostgreSQL 17)
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
- name: Cleanup VPN Credentials
run: |
rm -f vpn-config.ovpn vpn-credentials.txt