CI/CD Gitlab CI and Google Cloud Run





Dalam catatan kali ini kita akan membuat CI/CD pipeline menggunakan Gitlab CI yang akan di deploy di serverless Google Cloud Run. 

CI/CD? 
CI/CD atau Continuous Integration, Continuous Deployment adalah proses otomatis yang digunakan untuk mengembangkan, menguji, dan deploy aplikasi atau proyek. Jadi, CI/CD bikin proses pengembangan aplikasi jadi lebih cepat, mudah, dan bisa mengurangi human error. Konsepnya, setiap kali ada perubahan di kode kita, CI/CD  tools akan melakukan build, test, dan deploy otomatis, tanpa harus kita lakukan secara manual. Contoh CI/CD tools adalah Jenkins, Gitlab CI, Travis CI, Circle CI, Github Action, dan masih banyak yang lainya. 

Gitlab CI?
GitLab CI adalah fitur yang ada di GitLab yang bisa kita gunakan untuk jalankan skrip otomatis setiap kali ada perubahan di repositori Git kita. Biasanya, fitur ini dipakai untuk nge-test, nge-build, dan nge-deploy aplikasi atau projek kita. GitLab CI adalah salah satu tools CI/CD yang lagi ramai digunakan. 

Cloud Run?
Cloud Run adalah layanan dari Google Cloud Platform (GCP) yang memungkinkan kita menjalankan aplikasi container di cloud dengan mudah. Cloud Run mengambil container yang telah kita buat, lalu menjalankannya di server yang disediakan oleh Google. Fitur yang menarik dari Cloud Run adalah kita hanya perlu membayar untuk waktu yang kita gunakan, sehingga kita tidak perlu khawatir tentang biaya yang mungkin timbul saat tidak menggunakanya.


Prerequisites

  • Punya akun GCP, jika belum ada bisa membuat akun trial disini 
  • Membuat Gitlab repository, contoh kode nya disini
  • Enable Cloud Run API

Membuat Service Account

Jika sudah, kita bisa memulai dengan membuat service account terlebih dahulu
  • masuk ke menu IAM & Admin
  • create service account
  • kemudian download key nya, masuk ke menu keys -> add key -> create new key

Menambahkan Variabel di Gitlab

masuk ke repository gitlab, Settings -> CI/CD ->  Variables -> Add variable


Menyiapkan Aplkasi

Bagi yang ingin mencoba, silakan clone repository yang sudah saya siapkan, disini ada aplikasi sederhana menggunakan node js, hanya memunculkan hello world, namanya juga sederhana.

git clone https://gitlab.com/masuddhh/gitlab-ci-cloudrun.git

cd gitlab-ci-cloudrun

npm install && npm start

begini tampilanya jika dijalankan di local


Menyiapkan Dockerfile

Dockerfile sederhana untuk aplikasi nodejs

# Stage 1: Build the Node.js app
FROM node:14 AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# Stage 2: Create a smaller image
FROM node:14-slim
WORKDIR /app
COPY --from=build /app /app
EXPOSE 3000
CMD ["node", "app.js"]


Membuat Pipeline Gitlab

Untuk membuat pipeline pada Gitlab CI kita perlu membuat file .gitlab-ci.yml,  ini adalah file yang menjalankan pipeline kita nanti, disini saya membuat pipeline sederhana dengan stage build dan deploy

oiya untuk registry image, saat blog ini dibuat cloud run tidak bisa menggunakan container registry gitlab, maka dari itu saya push juga ke GCR (Google Container Registry) agar bisa running di cloud run

stages:
   - build
   - deploy

variables:
    SERVICE_NAME: simple-app
    GCLOUD_PROJECT_ID: $GCLOUD_PROJECT_ID # Set this in your GitLab project's CI/CD settings
    GCLOUD_SERVICE_KEY: $GCLOUD_SERVICE_KEY # Set this in your GitLab project's CI/CD settings
    IMAGE_TAG: $CI_PIPELINE_IID
    IMAGE_TAG_GCR: gcr.io/$GCLOUD_PROJECT_ID/$CI_PROJECT_NAME:$IMAGE_TAG

build_docker_image:
    stage: build
    image: quay.io/buildah/stable:v1.23.3
    before_script:
       - curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-442.0.0-linux-x86_64.tar.gz
       - tar -xf google-cloud-cli-442.0.0-linux-x86_64.tar.gz
       - ./google-cloud-sdk/install.sh
     script:
       - echo $GCLOUD_SERVICE_KEY > gcloud-service-key.json
       - ./google-cloud-sdk/bin/gcloud auth activate-service-account --key-file gcloud-service-key.json
       - ./google-cloud-sdk/bin/gcloud config set project $GCLOUD_PROJECT_ID
       - export HOME=$CI_BUILDS_DIR
       - buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
       - cat gcloud-service-key.json | buildah login -u _json_key --password-stdin gcr.io
       - buildah build -t $IMAGE_TAG
       - buildah push $IMAGE_TAG docker://$CI_REGISTRY_IMAGE:$IMAGE_TAG #push to container registry gitlab
       - buildah push $IMAGE_TAG $IMAGE_TAG_GCR #push to google container registry

deploy_to_cloud_run:
    stage: deploy
    image: google/cloud-sdk:latest
    script:
       - echo $GCLOUD_SERVICE_KEY > gcloud-service-key.json
       - gcloud auth activate-service-account --key-file gcloud-service-key.json
       - gcloud config set project $GCLOUD_PROJECT_ID
       - gcloud run deploy $SERVICE_NAME --image $IMAGE_TAG_GCR --region=asia-southeast1 --port 3000 --platform managed --allow-unauthenticated
     only:
         - main


Deploy

Selanjutnya tinggal kita deploy dengan cara melakukan perubahan dan commit ke gitlab repo kita, maka pipeline akan otomatis menjalankan skrip dan memulai proses build dan deploy

Build -> Pipelines



Cek

Di stage deploy, jika berhasil akan memunculkan url dari cloud run 




Sekian,






Post a Comment

0 Comments