Bagaimana cara menggunakan GitHub Actions untuk membuat alur kerja untuk CI?
Ingat bahwa tujuan Anda adalah mengotomatiskan proses pembuatan dan penerbitan kode sehingga fitur diperbarui setiap kali pengembang menambahkan perubahan ke basis kode.
Untuk menerapkan proses ini, Anda mempelajari cara:
- Membuat alur kerja dari templat.
- Hindari duplikasi dengan menggunakan alur kerja yang dapat digunakan kembali.
- Uji terhadap beberapa target.
- Memisahkan tugas pembangunan dan pengujian.
Membuat alur kerja dari templat
Untuk membuat alur kerja, biasanya dimulai dengan menggunakan templat. Templat memiliki pekerjaan dan langkah-langkah umum yang telah dikonfigurasi sebelumnya untuk jenis otomatisasi tertentu yang Anda terapkan. Jika Anda tidak terbiasa dengan alur kerja, pekerjaan, dan langkah-langkah, lihat Mengotomatiskan tugas pengembangan dengan menggunakan modul gitHub Actions.
Pada halaman utama repositori GitHub Anda, pilih Tindakan, lalu pilih Alur kerja baru.
Pada halaman Pilih alur kerja , Anda bisa memilih dari berbagai jenis templat. Salah satu contohnya adalah templat Node.js. TemplatNode.js menginstal Node.js dan semua dependensi, membangun kode sumber, dan menjalankan pengujian untuk berbagai versi Node.js. Contoh lain adalah templat paket Python , yang menginstal Python dan dependensinya, lalu menjalankan pengujian, termasuk lint, dalam beberapa versi Python.
Untuk memulai dengan templat alur kerja Node.js, di kotak pencarian, masukkan Node.js.
Di hasil pencarian, di panel Node.js , pilih Konfigurasikan.
File node.js.yml untuk proyek Anda dibuat dari templat:
name: Node.js CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm run build --if-present
- run: npm test
Seperti yang terlihat dalam atribut on, alur kerja contoh ini berjalan sebagai respons terhadap push ke repositori atau ketika permintaan pull dibuat terhadap cabang utama.
Alur kerja ini menjalankan satu pekerjaan, yang ditunjukkan oleh atribut job.
Atribut runs-on menentukan bahwa, untuk sistem operasi, alur kerja berjalan pada ubuntu-latest. Atribut node-version menentukan bahwa ada tiga build, masing-masing satu untuk Node.js versi 14.x, 16.x, dan 18.x. Atribut matrix dijelaskan secara mendalam nanti dalam modul.
Pada atribut jobs, langkah-langkah menggunakan action GitHub Actions actions/checkout@v3 untuk memperoleh kode dari repositori Anda ke dalam mesin virtual (VM) dan actions/setup-node@v3 untuk menyiapkan versi Node.jsyang benar. Anda menentukan bahwa Anda ingin menguji tiga versi Node.js dengan menggunakan ${{ matrix.node-version }} atribut . Atribut ini mereferensikan matriks yang Anda tentukan sebelumnya. Atribut cache menentukan manajer paket untuk penyimpanan sementara di direktori default.
Bagian terakhir dari langkah ini menjalankan perintah yang digunakan oleh proyek Node.js. Perintah npm ci menginstal dependensi dari package-lock.json file.
npm run build --if-present menjalankan skrip build jika ada.
npm test menjalankan kerangka kerja pengujian. Templat ini mencakup langkah-langkah build dan pengujian dalam pekerjaan yang sama.
Untuk mempelajari selengkapnya tentang npm, lihat dokumentasi npm:
- penginstalan npm
- npm menjalankan
- pengujian npm
Tim pengembang dapat memperoleh manfaat dari menggunakan alur kerja yang dapat digunakan kembali untuk menyederhanakan dan menstandarkan langkah-langkah otomatisasi berulang. Dengan menggunakan alur kerja yang dapat digunakan kembali, Anda dapat mengurangi redundansi, meningkatkan keberlanjutan, dan memastikan konsistensi di seluruh alur integrasi berkelanjutan/penyebaran berkelanjutan (CI/CD).
Hindari duplikasi dengan menggunakan alur kerja yang dapat digunakan kembali
Seiring bertambahnya skala tim dan proyek, biasanya melihat langkah-langkah yang sama diulang di beberapa file alur kerja. Langkah-langkah ini mungkin termasuk pemeriksaan kode, instalasi ketergantungan, pengujian, dan penyebaran. Duplikasi semacam ini tidak hanya mengacaukan basis kode Anda tetapi juga meningkatkan waktu pemeliharaan ketika perubahan kode diperlukan. Alur kerja yang dapat digunakan kembali menyelesaikan masalah ini dengan memungkinkan Anda menentukan logika otomatisasi sekali, lalu memanggil logika dari alur kerja lain.
Alur kerja yang dapat digunakan kembali adalah alur kerja GitHub Actions khusus yang dapat dipanggil alur kerja lain, mirip dengan fungsi dalam pemrograman. Anda membuatnya untuk berbagi logika berulang seperti langkah build, prosedur pengujian, atau strategi penyebaran. Setelah membuat alur kerja yang dapat digunakan kembali, Anda dapat mereferensikannya dari alur kerja lain di repositori yang sama atau bahkan di repositori yang berbeda.
Mengapa menggunakan alur kerja yang dapat digunakan kembali?
Ini adalah manfaat menggunakan alur kerja yang dapat digunakan kembali:
- Konsistensi. Teams dapat mengikuti standar otomatisasi yang sama di semua proyek.
- Efisiensi. Alih-alih menyalin dan menempelkan langkah-langkah, Anda hanya menunjuk ke alur kerja yang dapat digunakan kembali.
- Pembaruan yang lebih mudah. Saat proses berubah, seperti dengan menambahkan langkah pengujian, Anda memperbaruinya di satu lokasi. Kemudian semua alur kerja yang menggunakan manfaat alur kerja secara otomatis.
- Skalabilitas. Alur kerja yang dapat digunakan kembali sangat ideal untuk platform atau tim DevOps yang mengelola beberapa layanan.
Selanjutnya, jelajahi cara menggunakan alur kerja yang dapat digunakan kembali untuk meningkatkan proyek Anda.
Menerapkan alur kerja yang dapat digunakan kembali
Untuk menggunakan alur kerja yang dapat digunakan kembali:
- Di folder repositori Anda, buat alur kerja yang dapat digunakan kembali. File menyertakan langkah-langkah otomatisasi yang ingin Anda bagikan, seperti langkah-langkah umum yang terlibat dalam pengujian, pembuatan, dan penyebaran.
- Secara eksplisit, izinkan alur kerja untuk dapat digunakan kembali dengan mengonfigurasinya menggunakan acara
workflow_call. - Dalam alur kerja utama Anda (alur kerja pemanggil), referensikan file yang dapat digunakan kembali ini dan berikan input atau rahasia yang diperlukan.
Untuk mengilustrasikan keuntungan dari alur kerja yang dapat digunakan kembali, pertimbangkan skenario dunia nyata berikut.
Contoh
Bayangkan organisasi Anda memiliki 10 layanan mikro. Ke-10 layanan mikro memerlukan langkah yang sama untuk:
- Jalankan pengujian
- Kode Lint
- Menyebarkan ke lingkungan tertentu
Tanpa alur kerja yang dapat digunakan kembali, setiap repositori akhirnya menduplikasi logika yang sama di beberapa file alur kerja, yang mengarah ke langkah-langkah berulang dan pemeliharaan yang lebih sulit.
Jika Anda menggunakan alur kerja yang dapat digunakan kembali:
- Anda menentukan proses sekali dalam file pusat (misalnya, di
ci-standard.yml). - Anda memanggil file ini dari setiap alur kerja layanan mikro sendiri, meneruskan variabel seperti lingkungan atau nama aplikasi.
Jika langkah atau alat keamanan baru ditambahkan, seperti untuk memindai kerentanan, Anda menambahkannya hanya sekali dalam alur kerja yang dapat digunakan kembali. Ke-10 layanan mikro segera mulai menggunakan proses yang diperbarui. Anda tidak perlu memodifikasi 10 layanan mikro.
Dengan memahami bagaimana alur kerja yang dapat digunakan kembali dan manfaatnya, Anda dapat mengadopsi praktik terbaik untuk memaksimalkan efektivitasnya dan memastikan integrasi yang mulus dengan alur CI/CD Anda.
Praktik terbaik
- Pusatkan alur kerja yang dapat digunakan kembali dalam satu repositori jika Anda berencana untuk membagikannya di seluruh tim.
- Gunakan cabang atau tag untuk membuat versi alur kerja Anda (misalnya, gunakan
@v1), sehingga Anda dapat dengan mudah mengembalikan perubahan jika diperlukan. - Mendokumentasikan input dan rahasia dengan jelas. Alur kerja yang dapat digunakan kembali sering mengandalkan input dan rahasia. Teams perlu mengetahui informasi apa yang akan digunakan.
- Jika Anda hanya perlu menggunakan kembali beberapa langkah, gabungkan alur kerja yang dapat digunakan kembali dengan tindakan komposit alih-alih membuat alur kerja penuh.
Alur kerja yang dapat digunakan kembali adalah cara yang ampuh untuk memberlakukan konsistensi, mengurangi duplikasi, dan menskalakan praktik DevOps di tim teknik apa pun. Baik Anda mengelola satu repositori, layanan mikro, atau pustaka sumber terbuka, alur kerja yang dapat digunakan kembali dapat menyederhanakan otomatisasi, sehingga CI/CD Anda lebih cepat, lebih bersih, dan lebih mudah dikelola.
Mengkustomisasi templat alur kerja
Di awal modul ini, Anda mempertimbangkan skenario di mana Anda perlu menyiapkan CI untuk tim pengembang Anda. Templat Node.js adalah awal yang bagus, tetapi Anda ingin menyesuaikannya agar lebih sesuai dengan kebutuhan tim Anda. Anda ingin menargetkan berbagai versi Node.js dan sistem operasi yang berbeda. Anda juga ingin langkah-langkah build dan pengujian menjadi pekerjaan terpisah.
Berikut adalah contoh alur kerja yang dikustomisasi:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16.x, 18.x]
Dalam contoh ini, Anda mengonfigurasi matriks build untuk pengujian di beberapa sistem operasi dan versi bahasa. Matriks ini menghasilkan empat build, satu untuk setiap sistem operasi yang dipasangkan dengan setiap versi Node.js.
Empat build dan pengujiannya menghasilkan sejumlah besar data log. Mungkin sulit untuk mengurutkan semuanya. Dalam sampel berikut, Anda memindahkan langkah pengujian ke pekerjaan pengujian khusus. Pekerjaan ini menguji terhadap beberapa target. Memisahkan langkah-langkah build dan pengujian memudahkan untuk bekerja dengan data log.
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16.x, 18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: npm install, and test
run: |
npm install
npm test
env:
CI: true