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.
Masukkan nama untuk repository milik kalian
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.
Lalu kita pilih Create Repository
dan buat repository nya.
Setelah kita berhasil membuat repository nya kita akan disajikan dengan halaman repository kita kira-kira seperti ini.
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.
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.
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.
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 buatLalu kita gunakan variable tersebut pada step build push dan deploy
name:
memiliki value image repo yang akan digunakan pada saat build step tersebutargs:
kita beri argument untuk image yang kita beri sesuai dengan step yang kita buat
- 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 buildoptions:
kita berikan optiondynamic_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.
Lalu tekan tombol RUN TRIGGER
Lalu tekan tab History
pada sidebar bagian kanan dan lihat proses build yang
sedang berjalan.
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
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
Done!
Sekarang aplikasi akan dapat diakses melalui url service yang diberikan oleh Cloud Run.
Sekian dan Terima kasih!