Skip to main content

Golang Gin Profile Page (Part 2)

· 5 min read
Adrianus Vian

gcp

Pada post kali ini kita akan melanjutkan profile page saya dibagian deployment nya. Saya akan menunjukkan bagaimana kita dapat mendeploy aplikasi Go kita dengan murah dan mudah dengan menggunakan platform GCP dengan menggunakan service nya yaitu Cloud Build sebagai CI/CD nya dan juga Cloud Run sebagai PaaS nya.

Yang dibutuhkan

  • Account GCP (daftar)
  • Projek Go yang kita buat sebelumnya (atau project Go webapp lainnya)
  • Git repository untuk menyimpan source code (github/gitlab)
  • Code editor favorit kalian

Setup repository

Kita simpan terlebih dahulu source code yang sudah ada ke dalam git repository agar dapat tersimpan dan dapat di version control. Untuk itu kita buat terlebih dahulu repository kita pada platform yang sudah kita pilih dalam kasus ini saya gunakan github dikarenakan saya sudah memiliki akun github.

new-repo1

Masukkan nama untuk repository milik kalian

new-repo2

Pilih apakah repository kita akan bersifat publik agar dapat dilihat oleh orang lain atau privat sehingga hanya pemilik account dan collaborator yang dapat melihat repository tersebut.

new-repo3

Lalu kita pilih Create Repository dan buat repository nya.

new-repo4

Setelah kita berhasil membuat repository nya kita akan disajikan dengan halaman repository kita kira-kira seperti ini.

new-repo5

Lalu pada command line kita add semua file yang kita buat dan commit perubahan tersebut lalu di push sehingga terupload pada repository tersebut.

# add semua file
git add .

# commit perubahan
git commit -m "Initialize"

# add remote baru
git remote add origin <link-repo>

# push ke branch
git push -u <remote> <branch>

Sekarang source code kita sudah berhasil tersimpan dan siap digunakan untuk melakukan CI/CD.

caution

Disaat melakukan command push, jika username dan password salah kalian harus menggunakan PAT(Personal Access Token) pada saat diminta password, yang dapat kalian dapatkan dengan menuju ke dropdown pada profile diatas kanan lalu ke Settings > Developer settings > Personal access tokens > Generate new token lalu centang bagian repo dan buat tokennya lalu copy dan simpan token yang baru saja di buat.

Membuat Artifact Registry

Agar aplikasi kita dapat kita deploy pada Cloud Run maka kita harus membuat terlebih dahulu Artifact Registry pada project gcp kita, yang akan digunakan untuk menyimpan Docker Image milik kita dan dipull oleh Cloud Run dan dijalankan nantinya.

gcloud artifacts repositories create ct-docker \
--repository-format=docker \
--location=asia

Kita buat registry kita dengan memenuhi free pricing sesuai dengan dokumentasi pricing dari Artifact Registry disini, sehingga kita tidak dikenakan biaya diasaat service kita yang lain yang nantinya akan kita set di region asia juga.

ar-pricing

info

Lihat link disini untuk cara membuat artifact registry repository lebih detail lagi.

Membuat CI/CD

Setelah kita berhasil membuat registry yang dibutuhkan kita sekarang akan membuat CI/CD dari deployment kita agar aplikasi dapat di build dan di run secara otomatis pada saat melakukan push ke repository milik kita.

gcloud beta builds triggers create github \
--name=my-trigger \
--region=asia-southeast1 \
--repo-name=test \
--repo-owner=cocatrip \
--branch-pattern=^master$ \
--build-config=cloudbuild.yaml \
--include-logs-with-status

Membuat build config

Agar Cloud Build dapat mengetahui step apa saja yang harus dilakukan kita harus membuat file cloudbuild.yaml yang akan dibaca oleh Cloud Build dan dijalankan perintah-perintah didalamnya.

cloudbuild.yaml
steps:
# build image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_IMAGE_NAME}', '.']

# push image
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_IMAGE_NAME}']

# deploy image
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'run'
- 'deploy'
- 'cocatrip'
- '--service-account=cocatrip@ct-master.iam.gserviceaccount.com'
- '--image=${_IMAGE_NAME}'
- '--region=asia-southeast1'
- '--allow-unauthenticated'
- '--port=8080'

images:
- '${_IMAGE_NAME}'

substitutions:
_IMAGE_NAME: 'asia-docker.pkg.dev/${PROJECT_ID}/ct-docker/cocatrip:${COMMIT_SHA}'

options:
logging: CLOUD_LOGGING_ONLY
dynamic_substitutions: true

Penjelasan:

  • Pertama kita beri subtitutions terlebih dahulu untuk medeklarasi variable kita sendiri yaitu _IMAGE_NAME yang menyimpan repository docker yang tadi kita buat

  • Lalu kita gunakan variable tersebut pada step build push dan deploy

  • name: memiliki value image repo yang akan digunakan pada saat build step tersebut

  • args: kita beri argument untuk image yang kita beri sesuai dengan step yang kita buat

info
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_IMAGE_NAME}', '.']

step ini akan sama dengan menjalankan command

docker build -t ${_IMAGE_NAME} .
  • images: merupakan hasil jadi dari object apa saja yang terbuat pada saat menjalankan seluruh build

  • options: kita berikan option dynamic_substitutions agar semua varible dapat digantikan dengan value yang sudah didefine secara default oleh Cloud Build (baca disini untuk lebih detail lagi mengenai substitution variable)

Menjalankan build

Untuk menjalankan build kita harus melakukan push ke branch yang ditentukan yaitu pada kasus ini adalah master. Namun kita sedang tidak memiliki perubahan yang ingin kita push ke branch tersebut namun ingin menjalankan build trigger nya, untuk itu kita jalankan secara manual dengan cara membuka page Cloud Build dan menekan tombol RUN pada build trigger yang ingin kita jalankan.

cloud-build1

Lalu tekan tombol RUN TRIGGER

cloud-build2

Lalu tekan tab History pada sidebar bagian kanan dan lihat proses build yang sedang berjalan.

cloud-build3

Tunggu hingga selesai dan dapat kita lihat pada Artifact Registry bahwa akan ada image baru yang sudah terbuat.

Pergi juga ke Cloud Run dan lihat bahwa service sudah berhasil terdeploy

cloud-run1

bila pada kolom Authentication masih belum tertulis Allow unauthenticated maka kita masuk ke dalam service tersebut dan ke tab TRIGGERS dan pilih Allow unauthenticated invocations pada bagian Authentication

cloud-run2

Done!

Sekarang aplikasi akan dapat diakses melalui url service yang diberikan oleh Cloud Run.

Sekian dan Terima kasih!