Deployment, Continuous Integration, Software Quality Assurance

Michael Tengganus
Basic People
Published in
3 min readApr 4, 2019
src:twitter

Software yang team kami menggunakan Docker sebagai deployment container untuk menjaga scalability dan gitlab repository sebagai Continuous Integration dan gitlab sebagai Software Quality Assurance secara otomatis melewati test build didalam CI tersebut. Untuk secara manual pengecheckan Basic People memiliki Fran untuk melakukannya secara manual.

Docker React

Docker menjalankan aplikasi bertipekan image dimana sebuah aplikasi dalam hal ini build React harus dimasukkan kedalam docker image terlebih dahulu untuk di registry menjadi image. Docker adalah platform container untuk pengembangan software yang memiliki database berbeda dari container satu dan yang lainnya. Aplikasi react kami menggunakan Nginx sebagai static content dan pengaturan static ip untuk penembakan API yang ada. Untuk membuat docker image kita memerlukan Dockerfile didalam directory root aplikasi kita, dimana dockerfile merupakan file yang terdiri dari command untuk mem build image docker tersebut, berikut dockerfile yang digunakan pada team kami :

FROM tiangolo/node-frontend:10 as build-stage #1
WORKDIR /app #2
COPY package*.json /app/ #3
RUN npm install #4
COPY ./ /app/ #5
RUN npm run build #6
FROM nginx:1.15 #7
COPY — from=build-stage /app/build/ /usr/share/nginx/html #8
COPY — from=build-stage /nginx.conf /etc/nginx/conf.d/default.conf #9

#1 Menggunakan tiangolo sebagai frontend base image. tiangolo adalah sebuah micro framework untuk mendeploy dalam flask application dalam docker

#2 lalu membuat working directory /app. app didalam sini merupakan sebuah directory/folder tempat tersimpannya aplikasi , “app” tersebut juga dapat diubah sesuai keinginan/nama project

#3 Copy file yang memiliki package di awal dan diakhiri dengan .json ke dalam directory app.

#4 Menjalankan npm install untuk menginstall package-package yang dibutuhkan react app. Package-package yang diinstall akan mengikuti dengan package yang terdapat di dalam package.json

#5 copy source code kedalam working directory app

#6 menjalankan run build untuk menghasilkan build berupa image dari react.

#7 menggunakan nginx, nginx merupakan software web server

#8 mengcopy hasil build npm kedalam base image nginx sebagai static, dan

#9 mengcopy nginx.conf yang ada ke dalam konfigurasi nginx. nginx.conf ini menimpan seluruh configurasi yang dibutuhkan untuk mengatur dan menjalankan nginx tersebut

Secara General

hal yang dapat dilakukan tanpa spesifikasi khusus yang digunakan dalam project kami, dapat menggunakan

FROM tiangolo/node-frontend:10 as build-stage #1
WORKDIR /app #2
COPY package*.json /app/ #3
RUN npm install #4
COPY ./ /app/ #5
RUN npm run build #6

Continuous Integration dan Software Quality Assurance

CI dan SQA pada kelompok kami di handle secara otomatis melalui CI/CD didalam gitlab repository menggunakan gitlab pipeline .gitlab-ci.yml

stages:
— test
— deploy-developer

test:
image: node:latest
script:
— npm install
— npm run test

deploy-developer:
image: gitlab/dind:latest
stage: deploy-developer
tags:
— docker
before_script:
— docker info
script:
— docker pull registry.docker.ppl.cs.ui.ac.id/ppla6/devteam
— docker build -t devteam .
— docker tag devteam registry.docker.ppl.cs.ui.ac.id/ppla6/devteam
— docker push registry.docker.ppl.cs.ui.ac.id/ppla6/devteam

Pembuatan stage untuk test dan deployment

Stage test, melakukan command npm run test untuk melakukan semua test yang ada di aplikasi.

Stage deploy , menggunakan gilab/dind sebagai image dind service, dan tag : docker untuk menjalankan build, lalu script menjalankan pull registry dari docker team ppla6, lalu membuild docker dengan nama devteam, dan mengepush registery devteam tersebut kedalam project ppla6.

.gitlab-ci.yml akan berjalan secara otomatis setiap ada update/push dari branch dalam repository.

Secara Umum, script CI yang dibuat diatas dapat digunakan juga pada CI untuk docker kalian.

Why Docker?

  • Environment developer yang sama pada setiap member, semua developer menggunakan OS yang sama walaupun host menggunakan OS yang berbeda, diakibatkan adanya Virtual Machine dalam Docker
  • Deployment environment yang sama dengan production environment, dimana saat react build berjalan dengan baik, maka deployment juga berjalan dengan baik
  • Pengompilian / build dapat dilakukan didalam Docker
  • Docker dapat menyediakan bahasa pemrograman, dan Docker dapat memiliki berbagai versi dengan Image, tanpa harus menginstall berbagai library ke komputer
  • Docker vs Heroku, Heroku memiliki front end dan back end berbeda, yang tidak bisa di initialize secara bersamaan, sedangkan Docker dapat menjalankan semua itu secara bersamaan dan dalam satu kesatuan

--

--