Cara membuat trigger manual ci/cd di github action
posted at 2024-06-01 • updated at -
Problem
Masalah yang terjadi adalah, untuk trigger manual ci/cd di github action itu tidak bisa dan dari UI github pada menu Action pun juga tidak tersedia. Kenapa ini penting? dari pengalaman saya, selama ini menggunakan github sebagai repository dan menggunakan portainer sebagai management containernya bukan kubernetes.
Yang terjadi ketika harus revert version pada aplikasi antara deploy ulang dari portainer atau kita revert kode dan melakukan deploy ulang, langkah-langkah yang terjadi cukup ribet menurutku.
Solution
Walaupun di github tidak menyediakan UI untuk mengatur trigger manual, kita bisa melakukan konfigurasi sendiri untuk membuat UI tersebut dan memunculkannya pada github action. Goalnya adalah ketika kita revert aplikasi kita bisa set ke version tertentu ataupun kita juga bisa memilih branch mana yang akan dideploy ulang. Untuk langkah-langkahnya sebagai berikut:
- Buat file
.github/workflows/manual-trigger-ci-cd.yml
di folder.github/workflows
di repository kita. - Copy kode berikut ke file
manual-trigger-ci-cd.yml
---
name: Manual deploy # Workflow name displayed on GitHub
on:
workflow_dispatch:
jobs:
changelog:
runs-on: ubuntu-latest
steps:
- name: Set Repository ENV variables
run: |
echo "REPO_NAME=${GITHUB_REPOSITORY#$GITHUB_REPOSITORY_OWNER/}" >> $GITHUB_ENV
- uses: actions/checkout@v3
- id: commit
uses: pr-mpt/actions-commit-hash@v2
- name: Setup buildx
uses: docker/setup-buildx-action@v2
- name: Docker build
run: docker build -t aplikasi-svc .
- name: Push docker image latest staging
run: docker push aplikasi-svc
deploy-svc:
needs: deploy-image
runs-on: ubuntu-latest
steps:
- name: Webhook loyalty-svc
id: webhook-request
if: github.ref_name == 'staging'
uses: muhfaris/[email protected]
with:
url: ${{ secrets.WEBHOOK_URL }}?tag=latest
- name: Make webhook request with image version
if: github.ref_name == 'main'
id: webhook-request
uses: muhfaris/[email protected]
with:
url: ${{ secrets.PROD_WEBHOOK_URL }}?tag=${{ env.RELEASE_VERSION }}
- name: Display API Response Status
run: |
echo "Response Status: ${{ steps.webhook-request.outputs.response-status }}"
- name: Display API Response Data
run: |
echo "Response Data: ${{ steps.webhook-request.outputs.response-data }}"
Pada konfigurasi di atas, kita menggunakan workflow_dispatch
untuk mengatur trigger manual di github action. Kemudian pada bagian jobs
adalah task yang akan dijalankan setelah kita submit trigger manual tersebut. Bagaimana tampilan UInya di github itu akan seperti berikut:
Referensi: