Berkenalan dengan gitlab-ci.yml

Luthfi Dzaky
PPL D7 — Fasilkom UI
3 min readApr 3, 2019
Gitlab CI

Continuous Integration (CI) adalah kompilasi atau pembuatan perangkat lunak secara terus menerus. Dengan melakukan check-in pada setiap sistem yang memicu proses kompilasi, menjalankan tes unit, dan sebagainya. Dengan cara menempatkan setiap perubahan yang dibuat harus melalui proses automated build, deploy, dan test system (bukan cuma unit test) untuk memverifikasi kesiapannya sebelum rilis. Pastikan pada implementasi gitlab kita memiliki mekanisme automated deployment / compilation / testing pada rangkaian environment.

Dan semua itu ditulis pada gitlab-ci.yml

Sebelum PPL diambil, kami sudah terlebih dahulu belajar mengenai gitlab-ci.yml di perkuliahan web. Perbedaannya pada gitlab-ci.yml pada PPW, kami sudah tinggal memakai gitlab-ci.yml yang sudah ada. Perbedaannya adalah pada PPW stagesnya seperti berikut:

stages:
- test
- deploy

Sedangkan pada perkuliahan PPL:

stages:
— build
— test
— deploy

Setiap standar stages berbeda-beda. Untuk format standar Node seperti di atas, build-test-deploy. Kami memiliki dua build-test-deploy karena untuk memisahkan repository dari HappyFresh dan backend kita sendiri. Pada medium kali ini pada backend kami.

variables:
ENVIRONMENT: GITLAB
HTTP_PROXY: http://proxy.cs.ui.ac.id:8080
HTTPS_PROXY: http://proxy.cs.ui.ac.id:8080
FTP_PROXY: http://proxy.cs.ui.ac.id:8080
NO_PROXY: "localhost,127.0.0.1,gitlab.cs.ui.ac.id,docker:2375,docker:2376,api.happyfresh.com"
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2

Sebelumnya kita menginisiasi terlebih dahulu variabel yang akan digunakan pada tahap deploying. Kemudian pada tahap build:

build-service:
image: node:latest
stage: build
before_script:
- cd service
script:
- npm install
  • image: berarti image yang akan dijalankan gitlab runner adalah image node dengan versi terakhir.
  • stage: artinya build-service dijalankan dengan label build pada saat automasi.
  • before_script: artinya sebelum menjalankan script yang diinginkan, maka akan pindah ke folder service
  • script: bagian ini akan melakukan perintah yang kita inginkan. Pada gitlab-ci.yml diatas saat build kami menginstall node package manager yang sudah ditentukan pada package.json.
test-service:
image : node:latest
stage : test
before_script:
- cd service
script:
- npm install
- npm run coverage
coverage: '/Code coverage: \d+\.\d+/'
  • image : berarti image yang akan dijalankan gitlab runner adalah image node dengan versi terakhir.
  • stage : artinya test-service memiliki label test pada saat automasi
  • before-script: seperti sebelumnya, pindah dari root menuju folder service.
  • script&coverage: pada bagian ini perintahnya berbeda dengan sebelumnya, setelah melakukan npm install maka akan dijalankan run coverage untuk melakukan testing terhadap fungsionalitas yang kita sudah buat menggunakan npm run coverage yang sebelumnya kita sudah atur akan berjalan seperti apa di package.json
.deploy-template: &deploy-template
variables:
ENVIRONMENT: GITLAB
HTTP_PROXY: http://proxy.cs.ui.ac.id:8080
HTTPS_PROXY: http://proxy.cs.ui.ac.id:8080
FTP_PROXY: http://proxy.cs.ui.ac.id:8080
NO_PROXY: "localhost,127.0.0.1,gitlab.cs.ui.ac.id,docker:2375,docker:2376,api.happyfresh.com"
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
image: docker:stable
stage: deploy
tags:
- build
- docker
services:
- docker:dind
script:
- docker build -t registry.docker.ppl.cs.ui.ac.id/ppld7/$TYPE-$ENVIRONMENT:latest .
- docker push registry.docker.ppl.cs.ui.ac.id/ppld7/$TYPE-$ENVIRONMENT:latest
service_dev_deploy:
<<: *deploy-template
variables:
TYPE: "service"
ENVIRONMENT: "dev"
before_script:
- cd service
- docker info
only:
refs:
- /^US-.*$/
changes:
- service/**/*
- .gitlab-ci.yml

Kurang lebih bagian di atas adalah mendeploy hasil dari aplikasi kami. Dengan menggunakan Docker Image kami melakukan build image kemudian melakukan push ke registry yang sudah disediakan PPL. Registry juga bisa menggunakan registry dari gitlab. Namun, pada PPL kami sudah disediakan registrynya.

Sekian dari saya,

— Luthfi Dzaky Saifuddin

--

--