DEV Community

Cover image for 🚀Begini Cara Saya Percepat Proses Workflows di GitHub Actions
Ferry Ananda Febian
Ferry Ananda Febian

Posted on

🚀Begini Cara Saya Percepat Proses Workflows di GitHub Actions

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-
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Setelah Optimasi

Berikut adalah sample perbedaan waktu eksekusi sebelum dan sesudah dioptimasi

Rata-rata waktu eksekusi sebelum dioptimasi:
Image description

Rata-rata waktu eksekusi setelah dioptimasi:
Image description

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)

Collapse
 
ferryops profile image
Ferry Ananda Febian

reserved