1. Sebelum memulai
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Nama project adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API, dan Anda dapat memperbaruinya kapan saja.
- Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis menghasilkan string unik; biasanya Anda tidak peduli dengan kata-katanya. Pada sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai
PROJECT_ID
). Jadi, jika Anda tidak menyukainya, buat ID acak lain, atau, Anda dapat mencoba sendiri dan melihat apakah tersedia. Kemudian file akan "dibekukan" setelah project dibuat. - Ada nilai ketiga, Nomor Project yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan API/resource Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk menonaktifkan resource agar tidak menimbulkan penagihan di luar tutorial ini, ikuti petunjuk "pembersihan" yang ada di akhir codelab. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
2. Menyiapkan ruang kerja
- Buka editor Cloud Shell dengan membuka URL berikut
https://ide.cloud.google.com
- Pastikan nama project Anda ditetapkan di CLI
gcloud config set project {{project-id}}
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
- Mengaktifkan API
gcloud services enable \
cloudbuild.googleapis.com \
secretmanager.googleapis.com
- Memberikan hak ke CloudDeploy
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.admin ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/container.developer ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/iam.serviceAccountUser ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.jobRunner ${PROJECT_ID}
- Di jendela terminal, clone sumber aplikasi dengan perintah berikut:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- Ubah ke direktori dan setel ruang kerja IDE ke root repo
cd software-delivery-workshop && rm -rf .git
cd delivery-platform && cloudshell workspace .
3. Menggunakan template aplikasi standar & kustom
Developer harus dapat memilih dari serangkaian template yang biasa digunakan dalam organisasi. Proses orientasi akan membuat kumpulan repositori template terpusat yang disimpan di akun GitHub Anda. Pada langkah berikutnya, repositori template ini akan disalin dan diubah untuk digunakan sebagai dasar aplikasi baru. Untuk lab ini, Anda akan mengisi repositori template dengan struktur contoh yang disediakan di sini. Anda dapat menambahkan template Anda sendiri dengan menambahkan folder tambahan yang dibuat berdasarkan contoh.
Pada langkah ini, Anda akan membuat repositori sendiri untuk menyimpan template aplikasi, dari file contoh yang disediakan. Skrip bantuan disediakan untuk menyederhanakan interaksi dengan GitHub.
Ini adalah langkah satu kali yang digunakan untuk mengisi repositori template Anda. Langkah selanjutnya akan menggunakan kembali repositori ini.
Mengonfigurasi Akses GitHub
Langkah-langkah dalam tutorial ini memanggil GitHub API untuk membuat dan mengonfigurasi repositori. Nama pengguna GitHub dan token akses pribadi Anda diperlukan di berbagai titik yang mengikutinya. Skrip di bawah akan membantu Anda mendapatkan nilai dan menyimpannya sebagai variabel lokal untuk digunakan nanti.
source ./onboard-env.sh
echo Git Username: $GIT_USERNAME
echo Git Base URL: $GIT_BASE_URL
Membuat Repositori Template Aplikasi
Contoh template aplikasi disediakan bersama dengan lab ini sebagai contoh cara mengintegrasikan template dasar Anda sendiri. Pada langkah ini, Anda membuat salinan file ini sendiri di repo bernama mcd-app-templates
di akun GitHub Anda.
- Menyalin template ke direktori kerja
cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR
cd $WORK_DIR/app-templates
- Membuat repositori jarak jauh kosong di akun GitHub Anda
$BASE_DIR/scripts/git/gh.sh create mcd-app-templates
- Kirim repositori template ke repositori jarak jauh Anda
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/mcd-app-templates
git push origin main
- Membersihkan direktori kerja
cd $BASE_DIR
rm -rf $WORK_DIR/app-templates
Membuat Repositori Konfigurasi Dasar Bersama
Tutorial ini menggunakan alat bernama Kustomize yang menggunakan file konfigurasi dasar yang dibagikan oleh beberapa tim, lalu menempatkan konfigurasi khusus aplikasi di atasnya. Hal ini memungkinkan tim platform melakukan penskalaan di banyak tim dan lingkungan.
Pada langkah ini, Anda akan membuat repositori konfigurasi bersama yang disebut mcd-shared_kustomize
dari sampel yang disediakan
- Menyalin template ke direktori kerja
cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR
cd $WORK_DIR/shared-kustomize
- Membuat repositori jarak jauh kosong di akun GitHub Anda
$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize
- Kirim repositori template ke repositori jarak jauh Anda
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/mcd-shared_kustomize
git push origin main
- Membersihkan direktori kerja
cd $BASE_DIR
rm -rf $WORK_DIR/shared-kustomize
Setelah repositori template dibuat, Anda siap menggunakannya untuk membuat instance aplikasi
4. Membuat instance aplikasi baru
Membuat aplikasi baru dari template sering kali mengharuskan variabel placeholder diganti dengan nilai sebenarnya di beberapa file dalam struktur template. Setelah penggantian selesai, repositori baru akan dibuat untuk instance aplikasi baru. Repositori instance aplikasi inilah yang akan di-clone dan digunakan developer dalam pengembangan sehari-hari.
Pada langkah ini, Anda akan mengganti nilai dalam template aplikasi dan memposting file yang dihasilkan ke repositori baru.
Menetapkan nama untuk aplikasi baru
export APP_NAME=my-app
Mengambil repositori template Golang
cd $WORK_DIR/
git clone -b main $GIT_BASE_URL/mcd-app-templates app-templates
rm -rf app-templates/.git
cd app-templates/golang
Mengganti nilai placeholder
Salah satu kebutuhan paling umum untuk orientasi adalah menukar variabel dalam template dengan instance sebenarnya yang digunakan dalam aplikasi. Misalnya, memberikan nama aplikasi. Perintah berikut membuat instance semua file .tmpl dengan nilai yang disimpan dalam variabel lingkungan.
for template in $(find . -name '*.tmpl'); do envsubst < ${template} > ${template%.*}; done
Membuat repo baru dan menyimpan file yang diperbarui
- Membuat repositori jarak jauh kosong di akun GitHub Anda
$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}
- Kirim repositori template ke repositori jarak jauh Anda
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/${APP_NAME}
git push origin main
Setelah instance aplikasi selesai dibuat, saatnya untuk menerapkan build berkelanjutan.
5. Mengonfigurasi eksekusi pipeline otomatis
Bagian tengah dari sistem Continuous Integration adalah kemampuan untuk mengeksekusi logika pipeline berdasarkan peristiwa yang berasal dari sistem kontrol sumber. Saat developer melakukan commit kode di repositorinya, peristiwa akan diaktifkan yang dapat dikonfigurasi untuk memicu proses di sistem lain.
Pada langkah ini, Anda akan mengonfigurasi GitHub untuk memanggil Google Cloud Build dan menjalankan pipeline, setiap kali pengguna melakukan commit atau memberi tag pada kode di repositori mereka.
Aktifkan Akses Aman
Anda memerlukan 2 elemen untuk mengonfigurasi akses aman ke pipeline aplikasi. Kunci API dan secret yang unik untuk pipeline.
Kunci API
Kunci API digunakan untuk mengidentifikasi klien yang memanggil API tertentu. Dalam hal ini, kliennya adalah GitHub. Praktik terbaik yang tidak tercakup di sini adalah mengunci cakupan kunci API hanya ke API tertentu yang akan diakses klien. Anda membuat kunci pada langkah sebelumnya.
- Anda dapat meninjau kunci dengan mengklik link ini
- Anda dapat memastikan nilai ditetapkan dengan menjalankan perintah berikut
echo $API_KEY_VALUE
Rahasia Pipeline
Secret digunakan untuk memberikan otorisasi kepada pemanggil dan memastikan mereka memiliki hak ke tugas target cloud build tertentu. Anda mungkin memiliki 2 repositori berbeda di GitHub yang hanya boleh memiliki akses ke pipeline-nya sendiri. Meskipun API_KEY membatasi API mana yang dapat digunakan oleh github (dalam hal ini Cloud Build API dipanggil), secret membatasi Tugas mana di Cloud Build API yang dapat dieksekusi oleh klien.
- Menentukan nama, lokasi, dan nilai secret
SECRET_NAME=${APP_NAME}-webhook-trigger-cd-secret
SECRET_PATH=projects/${PROJECT_NUMBER}/secrets/${SECRET_NAME}/versions/1
SECRET_VALUE=$(sed "s/[^a-zA-Z0-9]//g" <<< $(openssl rand -base64 15))
- Membuat secret
printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-
- Mengizinkan Cloud Build membaca secret
gcloud secrets add-iam-policy-binding ${SECRET_NAME} \
--member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com \
--role='roles/secretmanager.secretAccessor'
Membuat Pemicu Cloud Build
Pemicu Cloud Build adalah konfigurasi yang benar-benar akan menjalankan proses CICD.
Tugas ini memerlukan beberapa nilai kunci yang harus diberikan saat pembuatan untuk mengonfigurasi pemicu dengan benar.
- Menentukan nama pemicu dan tempat file konfigurasi dapat ditemukan
export TRIGGER_NAME=${APP_NAME}-clouddeploy-webhook-trigger
export BUILD_YAML_PATH=$WORK_DIR/app-templates/golang/build/cloudbuild-cd.yaml
- Tentukan lokasi repo konfigurasi dasar bersama.
export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize
- Variabel ditetapkan dalam skrip onboard-env.sh yang menentukan registry penampung project. Tinjau nilai dengan perintah di bawah.
echo $IMAGE_REPO
- Buat Pemicu Webhook CloudBuild menggunakan variabel yang dibuat sebelumnya. Lokasi repo aplikasi diambil dari isi permintaan dari GitHub. Nilai di bawah merujuk ke jalur dalam isi permintaan tempatnya berada
gcloud alpha builds triggers create webhook \
`--name=${TRIGGER_NAME} \` `--substitutions='_APP_NAME='${APP_NAME}',_APP_REPO=$(body.repository.git_url),_CONFIG_REPO='${GIT_BASE_URL}'/'${CLUSTER_CONFIG_REPO}',_DEFAULT_IMAGE_REPO='${IMAGE_REPO}',_KUSTOMIZE_REPO='${GIT_BASE_URL}'/'${SHARED_KUSTOMIZE_REPO}',_REF=$(body.ref)' \` `--inline-config=$BUILD_YAML_PATH \` `--secret=${SECRET_PATH}`
- Tinjau pemicu Cloud Build yang baru dibuat di Konsol dengan membuka link ini
- Tentukan variabel untuk URL endpoint, yang akan digunakan oleh GitHub di langkah berikutnya
WEBHOOK_URL="https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY_VALUE}&secret=${SECRET_VALUE}"
Mengonfigurasi GitHub Webhook
- Mengonfigurasi webhook di GitHub
$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL
- Buka repo aplikasi dan tinjau webhook yang baru dikonfigurasi
REPO_URL=${GIT_BASE_URL}/${APP_NAME}/settings/hooks
echo $REPO_URL
Setelah Anda melakukan semua langkah yang diperlukan untuk membuat aplikasi baru secara manual, saatnya untuk mengotomatiskan aplikasi dalam skrip.
6. Mengotomatiskan semua langkah orientasi
Dalam praktiknya, tidak mungkin untuk mengeksekusi setiap langkah di atas untuk setiap aplikasi baru. Sebagai gantinya, logika harus digabungkan ke dalam skrip agar mudah dieksekusi. Langkah-langkah di atas telah disertakan dalam skrip untuk Anda gunakan.
Pada langkah ini, Anda akan menggunakan skrip yang disediakan untuk membuat aplikasi baru
Membuat aplikasi baru
- Pastikan Anda berada di direktori yang tepat
cd $BASE_DIR
- Membuat aplikasi baru
export APP_NAME=demo-app
./app.sh create ${APP_NAME}
Semua langkah dijalankan secara otomatis.
Meninjau GitHub Repo
Pada tahap ini, Anda akan dapat meninjau repositori baru di GitHub
- Ambil URL repositori GitHub dengan menjalankan perintah berikut
echo ${GIT_BASE_URL}/demo-app
- Buka URL dengan browser web Anda untuk meninjau aplikasi baru
- Perhatikan contoh saat variabel template telah diganti dengan nilai instance seperti yang ditunjukkan di URL di bawah
echo ${GIT_BASE_URL}/demo-app/blob/main/k8s/prod/deployment.yaml#L24
- Tinjau web hook yang dikonfigurasi pada URL di bawah
echo ${GIT_BASE_URL}/demo-app/settings/hooks
Meninjau Pemicu CloudBuild
Pemicu disiapkan secara otomatis oleh skrip
- Tinjau pemicu Cloud Build di Konsol dengan membuka link ini
- Tinjau histori build di halaman ini