Mengotomatiskan pembuatan ulang image container untuk menyinkronkan pembaruan image dasar


Cloud Workstations memungkinkan Anda membuat dan menggunakan image kustom untuk workstation Anda. Setelah digunakan, image kustom akan berguna untuk mengotomatiskan pembuatan ulang image kustom guna menarik perbaikan dan update yang tersedia di image dasar.

Dalam tutorial ini, Anda akan mempelajari cara membuat pipeline otomatis untuk membantu memastikan Anda menyertakan update dan patch keamanan dalam image workstation kustom.

Tujuan

Dengan mengikuti tutorial ini, Anda akan membangun pipeline otomatis untuk image dasar dengan langkah-langkah berikut:

  1. Buat repositori Artifact Registry untuk menyimpan dan memindai image kustom Anda.
  2. Konfigurasi GitHub dengan Google Cloud untuk menyimpan konfigurasi gambar Anda.
  3. Buat pemicu Cloud Build untuk mengotomatiskan pembuatan dan deployment image kustom ke Artifact Registry.
  4. Konfigurasi Cloud Scheduler untuk memulai build secara rutin.
  5. Tinjau hasil proses otomatis.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init

Menyiapkan lingkungan

Sebelum melanjutkan, pastikan Anda telah menetapkan variabel lingkungan berikut.

  1. Tetapkan project ID untuk project cloud yang akan Anda gunakan:

    PROJECT_ID=$PROJECT_ID
    
  2. Tetapkan nama pengguna GitHub tempat Anda berencana menyimpan repositori:

    GITHUB_USER=$GITHUB_ID
    
  3. Tetapkan variabel PROJECT_NUMBER dan REGION yang akan digunakan selama proses:

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
        --format='value(projectNumber)')
    
    REGION=$REGION
    

    Dalam contoh sebelumnya, ganti $REGION dengan nama region yang akan Anda gunakan—misalnya, us-central1.

    Untuk mengetahui informasi selengkapnya tentang region yang tersedia, lihat Lokasi Cloud Workstations.

Membuat repositori Artifact Registry

Dalam tutorial ini, Anda akan menggunakan Artifact Registry untuk menyimpan dan memindai image.

  1. Buat repositori dengan perintah berikut:

    gcloud artifacts repositories create custom-images \
          --repository-format=docker \
          --location=$REGION \
          --description="Docker repository"
    

    Ganti $REGION dengan nama region yang ingin Anda gunakan.

  2. Konfigurasi Docker agar menggunakan kredensial CLI gcloud Anda saat mengakses Artifact Registry.

    gcloud auth configure-docker $REGION-docker.pkg.dev
    

    Untuk menonaktifkan Analisis Artefak, jalankan perintah berikut:

    gcloud services disable containerscanning.googleapis.com
    

Konfigurasi repositori GitHub Anda

Dalam praktiknya, Anda menyimpan Dockerfile untuk image kustom di repositori Git. Proses otomatis mengakses repositori tersebut selama proses build untuk menarik konfigurasi dan Dockerfile yang relevan.

Lakukan fork repositori contoh

Untuk membuat fork repositori contoh yang menyediakan definisi container, ikuti langkah-langkah berikut:

  1. Klik link ini untuk Membuat fork baru. dari repositori software-delivery-workshop.
  2. Jika diminta, login ke GitHub.
  3. Pilih nama pengguna GitHub Anda sebagai Pemilik. Nama Repositori akan muncul sebagai software-delivery-workshop.
  4. Klik Create fork dan tunggu beberapa detik hingga proses selesai.

Menghubungkan Cloud Build ke GitHub

Selanjutnya, hubungkan repositori tersebut ke Cloud Build menggunakan kemampuan koneksi GitHub bawaan. Klik link ke repositori GitHub dan ikuti petunjuk yang menjelaskan cara menyelesaikan prosesnya. Anda tidak perlu membuat pemicu di langkah terakhir wizard, dan Anda dapat melewati langkah terakhir karena Anda dapat melakukannya nanti dari command line.

Jika menggunakan solusi repositori Git yang berbeda, Anda juga dapat mengikuti petunjuk untuk menghubungkan Cloud Build ke GitLab atau Bitbucket.

Membuat pemicu Cloud Build

Repositori contoh berisi definisi container dan konfigurasi Cloud Build yang digunakan untuk membangun image container. Pada langkah ini, Anda akan membuat pemicu Cloud Build yang menjalankan petunjuk dalam file cloudbuild.yaml yang dapat Anda temukan di folder labs/cloudbuild-scheduled-jobs/code-oss-java.

gcloud builds triggers create manual \
    --name=custom-image-trigger \
    --repo=$GITHUB_USER/software-delivery-workshop \
    --repo-type=GITHUB \
    --branch=main \
    --build-config=labs/cloudbuild-scheduled-jobs/code-oss-java/cloudbuild.yaml \
    --substitutions=_REGION=$REGION,_AR_REPO_NAME=custom-images,_AR_IMAGE_NAME=code-oss-java,_IMAGE_DIR=labs/cloudbuild-scheduled-jobs/code-oss-java

TRIGGER_ID=$(gcloud builds triggers list \
    --filter=name="custom-image-trigger" --format="value(id)")

Contoh ini mengonfigurasi hal berikut:

  • Perintah CLI gcloud membuat pemicu manual dalam Cloud Build bernama custom-image-trigger seperti yang ditunjukkan oleh flag name pada baris kedua.
  • Tiga baris berikutnya berisi tanda terkait repositori GitHub sumber:
  • Flag build-config menunjukkan jalur ke file Cloud Build di repositori Git.
  • Untuk membuat tugas menjadi dinamis, gunakan tanda substitutions. Untuk tugas ini, perintah meneruskan variabel berikut:

    • Wilayah, $_REGION
    • Nama repositori Artifact Registry, $_AR_REPO_NAME
    • Nama image container, $_AR_IMAGE_NAME
    • Lokasi Dockerfile yang akan dibangun, $_IMAGE_DIR

    Lihat file cloudbuild.yaml untuk melihat cara penggunaan variabel ini dalam proses.

  • Setelah pemicu dibuat, nama unik pemicu akan diambil dan disimpan dalam variabel lingkungan $TRIGGER_ID untuk digunakan nanti.

Mengonfigurasi Cloud Scheduler

Untuk membantu memastikan bahwa image Anda selalu diupdate dengan patch dan update terbaru, gunakan Cloud Scheduler untuk menjalankan pemicu Cloud Build dengan frekuensi yang ditetapkan. Untuk tutorial ini, tugas berjalan setiap hari. Dalam praktiknya, tetapkan frekuensi ini sesuai dengan kebutuhan organisasi Anda untuk membantu memastikan bahwa pembaruan terbaru selalu disertakan.

  1. Memberikan peran yang diperlukan ke akun layanan default untuk memanggil pemicu Cloud Build:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/cloudbuild.builds.editor"
    
  2. Berikan peran yang diperlukan ke akun layanan Cloud Build untuk mengupload image ke Artifact Registry:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
        --role="roles/artifactregistry.admin"
    
  3. Buat tugas Cloud Scheduler dengan perintah berikut:

    gcloud scheduler jobs create http run-build \
        --schedule='0 1 * * *' \
        --uri=https://cloudbuild.googleapis.com/v1/projects/$PROJECT_ID/locations/global/triggers/$TRIGGER_ID:run \
        --location=us-central1 \
        --oauth-service-account-email=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --oauth-token-scope=https://www.googleapis.com/auth/cloud-platform
    
  4. Tugas ini ditetapkan untuk dieksekusi satu kali setiap hari; namun, untuk menguji fitur ini secara langsung, jalankan tugas secara manual dari Cloud Scheduler:

    Buka Cloud Scheduler

    1. Di halaman Cloud Scheduler, temukan entri yang baru saja Anda buat bernama run-build.
    2. Di kolom Tindakan, klik menu opsi more_vertLainnya untuk baris tersebut.
    3. Klik Paksa tugas dijalankan untuk menguji sistem secara manual.
    4. Setelah perintah berhasil dijalankan, beralihlah ke halaman histori Cloud Build untuk meninjau progres:

      Buka Histori Cloud Build

Meninjau hasil

Karena Anda mengaktifkan Container Scanning API sebagai bagian dari proses penyiapan, Artifact Registry akan otomatis memindai image untuk mendeteksi kerentanan keamanan.

Untuk meninjau kerentanan:

  1. Buka halaman Repositori Artifact Registry:

    Buka Repositori Artifact Registry

  2. Di daftar repositori, klik repositori.

  3. Klik nama gambar. Jumlah total kerentanan untuk setiap ringkasan gambar muncul di kolom Kerentanan.

    Halaman Repositori Artifact Registry yang menampilkan nama image contoh

  4. Untuk melihat daftar kerentanan pada image, klik link di kolom Kerentanan. Daftar kerentanan menunjukkan keparahan, ketersediaan perbaikan, dan nama paket yang berisi kerentanan.

    Halaman Kerentanan Artifact Registry yang menampilkan contoh daftar kerentanan

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Agar tidak menimbulkan biaya pada Google Cloud akun Anda untuk resource yang digunakan di halaman ini, pastikan Anda menghapus resource yang tidak lagi diperlukan.

Untuk menghapus project Google Cloud dari konsol Google Cloud atau dari CLI gcloud:

Konsol

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Untuk mengetahui informasi selengkapnya tentang cara menghapus resource lain, seperti cluster workstation, konfigurasi workstation, dan workstation, lihat Menghapus resource.

Langkah berikutnya