name: Docker Image CI/CD for Staging
on:
push:
branches: ["staging"]
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
SSH_HOST_STAGING: ${{ secrets.SSH_HOST_STAGING }}
SSH_USER_STAGING: ${{ secrets.SSH_USER_STAGING }}
SSH_KEY_STAGING: ${{ secrets.SSH_KEY_STAGING }}
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Branch name
run: echo running on branch ${GITHUB_REF##*/}
- name: Store variables
id: get-store
run: |
echo version=$(jq -r '.version' package.json) >> $GITHUB_OUTPUT
echo branch=${GITHUB_REF##*/} >> $GITHUB_OUTPUT
- name: DockerHub Login
uses: docker/login-action@v3
with:
username: ${{ env.DOCKER_USERNAME }}
password: ${{ env.DOCKER_PASSWORD }}
- name: Build the Docker image
run: docker build . --file Dockerfile --tag ${{ env.DOCKER_ORG }}/jti-dashboard:${GITHUB_REF##*/}-${{ steps.get-store.outputs.version }}
- name: Docker Push
run: docker push ${{ env.DOCKER_ORG }}/jti-dashboard:${GITHUB_REF##*/}-${{ steps.get-store.outputs.version }}
- name: Run deployment command
uses: appleboy/[email protected]
with:
host: ${{ env.SSH_HOST_STAGING }}
username: ${{ env.SSH_USER_STAGING }}
key: ${{ env.SSH_KEY_STAGING }}
script: |
cd /var/www/html/jti-dashboard-docker
docker compose down
docker image prune -af
# Update docker compose file
sudo sed -i "s|image: .*|image: ${{ env.DOCKER_ORG }}/jti-dashboard:${{ steps.get-store.outputs.branch }}-${{ steps.get-store.outputs.version }}|g" docker-compose.yaml
docker compose pull
docker compose up -d
- name: Workflow Success
uses: rjstone/discord-webhook-notify@v1
if: success()
with:
username: JTI Dashboard Staging
severity: info
details: "The deployment was successful without any issues."
webhookUrl: ${{ env.DISCORD_WEBHOOK }}
- name: Workflow Failure
uses: rjstone/discord-webhook-notify@v1
if: failure()
with:
username: JTI Dashboard Staging
severity: error
details: Workflow Failed!
webhookUrl: ${{ env.DISCORD_WEBHOOK }}
- name: Workflow Cancelled
uses: rjstone/discord-webhook-notify@v1
if: cancelled()
with:
username: JTI Dashboard Staging
severity: warn
details: Workflow Cancelled!
webhookUrl: ${{ env.DISCORD_WEBHOOK }}
Last active
July 9, 2024 11:15
-
-
Save nurmdrafi/c9dca6bd667698e5ed306af41dc34da4 to your computer and use it in GitHub Desktop.
Update docker image tags with dynamic version
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment