Continuous Integration dan Continuous Deployment (CI/CD) adalah praktik penting dalam pengembangan perangkat lunak modern. Dengan CI/CD, kode yang kita tulis dapat diuji dan diterapkan secara otomatis ke lingkungan produksi. Namun, salah satu tantangan utama dalam menggunakan CI/CD adalah waktu tunggu yang lama saat proses build dan deployment berlangsung.
Di GitHub Actions, misalnya, setiap commit yang dibuat ke repository dapat memicu serangkaian workflow yang mencakup linting, testing, build, dan deployment. Jika tidak dioptimalkan, waktu eksekusi workflow ini bisa sangat lama, menghambat produktivitas dan meningkatkan biaya penggunaan runner.
Cara Mempercepat Proses GitHub Actions
Berikut beberapa strategi yang saya terapkan untuk mempercepat eksekusi workflow di GitHub Actions:
1. Menggunakan Caching
GitHub Actions menyediakan fitur caching untuk mempercepat dependency installation. Dengan caching, dependensi yang sudah diunduh tidak perlu diunduh ulang setiap kali workflow dijalankan. Berikut contoh implementasi caching untuk npm dependencies:
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-
2. Menjalankan Pekerjaan Secara Paralel
Alih-alih menjalankan langkah-langkah secara berurutan, pekerjaan (jobs) dapat dieksekusi secara paralel untuk mengurangi waktu tunggu. Contohnya:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- run: npm run lint
test:
runs-on: ubuntu-latest
steps:
- run: npm test
Dengan cara ini, proses linting dan testing berjalan bersamaan tanpa menunggu satu sama lain.
3. Menggunakan Matrix Builds
Matrix builds memungkinkan kita menjalankan beberapa kombinasi environment dalam satu workflow, menghemat waktu pengujian di berbagai konfigurasi.
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14, 16, 18]
steps:
- run: npm test
4. Menghindari Build yang Tidak Perlu
Gunakan conditional execution untuk menghindari menjalankan workflow pada perubahan yang tidak relevan. Misalnya, hanya menjalankan deployment jika perubahan terjadi pada branch main
:
if: github.ref == 'refs/heads/main'
5. Menggunakan Self-Hosted Runner
Runner default dari GitHub Actions memiliki keterbatasan sumber daya. Dengan self-hosted runner, kita bisa menggunakan server yang lebih cepat dan sesuai kebutuhan.
runs-on: self-hosted
Setelah Optimasi
Berikut adalah sample perbedaan waktu eksekusi sebelum dan sesudah dioptimasi
Rata-rata waktu eksekusi sebelum dioptimasi:
Rata-rata waktu eksekusi setelah dioptimasi:
Berdasarkan sample saya diatas, setelah optimasi, workflow berjalan sekitar 40.63% lebih cepat 🚀
Kesimpulan
Dengan menerapkan strategi seperti caching, paralelisasi, matrix builds, dan self-hosted runners, proses CI/CD di GitHub Actions dapat berjalan lebih cepat dan efisien. Optimalisasi ini tidak hanya mengurangi waktu tunggu, tetapi juga menghemat biaya dan meningkatkan produktivitas tim pengembang. Jika workflow Anda masih lambat, cobalah beberapa teknik di atas dan rasakan perbedaannya!
Terima Kasih sudah mampir, sampai ketemu di artikel keren saya lainnya.
Top comments (1)
reserved