Mengintegrasikan Cloud Deploy dengan sistem CI Anda

Dokumen ini menjelaskan cara memanggil pipeline pengiriman Cloud Deploy dari sistem continuous integration (CI).

Mengintegrasikan Cloud Deploy dengan sistem CI Anda semudah menambahkan panggilan ke CLI gcloud Cloud Deploy. Panggilan ini terjadi pada titik di pipeline CI saat aplikasi Anda siap di-deploy.

Sebelum memulai

Petunjuk di halaman ini mengasumsikan bahwa Anda sudah memenuhi kondisi berikut:

Memanggil Cloud Deploy dari pipeline CI Anda

Perintah berikut membuat rilis baru, sehingga memanggil instance pipeline pengiriman:

gcloud deploy releases create RELEASE_NAME \
  --delivery-pipeline=PIPELINE_NAME \
  --region=REGION \
  --annotations=[KEY=VALUE,...] \
  --images=[IMAGE_LIST]

Di mana...

  • RELEASE_NAME

    adalah nama yang Anda berikan untuk rilis ini. Nilai ini wajib diisi.

    Anda dapat menentukan nama rilis dinamis dengan menyertakan '$DATE' atau '$TIME' atau keduanya. Misalnya, jika Anda memanggil perintah ini pada pukul 15.07 UTC, 'rel-$TIME' akan di-resolve ke rel-1507. '$DATE' dan '$TIME' harus dalam tanda kutip tunggal.

  • PIPELINE_NAME

    adalah nama pipeline pengiriman terdaftar Anda. Nilai ini wajib diisi.

  • REGION

    adalah region tempat Anda membuat rilis ini. Region tidak perlu sama dengan region tempat Anda akhirnya men-deploy aplikasi.

  • [KEY=VALUE,...]

    adalah daftar opsional dari satu atau beberapa anotasi yang akan diterapkan ke rilis, dalam bentuk key-value pair.

    Anda dapat menggunakan anotasi untuk melacak asal rilis, misalnya, dengan meneruskan anotasi seperti commitId=0065ca0. Semua anotasi pada rilis akan ditampilkan saat Anda list atau get rilis, dan ditampilkan dengan rilis di konsol Google Cloud, sehingga Anda juga dapat melihat asal rilis di sana.

  • [IMAGE_LIST]

    adalah daftar penggantian nama gambar ke jalur gambar yang dipisahkan koma. Contoh: --images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18

    Nilai ini tidak diperlukan jika Anda meneruskan --build-artifacts, yang mengidentifikasi file output artefak build Skaffold.

    Saat Cloud Deploy merender manifes, nama image dalam manifes yang tidak dirender akan diganti dengan referensi image lengkap dalam manifes yang dirender. Artinya, image1, dari contoh ini, berada dalam manifes yang tidak dirender dan diganti dalam manifes yang dirender dengan path/to/image1:v1@sha256:45db24.

Contoh penggunaan referensi gambar langsung

Perintah berikut membuat rilis baru, yang meneruskan referensi image secara langsung, bukan file artefak build:

gcloud deploy releases create my-release \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --images=image1=path/to/image1:v1@sha256:45db24

Dalam contoh ini, my-release adalah nama rilis. Jika ingin membuat nama rilis berdasarkan tanggal atau waktu, Anda dapat menyertakan '$DATE' atau 'TIME' atau keduanya. Waktu adalah waktu UTC di komputer tempat Anda memanggil perintah. '$DATE' dan '$TIME' harus dalam tanda kutip tunggal.

Berikut contohnya:

gcloud deploy releases create rel-'$DATE'-'$TIME' \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --images=image1=path/to/image1:v1@sha256:45db24

Dalam contoh ini, perintah akan menghasilkan nama rilis dengan awalan rel-, ditambah tanggal dan waktu, misalnya: rel-20220131-1507.

Penggunaan SHA Git dalam nama rilis juga umum. Lihat contoh Cloud Build dan Docker dalam dokumen ini.

Mem-build artefak versus image

Pada perintah gcloud deploy releases create, Anda dapat meneruskan kumpulan referensi gambar atau referensi file artefak build.

  • Gunakan --images=[NAME=TAG,...] untuk merujuk ke satu atau beberapa image penampung.

    Nilai ini adalah referensi ke kumpulan nama gambar individual untuk penggantian jalur lengkap gambar. Berikut contohnya:

    gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24

  • Gunakan --build-artifacts= untuk mengarah ke file output artefak build Skaffold.

Contoh Cloud Build, yang meneruskan file artefak build

Contoh build Docker

File YAML berikut menunjukkan Cloud Build untuk push image build Docker, dan pada akhirnya membuat rilis Cloud Deploy.

Contoh ini mem-build dan mengirim image ke repositori artefak serta membuat perintah untuk membuat rilis, dengan nama rilis berdasarkan SHA commit singkat. Contoh ini harus digunakan sebagai pemicu SCM Cloud Build karena bergantung pada variabel $COMMIT_SHA.

Contoh ini mendorong image ke tag Docker yang sama dengan hash commit repo sumber. Kemudian, hash commit yang sama, sebagai tag Docker, direferensikan dari argumen perintah rilis.

steps:
# Build and tag using commit sha
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '.', '-t', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}', '-f', 'Dockerfile']
# Push the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}']
# Create release in Google Cloud Deploy
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--images", "IMAGE_NAME=REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}"
    ]

Perhatikan bahwa nama gambar di akhir contoh ini, "--images", "IMAGE_NAME= diganti dalam manifes yang dirender dengan referensi gambar lengkap.

Contoh konfigurasi Cloud Build menggunakan Skaffold

File YAML berikut adalah konten konfigurasi build Cloud Build yang menyertakan panggilan ke Cloud Deploy untuk membuat rilis, dengan nama rilis berdasarkan tanggal. Contoh ini juga menunjukkan Skaffold yang digunakan untuk build.

steps:
- name: gcr.io/k8s-skaffold/skaffold
  args:
    - skaffold
    - build
    - '--interactive=false'
    - '--file-output=/workspace/artifacts.json'
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--build-artifacts", "/workspace/artifacts.json"
    ]

Menghubungkan GitHub Actions ke Cloud Deploy

Jika menggunakan GitHub Actions untuk continuous integration atau aktivitas terkait deployment software lainnya, Anda dapat terhubung ke Cloud Deploy untuk continuous delivery menggunakan GitHub Action create-cloud-deploy-release.

Menghubungkan GitLab ke Cloud Deploy

Jika menggunakan GitLab untuk integrasi berkelanjutan, Anda dapat menggunakan komponen Cloud Deploy GitLab create-cloud-deploy-release untuk membuat rilis Cloud Deploy.

Anda juga dapat mencoba tutorial menyeluruh untuk menggunakan GitLab dengan Google Cloud.

Menggunakan anotasi untuk melacak asal rilis

Tanda --annotations= memungkinkan Anda menerapkan satu atau beberapa pasangan nilai kunci arbitrer ke rilis yang dibuat oleh perintah ini. Anda akan menambahkan tanda ini ke perintah gcloud deploy releases create.

Misalnya, Anda dapat menggunakan pasangan nilai kunci berikut untuk melacak sumber image yang akan di-deploy.

Berikut contohnya:

gcloud deploy releases create web-app-1029rel \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --annotations=commitId=0065ca0,author=user@company.com \
  --images=image1=path/to/image1:v1@sha256:45db24

Anda juga dapat membuat anotasi yang nilainya adalah URL yang mengarah ke permintaan pull, misalnya. Untuk mengetahui informasi selengkapnya, lihat Menggunakan label dan anotasi dengan Cloud Deploy.