Membangun dan menguji aplikasi Go

Halaman ini menjelaskan cara menggunakan Cloud Build untuk membuat dan menguji aplikasi Go Anda, mengupload artefak ke Artifact Registry, membuat informasi asal, dan menyimpan log pengujian di Cloud Storage.

Sebelum memulai

Petunjuk di halaman ini mengasumsikan bahwa Anda sudah memahami Go. Selain itu:

  • Aktifkan Cloud Build, Cloud Run, dan Artifact Registry API.

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    Aktifkan API

  • Untuk menjalankan perintah gcloud di halaman ini, instal Google Cloud CLI.
  • Siapkan project Go Anda.
  • Siapkan repositori Go di Artifact Registry. Jika Anda belum memilikinya, buat repositori baru.
  • Jika Anda ingin menyimpan log pengujian di Cloud Storage, atau jika Anda ingin menggunakan gcloud CLI untuk memulai build, buat bucket di Cloud Storage.
  • Pastikan Anda mengetahui ID akun layanan runtime untuk Cloud Run.

Membuat akun layanan Cloud Build kustom

Buat akun layanan Cloud Build kustom dengan menjalankan perintah berikut di Google Cloud CLI:

  gcloud iam service-accounts create cloud-build-go \
      --description="Build and test Go applications" \
      --display-name="Cloud Build Go" \
      --project="PROJECT_ID"

Ganti PROJECT_ID dengan Google Cloud project IDAnda. Jika flag dihilangkan, project saat ini akan diasumsikan.

Anda akan menggunakan akun layanan ini untuk membuat dan menguji aplikasi Go Anda.

Mengonfigurasi izin IAM

Untuk mengonfigurasi akun layanan baru Anda dengan izin yang diperlukan untuk membuat dan men-deploy aplikasi Go, lakukan hal berikut:

  1. Di Google Cloud konsol, buka halaman Permissions Cloud Build :

    Buka Permissions

  2. Buka menu Service account dan pilih akun layanan cloud-build-go Anda.

  3. Tetapkan status peran berikut ke Enabled:

    • Cloud Run Admin (roles/run.admin): Memungkinkan Cloud Build men-deploy layanan baru ke Cloud Run.
    • Storage Admin (roles/storage.admin): Memungkinkan pembacaan dan penulisan dari Cloud Storage.
    • Artifact Registry Writer (roles/artifactregistry.writer): Memungkinkan pengambilan image dari dan penulisan ke Artifact Registry.
    • Logs Writer (roles/logging.logWriter): Memungkinkan entri log ditulis ke Cloud Logging.
    • Cloud Build Editor (roles/cloudbuild.builds.editor): Memungkinkan akun layanan Anda menjalankan build.

Mengonfigurasi build Go

Image golang publik dari Docker Hub mendukung pembuatan menggunakan modul Go. Menggunakan image ini sebagai langkah build dalam file konfigurasi Cloud Build memungkinkan Anda memanggil perintah go dalam image. Argumen yang diteruskan ke langkah build ini diteruskan langsung ke alat golang, sehingga Anda dapat menjalankan perintah go apa pun dalam image ini.

Bagian ini menunjukkan cara membuat an contoh file konfigurasi build untuk aplikasi Go dari the cloud-build-samples repositori Git. File konfigurasi build memiliki langkah-langkah untuk membuat aplikasi, menambahkan pengujian unit, dan setelah pengujian lulus, men-deploy aplikasi.

Untuk membuat contoh aplikasi Go:

  1. Mengonfigurasi pengujian unit: Jika telah menentukan pengujian unit di aplikasi, Anda dapat mengonfigurasi Cloud Build untuk menjalankan pengujian dengan menambahkan kolom berikut dalam langkah build:

    • name: Tetapkan nilai kolom ini ke golang untuk menggunakan image golang dari Docker Hub untuk tugas Anda.
    • entrypoint: Tetapkan nilai kolom ini ke /bin/bash. Hal ini memungkinkan Anda menjalankan perintah bash multi-baris langsung dari langkah build.
    • args: Kolom args dari langkah build mengambil daftar argumen dan meneruskannya ke image yang direferensikan oleh kolom name. Dalam contoh berikut, kolom args mengambil argumen untuk:

      • Menjalankan pemformat log pengujian untuk mendownload output log pengujian.
      • Mencetak output log.
      • Menyimpan hasil pengujian di sponge.log.
      • Mengeluarkan hasil dalam sponge.log ke file XML JUNIT. Nama file JUNIT XML dibuat menggunakan versi singkat ID commit yang terkait dengan build Anda. Langkah build berikutnya akan menyimpan log dalam file ini ke Cloud Storage.

        steps:
          # Run tests and save to file
          - name: golang:1.23
            entrypoint: /bin/bash
            args:
              - -c
              - |
                go install github.com/jstemmer/go-junit-report/v2@latest
                2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml
        
  2. Mengupload ke Artifact Registry: Dalam file konfigurasi, gunakan kolom goModules untuk menentukan jalur aplikasi dan repositori Go Anda di Artifact Registry:

    # Upload Go module to artifact registry
    artifacts:
      goModules:
        - repositoryName: 'repositoryName'
          repositoryLocation: 'location'
          repositoryProjectId: 'projectId'
          sourcePath: 'sourcePath'
          modulePath: 'appPath'
          moduleVersion: 'version'
    

    Ganti nilai berikut:

    • repositoryName: nama repositori Go Anda di Artifact Registry.
    • location: lokasi untuk repositori Anda di Artifact Registry.
    • projectId: ID Google Cloud project yang berisi repositori Artifact Registry Anda.
    • sourcePath: jalur ke file go.mod di ruang kerja build.
    • appPath: jalur ke aplikasi yang dikemas.
    • version: nomor versi untuk aplikasi Anda, difomatkan dalam angka dan titik seperti v1.0.1.
  3. Opsional: Mengaktifkan pembuatan asal

    Cloud Build dapat membuat metadata provenance build Supply chain Levels for Software Artifacts (SLSA) yang dapat diverifikasi untuk membantu mengamankan pipeline continuous integration Anda.

    Untuk mengaktifkan pembuatan asal, tambahkan requestedVerifyOption: VERIFIED ke bagian options dalam file konfigurasi Anda.

    Setelah build selesai, Anda dapat melihat detail repositori di Artifact Registry.

    Anda juga dapat melihat metadata asal build dan memvalidasi asal.

  4. Menyimpan log pengujian ke Cloud Storage: Anda dapat mengonfigurasi Cloud Build untuk menyimpan log pengujian apa pun di Cloud Storage dengan menentukan lokasi bucket dan jalur yang ada ke log pengujian.

    Langkah build berikut menyimpan log pengujian yang Anda simpan dalam file JUNIT XML ke bucket Cloud Storage:

    # Save test logs to Google Cloud Storage
    artifacts:
      objects:
        location: gs://$_BUCKET_NAME/
        paths:
          - ${SHORT_SHA}_test_log.xml
    

    Cuplikan berikut menunjukkan file konfigurasi build lengkap untuk langkah-langkah sebelumnya:

      steps:
        # Run tests and save to file
        - name: golang:1.23
          entrypoint: /bin/bash
          args:
            - -c
            - |
              go install github.com/jstemmer/go-junit-report/v2@latest
              2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml
    
      # Store golang modules in Google Artifact Registry
      artifacts:
        goModules:
          - repositoryName: 'repositoryName'
            repositoryLocation: 'location'
            repositoryProjectId: 'projectId'
            sourcePath: 'sourcePath'
            modulePath: 'appPath'
            moduleVersion: 'version'
    
  5. Mulai build menggunakan gcloud CLI atau buat pemicu build:

    gcloud

    Jalankan perintah berikut, menggunakan --substitutions untuk menentukan variabel penggantian yang digunakan di cloudbuild.yaml:

    gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
        --default-buckets-behavior=REGIONAL_USER_OWNED_BUCKET \
        --service-account=projects/PROJECT_ID/serviceAccounts/cloud-build-go@PROJECT_ID.iam.gserviceaccount.com \
        --substitutions=_AR_REPO_NAME="_AR_REPO_NAME",_BUCKET_NAME="_BUCKET_NAME",SHORT_SHA="SHORT_SHA"
    

    Ganti kode berikut:

    • _AR_REPO_NAME: nama repositori Artifact Registry Anda.

    • _BUCKET_NAME: nama bucket Cloud Storage Anda untuk log pengujian.

    • SHORT_SHA: string teks generik singkat, seperti "manual". Nilai SHORT_SHA otomatis diisi untuk build yang dipanggil oleh pemicu, tetapi tidak disediakan saat mengirimkan build menggunakan gcloud CLI.

    Pemicu build

    Ikuti langkah-langkah di Membuat pemicu build. Di kolom Substitution variables, Anda juga harus memberikan nama repositori Artifact Registry dan nama bucket Cloud Storage untuk log pengujian.

Langkah berikutnya