Cara Implementasi CI/CD dengan GitHub Actions dan Menyederhanakan Alur Kerja Pengembangan Software

CI/CD adalah singkatan dari Continuous Integration and Continuous Delivery. CI/CD adalah sistem atau serangkaian proses dan metodologi yang membantu para software developer memperbarui codebase dan melakukan deployment aplikasi dengan cepat.

Kalau kamu adalah seseorang yang tertarik dengan dunia pengembangan software, tentu sudah pernah mendengar atau bahak tidak asing lagi dengan istilah CI/CD. Dalam artikel ini, kita akan membahas tentang cara kerja GitHub Actions sebagai alat untuk menerapkan CI/CD. Kita juga akan membahas konsep dasar GitHub Actions, lalu kita akan menggunakannya untuk membangun contoh alur kerja CI/CD.

Apa itu Continuous Integration dan Continuous Delivery?

Sebelum kita masuk ke pembahasan GitHub Actions, kita bahas dulu CI/CD itu sendiri. Continuous Integration (CI) berarti para pengembang dapat selalu mengintegrasikan atau menggabungkan perubahan kode mereka ke dalam repositori bersama tanpa menyebabkan kerusakan atau konflik. Sedangkan Continuous Delivery (CD) berarti perubahan kode yang telah diuji dan divalidasi akan secara otomatis dipersiapkan untuk dirilis.

Secara umum, CI/CD mencakup beberapa tahapan penting, yaitu: build, test, staging, dan deployment.

  • Build (Pembangunan): Pada tahap ini, kode dan semua dependensinya dikompilasi menjadi satu file yang dapat dijalankan. Ini adalah tahap awal dari CI, dan biasanya dipicu oleh tindakan seperti push ke repositori.
  • Test (Pengujian): Artifak yang telah dibangun kemudian diuji untuk memastikan bahwa kode berjalan sesuai harapan.
  • Staging: Aplikasi dijalankan dalam lingkungan yang menyerupai produksi untuk memastikan kesiapan sebelum benar-benar dirilis.
  • Deployment: Aplikasi secara otomatis dideploy ke pengguna akhir.

Catatan: Pada tahap Build dan Test, beberapa pengembang memilih untuk melakukan tahap Test terlebih dahulu dengan membuat unit test, integration test atau bahkan end to end test.

Apa itu GitHub Actions?

Selanjutnya mari kita bahas GitHub Actions! GitHub Actions adalah fitur dari platform GitHub yang memungkinkan pengembang membuat workflow CI/CD secara langsung di GitHub. GitHub Actions menjalankan serangkaian tugas atau job di dalam container yang dihosting oleh GitHub. Tugas-tugas ini dijalankan sesuai dengan definisi yang tertulis dalam file YAML yang disebut workflow. File ini harus ditempatkan dalam folder .github/workflows di dalam repositori agar bisa digunakan.

Konsep Dasar GitHub Actions

GitHub Actions terdiri dari berbagai komponen seperti event, job, step (task), runner, workflow, dan konteks. Berikut penjelasan singkatnya:

Events

Event pada dasarnya adalah sesuatu yang terjadi. Dengan GitHub, suatu event dapat berupa push (ketika kita mengirim kode ke repositori), pull request, atau bahkan cron job. Events ini memicu proses CI/CD.

Tasks

Saat kita menggunakan CI/CD, kita ingin dapat memicu aktivitas yang harus dilakukan secara otomatis. Aktivitas tersebut dikenal sebagai task atau step di GitHub. Tasks tersebut dapat berupa build kode atau pengujian atau deployment. Taks ini didefinisikan dengan perintah run: atau menggunakan action dengan uses:.

Contoh:

1steps:
2 - name: Checkout code
3 uses: actions/checkout@v3
4
5 - name: Set up Node.js
6 uses: actions/setup-node@v3
7 with:
8 node-version: 16
9
10 - name: Install dependencies
11 run: npm install
12
13 - name: Run tests
14 run: npm test
15
16 - name: Build project
17 run: npm run build
18
19 - name: Deploy
20 run: echo "Langkah deploy berada di sini"
21
1steps:
2 - name: Checkout code
3 uses: actions/checkout@v3
4
5 - name: Set up Node.js
6 uses: actions/setup-node@v3
7 with:
8 node-version: 16
9
10 - name: Install dependencies
11 run: npm install
12
13 - name: Run tests
14 run: npm test
15
16 - name: Build project
17 run: npm run build
18
19 - name: Deploy
20 run: echo "Langkah deploy berada di sini"
21
Perbedaan uses dan run

Kalau kamu bingung apa perbedaan uses dan run dari contoh di atas, berikut adalah penjelasannya.

1. uses

  • Fungsi: Memanggil action eksternal (action yang sudah dibuat sebelumnya, baik oleh GitHub maupun komunitas) atau reusable workflows.
  • Kapan digunakan: Saat ingin memakai action dari marketplace atau dari repo lain.

2. run

  • Fungsi: Menjalankan perintah shell/script langsung (misalnya bash, sh, PowerShell, dll).
  • Kapan digunakan: Saat kamu ingin menulis sendiri perintah atau skrip yang dijalankan dalam job.

Runner

Runner GitHub adalah server yang menjalankan task yang kita buat. Runner ini menjalankan apa yang ditetapkan dalam workflow GitHub kita. Kita dapat menggunakan runner kita sendiri atau menggunakan runner GitHub.

Job

Job adalah kumpulan step yang sedang dijalankan pada runner yang sama. Job didefinisikan dalam sebuah berkas yang disebut workflow.

Workflow

Workflow GitHub adalah serangkaian job yang didefinisikan dalam file YAML, yang dipicu oleh suatu peristiwa atau event. Peristiwa tersebut tidak memicu tugas individual. Peristiwa tersebut hanya dapat memicu alur kerja. Kemudian, task dalam job workflow tersebut dieksekusi.

Context

Menyediakan informasi tentang workflow, job, atau lingkungan. Diakses dengan ekspresi ${{ <context> }}. Contoh:

1${{ github.repository }} # nama repositori
2${{ github.actor }} # nama pengguna yang memicu workflow
1${{ github.repository }} # nama repositori
2${{ github.actor }} # nama pengguna yang memicu workflow

Secrets

Ini digunakan untuk menyimpan dan mengakses informasi sensitif yang digunakan oleh, dan tersedia untuk, alur kerja. Rahasia dihapus saat dicetak ke log. Contohnya adalah ${{secrets.GITHUB_TOKEN}}.