GitHub Actions untuk publikasi situs web statis dari Jekyll
Daftar Beta
Saat ini GitHub Actions masih dalam fase beta. Untuk mendaftarkanmu atau organisasimu, kamu harus mengunjungi laman ini: https://github.com/features/actions.
Tunggulah beberapa hari hingga kamu memperoleh surel berikut ini:
Menambahkan Workflow
Hal pertama yang saya perhatikan adalah kehadiran tab baru di laman repositori saya:
GitHub akan membuat folder baru di dalam direktori .github/workflow
. Folder workflow
ini akan dibaca oleh GitHub untuk menjalankan semua Action yang kita definisikan.
Awalnya saya bingung untuk menambahkan sebuah Action 😅 (saya tipe orang yang cenderung untuk membuat dahulu, baca dokumentasi belakangan), untungnya di halaman tersebut ada beberapa contoh yang bisa kita jadikan basis Action
kita. Saya pilihlah "Build and test a Ruby project with Rake".
Saya memilih ini karena situs web https://ruby.id dipublikasikan dengan menggunakan perintah Rake
. Pikir saya akan mudah... ternyata tidak juga 😅.
Workflow publikasi situs id-ruby
Singkatnya, inilah workflow pertama yang saya buat untuk publikasi situs web id-ruby.
Saya akan jelaskan satu per satu.
Memberikan nama dan menentukan kondisi pemicu
name: Deploy
on:
push:
branches:
- master
Setiap aksi wajib diberikan nama name
dan kondisi on
. Pada contoh di atas, saya memberikan nama Deploy
dan akan dipicu ketika ada even push
ke cabang git master
. Kenapa hanya master
? Karena saya tidak ingin aksi ini dipicu oleh setiap commit. Terlalu boros.
Untuk melihat even-even lainnya, silakan melihat dokumentasi berikut: https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events.
Menentukan Virtual Environment
jobs:
build:
runs-on: ubuntu-latest
Karena saya kurang mengerti opsi-opsinya, maka saya menggunakan ubuntu-latest
sebagaimana sudah dicontohkan sebelumnya 😅. Sip, beres. Tentunya kamu bisa melihat dan memilih-milih Virtual Environment lainnya di https://help.github.com/en/articles/virtual-environments-for-github-actions.
Menentukan langkah-langkah untuk menyiapkan aksi
Langkah-langkah ini saya peroleh melalui trial and error. Yang pertama kali saya lakukan sebenarnya adalah mencoba mengubah sedikit dari contoh yang sudah diberikan. Ini adalah steps
dari contoh "Build and test a Ruby project with Rake":
steps:
- uses: actions/checkout@v1
- name: Set up Ruby 2.6
uses: actions/setup-ruby@v1
with:
ruby-version: 2.6.x
- name: Build and test with Rake
run: |
gem install bundler
bundle install --jobs 4 --retry 3
bundle exec rake
Saya hanya mengganti bundle exec rake
dengan bundle exec rake site:publish
. Sebuah perintah yang sudah ada sebelumnya di repositori id-ruby.
Ternyata gagal 😢, karena perintah rake site:publish
yang ada tidak mempertimbangkan perintah tersebut dijalankan di komputer orang lain (server). Karena komputer lain belum login ke GitHub, sehingga tidak bisa melakukan git push
ke GitHub.
Cara mudah untuk mengatasi hal di atas adalah dengan menambahkan username dan password untuk login ke SSH GitHub. Sebagai pengembang yang masih ingin berkarir di bidang teknologi informasi, saya pun mencari cara lain supaya saya tidak perlu menambahkan username dan password 🕵️♂️.
Mencari cara untuk login ke GitHub tanpa mempublikasikan username dan password
Oke, ketemu GitHub Personal Access Token. Ternyata kita bisa membuat access token yang bisa dilampirkan pada konfigurasi git remote
.
Tunggu dulu 🤔, bukannya ini sama aja yah dengan melampirkan password? 😅 Cuma diganti ke token saja.
Oke, ketemu Encrypted Variables, atau biasa disebut Secrets. Nah, ternyata saya bisa menambahkan sebuah variabel rahasia ke dalam repositori dan memanggilnya dari Actions. Misalnya: ${{ secrets.GH_PAGES_TOKEN }}
.
Berhasil. Token pun aman.
Ternyata mudah jadinya, saya cukup mengubah sedikit Rakefile
yang sudah ada https://github.com/id-ruby/id-ruby/pull/121/files untuk menambahkan variabel environment GH_PAGES_TOKEN
dan menyertakannya pada langkah berikut:
- name: Deploy site
run: bundle exec rake site:publish
env:
GH_PAGES_TOKEN: ${{ secrets.GH_PAGES_TOKEN }}
Tadaaa 🎉! Setelah berkali-kali mencoba, akhirnya berhasil!
Selamat menikmati 😇
Psst... masih ada sedikit tiket RubyConf Indonesia, lho. 👉 https://ruby.id/ticket