Belajar Gitlab CI/CD Untuk Build dan Deploy Aplikasi

Halo semua, pada kali ini saya akan sharing cara menggunakan Gitlab CI/CD Untuk Build dan Deploy Aplikasi. Ini merupakan tulisan pertama saya di tahun 2022 setelah sekian lama tidak menulis lagi 😁.

Sebelumnya, apa itu CI/CD? CI/CD (Continuous Integration & Continuous Delivery/Deployment) adalah proses integrasi sebuah kode kedalam repositori (CI) dan proses Delivery/Deployment ke server (CD) dan dilakukan secara otomatis dan terus menerus (Continuous).

Sebelum membuat CI/CD, ada beberapa istilah penting yang harus diketahui terlebih dahulu.

  1. Pipeline
  2. Job
  3. Stage

Pipeline adalah komponen tertinggi dari CI/CD yang terdiri dari Stage dan Job.
Job adalah komponen yang menentukan tugas apa yang akan dilakukan. Contoh: Build aplikasi dan deploy.
Stage adalah komponen yang menentukan kapan job akan dilakukan. Contoh: Setelah build aplikasi maka akan dilakukan deploy.

Ada banyak tools CI/CD saat ini, tapi kali ini saya hanya akan membahas tool dari Gitlab. Artikel ini juga bisa sebagai referensi dasar ketika mau belajar atau implementasi CI/CD.

Langsung saja ke inti artikel ini.

Tujuan
  • Deploy landing page sederhana ke server yang berjalan sebagai container.
Langkah-langkah
  1. Bikin repositori berisikan kode aplikasi lalu push ke gitlab.
  2. Pipeline tidak akan jalan, karena Gitlab CI/CD membutuhkan file bernama .gitlab-ci.yml untuk mendiskripsikan tugasnya. Lalu kita akan menambahkan file tersebut kedalam repositori kita.
  3. Langkah selanjutnya membuat job untuk build aplikasi.
docker_build:
  stage: containerize
  image: docker:latest
  services:
    - name: docker:dind
  before_script:
    - docker login -u ${REGISTRY_USER} -p ${REGISTRY_PASSWORD}
  script:
    - docker build -t $IMAGE_TAG .
    - docker push $IMAGE_TAG
  only:
    - master

docker_build merupakan nama job, di dalam job kita mendiskripsikan stage, image yang akan digunakan oleh job, dan yang terpenting adalah script untuk mendiskripsan job akan melakukan apa.

4. Langkah selanjutnya membuat job untuk deploy aplikasi.

deploy:
  stage: deploy
  image: alpine
  before_script:
    - apk update
    - 'which ssh-agent || ( apk add openssh-client )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | ssh-add -
    - mkdir -p ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
  script:
    - sed -i "s#__IMAGE__#$IMAGE_TAG#g" deploy.sh
    - scp -P $SRV_PORT deploy.sh $SRV_USER@$SRV_HOST:~/
    - ssh $SRV_USER@$SRV_HOST -p $SRV_PORT "bash deploy.sh"
  only:
    - master

5. Untuk Full Code .gitlab-ci.yml seperti ini.

stages:
  - containerize
  - deploy

variables:
  IMAGE_TAG: idryanrizky/gitlab-cicd:${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHA}

docker_build:
  stage: containerize
  image: docker:latest
  services:
    - name: docker:dind
  before_script:
    - docker login -u ${REGISTRY_USER} -p ${REGISTRY_PASSWORD}
  script:
    - docker build -t $IMAGE_TAG .
    - docker push $IMAGE_TAG
  only:
    - master

deploy:
  stage: deploy
  image: alpine
  before_script:
    - apk update
    - 'which ssh-agent || ( apk add openssh-client )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | ssh-add -
    - mkdir -p ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
  script:
    - sed -i "s#__IMAGE__#$IMAGE_TAG#g" deploy.sh
    - scp -P $SRV_PORT deploy.sh $SRV_USER@$SRV_HOST:~/
    - ssh $SRV_USER@$SRV_HOST -p $SRV_PORT "bash deploy.sh"
  only:
    - master

Jika lihat full code diatas, ada stages, variables, dan job. Untuk stages kita harus mendefinisikan urutan job yang akan dilakukan. Untuk variables kita mendefinisakan variable yang akan digunakan oleh job. Jika kalian melihat script pada masing-masing job diatas, jangan bingung, sesuaikan saja dengan cara mendeploy aplikasi kalian.

6. Definisikan variable yang digunakan oleh pipeline.

7. Jika semua sudah dilakukan, langkah terakhir push code kita ke gitlab. Dan jika pipeline kita berhasil maka tampilanya kurang lebih seperti dibawah ini.

Jika pipeline gagal, yaudah ditroubleshoot 😂. Jika ada kendala dan kebingungan saat menjalankan pipeline, bisa komen dibawah, terimakasih.

Selamat mencoba.

One comment

  1. […] artikel sebelumnya, saya membahas Cara Build dan Deploy Aplikasi menggunakan Gitlab CI, tapi pada artikel tersebut saya menggunakan runner gratis yang disediakan oleh Gitlab. Runner yang […]

Leave a Reply