Continuous Integration in GitHub Actions

Muhammad Abdur Rofi Maulidin 🇮🇩
Jawara Cloud
Published in
3 min readFeb 4, 2022

--

Image by Hunter Harritt

Assalamu’alaikum Warahmatullah Wabarakatuh,

Okeh setelah kita membuat beberapa part sebelumnya, sekarang kita coba masuk ke tahap intinya, yaitu kita mulai hands on GitHub Actions.

Sebelum mulai membuat testing, kita coba kenalan dulu dengan GitHub Actions.

“GitHub Actions is a continuous integration and continuous delivery (CI/CD) platform that allows you to automate your build, test, and deployment pipeline. You can create workflows that build and test every pull request to your repository, or deploy merged pull requests to production.” GithubActions

Kurang lebih maksudnya GitHub Actions adalah CI/CD platform yang bisa digunakan untuk build, test, dan deployment. Kurang lebih hampir sama seperti Gitlab CI, Travis CI, dsb.

Okeh kita langsung saja masuk ke script CI nya.

Hal yang pertama kita buat adalah folder .github/workflows pada main project kita, kurang lebih hasilnya jadi seperti ini.

Oke setelah itu baru kita membuat satu script CI dengan extensi yaml. Dan hasil scriptnya akan menjadi seperti ini :

name: CI Testing - PullRequest# Conditionson:pull_request: {}# Jobs / task yang akan dijalankanjobs:# Job untuk memproses testingTest:# Digunakan untuk menggunakan versi Golang dan OS yang berbedastrategy:matrix:go-version: [1.16.x, 1.17.x]os: [ubuntu-latest, macos-latest, windows-latest]runs-on: ${{ matrix.os }}# Menginstall Golang dengan versi yang sudah ditentukansteps:- name: Install Gouses: actions/setup-go@v2with:go-version: ${{ matrix.go-version }}# Melakukan cloning repository- name: Checkout codeuses: actions/checkout@v2# Memulai proses testing- name: Testrun: go test ./...# Job untuk memproses security testingSecurityScaning:# Versi Golang yang akan digunanaknstrategy:matrix:go-version: [1.16.x, 1.17.x]# Operatin System yang akan digunakanruns-on: ubuntu-latest# Environtment yang akan dibutuhkanenv:GO111MODULE: on# Jobs/Task ini tidak akan berjalan apabila steps sebelumnya belum selesaineeds: [Test]steps:# Mulai mencloning repository- name: Checkout Sourceuses: actions/checkout@v2# Mulai menjalankan security scaning- name: Run Gosec Security Scanneruses: securego/gosec@masterwith:args: ./...

Penjelasan :

*Note : Script CI ini akan berjalan apabila ada pull request yang masuk ke dalam repository.

Testing

Pada tahap ini sebenarnya sama pada part sebelumnya, saya hanya ingin melakukan testing terhadap testing yang sudah kita buat, tapi pada tahap ini saya ingin mencoba mengotomatisasikanya menggunakan GitHub Actions.

Security Scanning

Kemudian pada security scanning disini saya menggunakan thirdparty yaitu gosec, disini gosec akan melakukan scanning terhadap pull request yang masuk, apabila codingan tersebut sudah memenuhi standar yang sudah ditentukan gosec maka proses berhasil dan codingan dinyatakan aman.

Output Success :

Output Failed :

Kenapa bisa failed, kalo kita coba lihat dari workflows SecurityTest.

Sebelum saya melakukan PR, pada codingan dibawah saya menghapus error handlingnya

Before:

r.Get("/", func(w http.ResponseWriter, r *http.Request) {w.Header().Set("Content-Type", "application/json")w.WriteHeader(http.StatusOK)log.Println(w.Write([]byte(`{"status":"root"}`)))})

After:

r.Get("/", func(w http.ResponseWriter, r *http.Request) {w.Header().Set("Content-Type", "application/json")w.WriteHeader(http.StatusOK)w.Write([]byte(`{"status":"root"}`))})

Gosec akan melakukan scanning, apabila pada kodingan tidak ada proses error handling maka proses scanning akan error.

Sekian, Terimakasih ~.

About me

I’m Muhammad Abdur Rofi Maulidin, a DevOps Engineer passionate about optimizing software development processes by supporting cloud infrastructure management like kubernetes orchestration, and automations. Dedicated to support the reliability, availability, and performance of systems by implementing SLI/SLO based on performance monitoring for business requirement.

Feel free to keep in touch with me:

Let’s go to the cloud 🚀

Free Palestine 🇵🇸

--

--