Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: auto-deploy preview untuk pull request #97

Merged
merged 5 commits into from
Feb 29, 2024
Merged

Conversation

feryardiant
Copy link
Contributor

@feryardiant feryardiant commented Feb 28, 2024

Seperti kita ketahui, selama ini kita cukup kesulitan untuk dapat me-review setiap pekerjaan yang mana mengharuskan reviewer untuk merge dulu setiap PR sebelum melakukan review. Masalahnya adalah jika ternyata masih ada bug atau PR terebut belum sepenuhnya selesai maka dev harus membuat PR baru lagi untuk memperbaiki issue dari PR sebelumnya yang usdah di merge.

Tentu hal tersebut tidak ideal dimana harusnya setiap PR harus selesai dan sudah memenuhi kriteria terlebih dahulu, dan reviewer harus lah dapat melakukan review sebelum sebelum PR tersebut dapat di merge.

Hal tersebut yang menjadikan kita butuh sebuah mekanisme yang memungkinkan untuk melakukan deployment tersendiri di tiap PR agar dapat melakukan review dan tentunya tidak mengganggu deployment pada branch utama.

Mekanisme seperti ini umum kita jumpai pada layanan populer macam Heroku, Vercel, Netlify, dll namun dengan resource yang kita miliki saat ini "tidak memungkinkan" untuk menggunakan layanan semacam itu.

NOTE
Kata "tidak memungkinkan" dalam hal ini adalah saya TIDAK MAU menggunakan akun PERSONAL di layanan tersebut termasuk menggunakan akun personal saya sendiri karena Creasi.co bukanlah perorangan. Dan untuk menggunakan akun Organisasi pada layanan tersebut belum memungkinkan

Untuk alasan itulah PR ini dibuat dengan meng-imitasi mekanisme serupa namun dengan stack yang jauh lebih sederhana.

Stack saat ini

  • Semua staging deployment ditampung dalam satu server dan direktori yang sama
  • Konfigurasi nginx sudah dibuat untuk dapat secara otomatis mengakomodir setiap project laravel yang di tempatkan di direktori tersebut dan di deploy menggunakan deployer atau setidaknya memiliki struktur direktori public yang serupa.

Mekanisme yang diterapkan

  • Setiap PR baru dengan kritera nama branch tertentu akan secara otomatis di-deploy ke server
  • Lokasi deployment berada pada direktori yang sama dengan lokasi deployment branch main dengan tambahan nomor PR, misal branch main berlokasi di /var/www/skeleton maka PR nomor 97 akan di berlokasi di /var/www/skeleton-97
  • Dengan lokasi tersebut maka PR 97 ini harusnya dapat diakses dengan url http://skeleton-97.creasi.dev
  • Pada saat PR pertama kali di-deploy harus dapat membuat database baru dengan kredensial yang sama dengan branch main namun dengan nama database menyesuaikan dengan project dan nomor PR
  • PR dapat di deploy dan di review tanpa harus lolos pengujian baik unit maupun end-to-end.
  • Deployment harus dapat dilakukan oleh dev maupun non-dev dan secara manual maupun otomatis via CI/CD

Environment variables & secrets

Untuk project baru yang dibuat menggunakan template project ini, berikut beberapa environment variable dan secret yang dibutuhkan agar mekanisme deployment diatas dapat berjalan sebagaimana mestinya :

Variables

  • Repository Variables
    • APP_NAME : Nama project
    • SENTRY_PROJECT : Nama project di sentry (cek Project Settings di Sentry)
  • Environment Variables
    • APP_ENV : Nama untuk spesifik environment
    • APP_URL : URL end-point untuk masing-masing environment

By default APP_ENV untuk branch main adalah staging dan untuk PR adalah preview

Secrets

NOTE
Topik environment ini dapat dibaca lebih lanjut disini

Panduan untuk Reviewer

ℹ️ Kriteria auto-deploy PR saat ini dibatasi hanya berlaku untuk branch dengan pola nama feat/** dan main

  • Ketika PR telah di deploy, reviewer dapat meng-akses dengan meng-klik tombol View deployment pada time-line item di PR tersebut

    SCR-20240301-eqdq-2

  • Menual deployment dapat dilakukan dengan mengakses menu berikut, sesuaikan branch dan target deployment yang dibutuhkan dan klik Run workflow

    SCR-20240301-etbq-2

    Setelah deployment selesai, klik workflow tersebut untuk mendapatkan URL dari deployment teresbut.

    SCR-20240301-extc-2

Setelah PR ini di-merge akan ada opsi baru pada manual deployment untuk dapat melakukan reset database pada saat deployment.

Catatan untuk dev

Saat ini belum ada implementasi auto-destroy deployment ketika PR di-merge, saya butuh feedback dan liat seberapa positif inpact dari implementasi saat ini terlebih dahulu. Auto-destroy akan saya implementasikan lain waktu, atau silakan jika ada yang mau kontribusi.

Jadi direktory deployment dan database preview untuk PR yang sudah di merge bisa dihapus secara manual.

Reset database saat deploy

Tambahkan flag --reset saat melakukan deployment, contoh :

composer dep deploy -- --reset

@feryardiant feryardiant self-assigned this Feb 28, 2024
@feryardiant feryardiant requested a review from a team February 28, 2024 23:25
@github-actions github-actions bot added enhancement New feature or request integration When multiple functionalities should works together deployment Deployment related things labels Feb 28, 2024
@feryardiant feryardiant force-pushed the feat/deployment-config branch 2 times, most recently from 5d6a9a5 to a43b96f Compare February 29, 2024 00:51
@feryardiant feryardiant force-pushed the feat/deployment-config branch 2 times, most recently from 1c70057 to 01f16c2 Compare February 29, 2024 05:29
@feryardiant feryardiant force-pushed the feat/deployment-config branch 2 times, most recently from b198bb3 to e9f4fd7 Compare February 29, 2024 17:27
- Move `labeler` to `main` workflow
- Make `deploy` should only be triggered when `main` workflow completed

Signed-off-by: Fery Wardiyanto <[email protected]>
Copy link
Contributor

@creasi creasi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR updated, silakan disimak.

@feryardiant feryardiant changed the title feat: experiments with deployment preview feat: auto-deploy preview untuk pull request Feb 29, 2024
@creasi creasi merged commit 42bf507 into main Feb 29, 2024
5 of 6 checks passed
@creasi creasi deleted the feat/deployment-config branch February 29, 2024 22:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
deployment Deployment related things enhancement New feature or request integration When multiple functionalities should works together
Projects
Status: ✅ Done
Development

Successfully merging this pull request may close these issues.

2 participants