Membangun dan menguji aplikasi Go

Halaman ini menjelaskan cara menggunakan Cloud Build untuk mem-build, menguji, dan men-deploy aplikasi Go.

Sebelum memulai

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

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

    Mengaktifkan API

  • Untuk menjalankan perintah gcloud di halaman ini, instal Google Cloud CLI.
  • Siapkan project Go Anda.
  • Jika ingin membuat penampung aplikasi Go menggunakan Cloud Build, Anda akan memerlukan Dockerfile beserta kode sumber.
  • Jika Anda ingin menyimpan penampung yang di-build di Artifact Registry, buat repositori Docker di Artifact Registry.
  • Jika Anda ingin menyimpan log pengujian di Cloud Storage, buat bucket di Cloud Storage.

Izin IAM yang diperlukan

Untuk mengetahui petunjuk cara memberikan peran ini, lihat Memberikan peran menggunakan halaman IAM.

Mengonfigurasi build Go

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

Bagian ini membahas contoh file konfigurasi build untuk aplikasi Go. File ini memiliki langkah-langkah build untuk mem-build aplikasi, menambahkan pengujian unit, dan setelah pengujian lulus, mengemas, dan men-deploy aplikasi.

Untuk mem-build aplikasi Go:

  1. Di direktori utama project, buat file konfigurasi Cloud Build bernama cloudbuild.yaml.

  2. Mem-build dan menguji: 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 multibaris langsung dari langkah build.
    • args: Kolom args dari langkah build mengambil daftar argumen dan meneruskannya ke image yang dirujuk oleh kolom name. Pada contoh berikut, kolom args menggunakan argumen untuk:

      • Menjalankan pemformat log pengujian untuk mendownload output log pengujian.
      • Mencetak output log.
      • Menyimpan hasil pengujian di sponge.log.
      • Menampilkan hasil di sponge.log ke file XML JUNIT. Nama file XML JUNIT 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
  3. Buat penampung aplikasi: Setelah menambahkan langkah build untuk memastikan bahwa pengujian telah lulus, Anda dapat mem-build aplikasi. Cloud Build menyediakan image Docker bawaan yang dapat Anda gunakan untuk membuat container aplikasi Go. Untuk mengemas aplikasi Anda, tambahkan kolom berikut dalam langkah build:

    • name: Tetapkan nilai kolom ini ke gcr.io/cloud-builders/docker untuk menggunakan image docker bawaan untuk tugas Anda.
    • args: Tambahkan argumen untuk perintah docker build sebagai nilai untuk kolom ini.

    Langkah build berikut akan mem-build image myimage dan memberi tag dengan versi singkat ID commit Anda. Langkah build menggunakan penggantian untuk project ID, nama repositori, dan nilai SHA singkat sehingga nilai ini otomatis diganti pada waktu build. Perhatikan bahwa Anda harus membuat atau memiliki repositori Docker di Artifact Registry yang ada untuk menyimpan image.

    # Docker Build
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 
             'us-central1-docker.pkg.dev/$PROJECT_ID/$_AR_REPO_NAME/myimage:$SHORT_SHA', '.']
  4. Kirim container ke Artifact Registry: Anda dapat menyimpan container yang di-build di Artifact Registry, yang merupakan layanan Google Cloud yang dapat Anda gunakan untuk menyimpan, mengelola, dan mengamankan artefak build. Untuk melakukannya, Anda harus memiliki repositori Docker yang ada di Artifact Registry. Untuk mengonfigurasi Cloud Build agar menyimpan image di repositori Docker Artifact Registry, tambahkan langkah build dengan kolom berikut:

    • name: Tetapkan nilai kolom ini ke gcr.io/cloud-builders/docker untuk menggunakan image builder docker resmi untuk tugas Anda.
    • args: Tambahkan argumen untuk perintah docker push sebagai nilai kolom ini. Untuk URL tujuan, masukkan repositori Docker Artifact Registry tempat Anda ingin menyimpan image.

    Langkah build berikut akan mengirim image yang Anda build pada langkah sebelumnya ke Artifact Registry:

    # Docker push to Google Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'us-central1-docker.pkg.dev/$PROJECT_ID/$_AR_REPO_NAME/myimage:$SHORT_SHA']
  5. Men-deploy container ke Cloud Run: Untuk men-deploy image di Cloud Run, tambahkan langkah build dengan kolom berikut:

    • name: Tetapkan nilai kolom ini ke google/cloud-sdk untuk menggunakan image gcloud CLI guna memanggil perintah gcloud untuk men-deploy image di Cloud Run.
    • args: Tambahkan argumen untuk perintah gcloud run deploy sebagai nilai kolom ini.

    Langkah build berikut men-deploy image yang telah di-build sebelumnya ke Cloud Run:

    # Deploy to Cloud Run
    - name: 'gcr.io/cloud-builders/gcloud'
      args: ['run', 'deploy', 'helloworld-${SHORT_SHA}', 
             '--image=us-central1-docker.pkg.dev/$PROJECT_ID/$_AR_REPO_NAME/myimage:$SHORT_SHA', 
             '--region', 'us-central1', '--platform', 'managed']
  6. Menyimpan log pengujian ke Cloud Storage: Anda dapat mengonfigurasi Cloud Build untuk menyimpan log pengujian di Cloud Storage dengan menentukan lokasi dan jalur bucket yang ada ke log pengujian.

    Langkah build berikut menyimpan log pengujian yang Anda simpan dalam file XML JUNIT 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 semua langkah yang dijelaskan di atas:

    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
    
      # Docker Build
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 
               'us-central1-docker.pkg.dev/$PROJECT_ID/$_AR_REPO_NAME/myimage:$SHORT_SHA', '.']
    
      # Docker push to Google Artifact Registry
      - name: 'gcr.io/cloud-builders/docker'
        args: ['push', 'us-central1-docker.pkg.dev/$PROJECT_ID/$_AR_REPO_NAME/myimage:$SHORT_SHA']
    
      # Deploy to Cloud Run
      - name: 'gcr.io/cloud-builders/gcloud'
        args: ['run', 'deploy', 'helloworld-${SHORT_SHA}', 
               '--image=us-central1-docker.pkg.dev/$PROJECT_ID/$_AR_REPO_NAME/myimage:$SHORT_SHA', 
               '--region', 'us-central1', '--platform', 'managed']
    
    # Save test logs to Google Cloud Storage
    artifacts:
      objects:
        location: gs://$_BUCKET_NAME/
        paths:
          - ${SHORT_SHA}_test_log.xml
    # Store images in Google Artifact Registry
    images:
      - us-central1-docker.pkg.dev/$PROJECT_ID/$_AR_REPO_NAME/myimage:$SHORT_SHA
  7. Mulai build menggunakan gcloud CLI atau pemicu build. Anda harus menentukan nama repositori Artifact Registry saat memulai build.

    Untuk menentukan repositori Artifact Registry saat memulai build menggunakan gcloud CLI:

    gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
        --substitutions=_AR_REPO_NAME="AR_REPO_NAME"
    

    Ganti AR_REPO_NAME dengan nama repositori Artifact Registry Anda.

    Untuk menentukan repositori Artifact Registry saat mem-build dengan pemicu build, tentukan nama repositori Artifact Registry Anda di kolom Substitution variables saat membuat pemicu build.

Langkah selanjutnya