Orientasi Aplikasi

1. Sebelum memulai

Penyiapan lingkungan mandiri

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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 Anda

  1. Buka editor Cloud Shell dengan membuka URL berikut

https://ide.cloud.google.com

  1. 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)')

  1. Mengaktifkan API

gcloud services enable \

cloudbuild.googleapis.com \

secretmanager.googleapis.com

  1. 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}

  1. Di jendela terminal, buat clone sumber aplikasi dengan perintah berikut:

git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git

  1. Ubah ke direktori dan tetapkan ruang kerja IDE ke root repo

cd software-delivery-workshop && rm -rf .git

cd delivery-platform && cloudshell workspace .

3. Memanfaatkan template aplikasi standar & kustom

Developer harus dapat memilih dari serangkaian template yang umum digunakan dalam organisasi. Proses aktivasi akan membuat sekumpulan repositori template terpusat yang disimpan di akun GitHub Anda. Pada langkah-langkah selanjutnya, repositori template ini akan disalin dan diubah untuk digunakan sebagai dasar aplikasi baru. Untuk lab ini, Anda akan mengisi repositori template dengan struktur sampel yang disediakan di sini. Anda dapat menambahkan template sendiri dengan menambahkan folder lain yang dimodelkan berdasarkan sampel.

Pada langkah ini, Anda akan membuat repositori sendiri untuk menyimpan template aplikasi, dari file contoh yang disediakan. Skrip pembantu disediakan untuk menyederhanakan interaksi dengan GitHub.

Langkah-langkah ini dilakukan satu kali untuk mengisi repositori template Anda. Langkah-langkah selanjutnya akan menggunakan kembali repositori ini.

Konfigurasi 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 langkah berikutnya. Skrip di bawah ini 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

Template aplikasi contoh disediakan bersama dengan lab ini sebagai contoh cara mengintegrasikan template dasar Anda sendiri. Pada langkah ini, Anda akan membuat salinan file ini di repo bernama mcd-app-templates di akun GitHub Anda.

  1. Salin template ke direktori kerja

cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR

cd $WORK_DIR/app-templates

  1. Buat repositori jarak jauh kosong di akun GitHub Anda

$BASE_DIR/scripts/git/gh.sh create mcd-app-templates

  1. Kirim template repositori 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

  1. 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 berbagai tim dan lingkungan.

Pada langkah ini, Anda akan membuat repositori konfigurasi bersama bernama mcd-shared_kustomize dari sampel yang disediakan

  1. Salin template ke direktori kerja

cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR

cd $WORK_DIR/shared-kustomize

  1. Buat repositori jarak jauh kosong di akun GitHub Anda

$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize

  1. Kirim template repositori 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

  1. 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 baru aplikasi

Membuat aplikasi baru dari template sering kali mengharuskan variabel placeholder ditukar 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 oleh developer dalam pengembangan sehari-hari.

Pada langkah ini, Anda akan mengganti nilai dalam template aplikasi dan memposting file yang dihasilkan ke repositori baru.

Tentukan 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

Buat repo baru dan simpan file yang telah diupdate

  1. Buat repositori jarak jauh kosong di akun GitHub Anda

$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}

  1. Kirim template repositori 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 dibuat, saatnya menerapkan build berkelanjutan.

5. Mengonfigurasi eksekusi pipeline otomatis

Bagian utama 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 Anda, setiap kali pengguna melakukan commit atau memberi tag pada kode di repositori mereka.

Mengaktifkan Akses Aman

Anda memerlukan 2 elemen untuk mengonfigurasi akses aman ke pipeline aplikasi Anda. Kunci API dan rahasia 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 dibahas di sini adalah mengunci cakupan kunci API hanya untuk API tertentu yang akan diakses klien. Anda membuat kunci di langkah sebelumnya.

  1. Anda dapat meninjau kunci dengan mengklik link ini
  2. Anda dapat memastikan nilai ditetapkan dengan menjalankan perintah berikut

echo $API_KEY_VALUE

Rahasia Pipeline

Secret digunakan untuk mengizinkan pemanggil dan memastikan mereka memiliki hak atas tugas target build cloud 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 sedang dipanggil), secret membatasi Job mana di Cloud Build API yang dapat dieksekusi oleh klien.

  1. Tentukan 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))

  1. Buat secret

printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-

  1. Izinkan 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'

Buat Pemicu Cloud Build

Pemicu Cloud Build adalah konfigurasi yang akan benar-benar menjalankan proses CICD.

Tugas ini memerlukan beberapa nilai utama yang harus diberikan saat pembuatan agar pemicu dapat dikonfigurasi dengan benar.

  1. Tentukan 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

  1. Tentukan lokasi repo konfigurasi dasar bersama.

export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize

  1. Variabel ditetapkan dalam skrip onboard-env.sh yang menentukan container registry project. Tinjau nilai dengan perintah di bawah.

echo $IMAGE_REPO

  1. 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 tempat nilai tersebut beradagcloud 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}`
    
  2. Tinjau pemicu Cloud Build yang baru dibuat di Konsol dengan membuka link ini
  3. Tentukan variabel untuk URL endpoint, yang akan digunakan oleh GitHub pada langkah berikutnya

WEBHOOK_URL="https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY_VALUE}&secret=${SECRET_VALUE}"

Mengonfigurasi Webhook GitHub

  1. Mengonfigurasi webhook di GitHub

$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL

  1. Buka repo aplikasi dan tinjau webhook yang baru dikonfigurasi

REPO_URL=${GIT_BASE_URL}/${APP_NAME}/settings/hooks

echo $REPO_URL

Sekarang setelah Anda melakukan semua langkah yang diperlukan untuk membuat aplikasi baru secara manual, saatnya mengotomatisasinya dalam skrip.

6. Mengotomatiskan semua langkah orientasi

Pada praktiknya, tidak mungkin untuk menjalankan setiap langkah di atas untuk setiap aplikasi baru. Sebagai gantinya, logika harus dimasukkan 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

Buat aplikasi baru

  1. Pastikan Anda berada di direktori yang tepat

cd $BASE_DIR

  1. Buat aplikasi baru

export APP_NAME=demo-app

./app.sh create ${APP_NAME}

Semua langkah dijalankan secara otomatis.

Tinjau Repo GitHub

Pada tahap ini, Anda akan dapat meninjau repositori baru di GitHub

  1. Ambil URL repositori GitHub dengan menjalankan perintah berikut

echo ${GIT_BASE_URL}/demo-app

  1. Buka URL dengan browser web Anda untuk meninjau aplikasi baru
  2. 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

  1. Tinjau webhook yang dikonfigurasi di URL di bawah

echo ${GIT_BASE_URL}/demo-app/settings/hooks

Tinjau Pemicu Cloud Build

Pemicu disiapkan secara otomatis oleh skrip

  1. Tinjau pemicu Cloud Build di Konsol dengan membuka link ini
  2. Tinjau histori build di halaman ini