CI/CD in nutshell

Andhika A Sentosa
fork-suling
Published in
2 min readJul 4, 2018

Secara singkat, Continous Integration (CI) dan Continous Delivery (CD) merupakan development model yang memanfatkan pipeline dimana terdapat otomatisasi build, integrasi, dan test. Sehingga dapat dilakukan pengembangan program dan optimalisasi secara effisien.

Pada postingan ini saya akan menjelaskan rincian CI yang digunakan pada development ini.

Diawali dengan variable, dimana variable yang merupakan inintial value yang dibutuhkan dari CI. Dalam hal ini berisi database variables dan service database (berupa postgres)

variables:
DATABASE_URL: postgres://runner@postgres:5432/suling_dev
POSTGRES_DB: suling_dev
POSTGRES_USER: runner
POSTGRES_PASSWORD: ""
services:
- postgres:latest
stages:
- build
- test
- deploy

Stage yang akan dilakukan dalam CI/CD secara berurutan:

  • Build: stage untuk compiling source code
  • Test: stage untuk melalukan integrasi dan testing code
  • deploy: stage untuk melakukan deployment source code ke platform

Building Stage

stages:
- build
- test
- deploy
build:
image: node:latest
stage: build
script:
- cd frontend/v2
- npm install
- NODE_ENV=production npm run build

Isi build berupa image (required image compiler), stage, dan script utama. Dalam hal ini, compiler dibutuhkan untuk membangun Frontend yang berbasis ReactJS pada folder frontend/v2.

Dalam stage ini, npm akan menginstall depedency dan requirement yang dibutuhkan dalam frontend. Lalu membangun NODE_ENV (enviorment) yang berupa hasil compile yang bernama production.

Test Stage

be_tests:
image: python:3.6
stage: test
before_script:
- cd backend/v1
- pip install -r requirements.txt
- pip uninstall python-dotenv -y
- pip install python-dotenv
- python manage.py makemigrations
- python manage.py migrate
- python manage.py collectstatic --no-input
when: on_success
script:
- coverage run --source="." manage.py test
- coverage report -m
- pycodestyle --exclude='manage.py','./hound/*','. /*/migrations','./*/apps.py','./*/urls.py','./*/models.py','./*/tests.py' ./

Di stage ini mengupakan tahap pengujan backend yang berbasis Python yang menggunakan image python versi 3.6. Pada bagian before_script (sebelum stage pengujian), adalah tahapan yang dilakukan untuk menginstall requirements/dependency untuk apps ini, dan diteruskan dengan migrasi database. Ketika before script tersebut sukses (when: on_success), maka akan dijalankan Test Stage-nya, yaitu menjalankan unit test untuk apps Django tersebut, lalu menampilkan code coverage dan juga mengecek lint.

Deployment Stage

Dalam developmet kali ini dikarenakan Original CI deployment ke main deployment (suling.cs.ui.ac.id) perlu adanya server deployment lain dalam deployment sprint ini.

Direncanakan akan digunakan Heroku.com

Berikut script CI original: (akan diubah)

deploy_stag:
script:
# install ssh-agent
- 'which ssh-agent || ( apt-get update -y
&& apt-get install openssh-client -y )'
# run ssh-agent
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan -H 52.148.80.48 >> ~/.ssh/known_hosts
- ssh -t suling@52.148.80.48 "sudo rm -rf suling-stag &&
git clone -b sit_uat --single-branch
https://gitlab .com/PPL2018csui/
Kelas-C/ppw-final.git suling-stag"
- ssh -t suling@52.148.80.48
"bash stag.sh && cd suling-stag && sudo bash run.sh"
when: on_success
only:
- sit_uat
stage: deploy
environment:
name: staging

Yang singkatnya, script deployment tersebut akan mendeploy ke server suling.cs.ui.ac.id (master deployment) dengan menggunakan ssh-agent untuk dapat login pada jaringan server cs.ui.ac.id, lakukan inintialisasi private key & ssh-keyscan. Setelah masuk jaringan, clone repo pada branch sit_uat ke dalam server dan jalankan ./run.sh.

--

--

Andhika A Sentosa
fork-suling

IT Infrastructure, Linux Enthusiast, Have Dream expanding Blockchain.