Mengirim build menggunakan CLI dan API

Halaman ini menjelaskan cara memulai build di Cloud Build secara manual menggunakan Google Cloud CLI dan Cloud Build API.

Sebelum memulai

  • Untuk mem-build menggunakan konfigurasi build Cloud Build, buat file konfigurasi build.
  • Siapkan kode sumber aplikasi dan Dockerfile.
  • Memiliki repositori Docker untuk menyimpan image di Artifact Registry, atau membuat repositori.

Izin IAM yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk mengirimkan build, minta administrator untuk memberi Anda peran IAM berikut di akun layanan Anda:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Menjalankan build

Anda dapat menentukan sumber build menggunakan kolom Build source. Kolom Sumber build adalah salah satu dari berikut: storage_source, repo_source, git_source, dan connected_repository.

Mengirim build dengan storage_source

gcloud

Menggunakan Dockerfile:

Dockerfile Anda berisi semua informasi yang diperlukan untuk mem-build image Docker menggunakan Cloud Build.

Untuk mem-build menggunakan Dockerfile, jalankan perintah berikut dari direktori yang berisi kode sumber dan Dockerfile:

gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME

Dengan:

  • LOCATION: lokasi regional atau multi-regional repositori Docker Anda di Artifact Registry.
  • PROJECT_ID: Google Cloud Project ID Anda.
  • REPOSITORY: nama repositori Artifact Registry Anda.
  • IMAGE_NAME: nama image container yang akan dibuat.

Nama lengkap image yang akan dibuat adalah LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME. Image yang dikirim ke Artifact Registry menggunakan konvensi penamaan Artifact Registry.

Perintah gcloud builds submit:

  • mengompresi kode aplikasi, Dockerfile, dan aset lainnya di direktori saat ini seperti yang ditunjukkan oleh .;
  • memulai build di lokasi LOCATION menggunakan file yang diupload sebagai input;
  • memberi tag pada gambar menggunakan nama yang diberikan;
  • mengirimkan image yang telah di-build ke Artifact Registry.

Seiring progres build, output-nya akan ditampilkan di jendela shell atau terminal. Setelah build selesai, Anda akan melihat output yang mirip dengan berikut:

    DONE
    ---------------------------------------------------------------------------------
    ID                                    CREATE_TIME                DURATION STATUS
    $BUILD_ID                             2023-10-28T15:21:18+00:00  12S      SUCCESS

dengan $BUILD_ID sebagai ID unik build Anda.

Menggunakan file konfigurasi build Cloud Build:

Untuk mengirimkan build menggunakan konfigurasi build, jalankan perintah berikut:

    gcloud builds submit --config BUILD_CONFIG SOURCE

Dengan:

  • BUILD_CONFIG adalah jalur ke file konfigurasi build.
  • SOURCE adalah kode sumber jalur atau URL.

Saat Anda menjalankan gcloud builds submit untuk pertama kalinya dalam Google Cloud project, Cloud Build akan membuat bucket Cloud Storage bernama [YOUR_PROJECT_NAME]_cloudbuild dalam project tersebut. Cloud Build menggunakan bucket ini untuk menyimpan kode sumber yang mungkin Anda gunakan untuk build. Cloud Build tidak otomatis menghapus konten di bucket ini. Untuk menghapus objek yang tidak lagi Anda gunakan untuk build, Anda dapat menyiapkan konfigurasi siklus proses di bucket atau menghapus objek secara manual.

Perintah berikut menunjukkan cara mengirimkan permintaan build cloudbuild.yaml menggunakan kode sumber yang disimpan di bucket Cloud Storage.

    gcloud builds submit --config cloudbuild.yaml \
        gs://BUCKET/SOURCE.tar.gz

Dengan:

  • BUCKET adalah nama bucket Anda di Cloud Storage yang berisi kode sumber untuk di-build.
  • SOURCE adalah nama file kode sumber yang dikompresi.

Anda dapat menggunakan . untuk menentukan bahwa kode sumber berada di direktori kerja saat ini:

    gcloud builds submit --config=cloudbuild.yaml .

API

Untuk mengirimkan permintaan build menggunakan curl:

  1. Buat file bernama request.json dengan konten berikut:

    {
        "source": {
            "storageSource": {
                "bucket": "BUCKET",
                "object": "SOURCE.tar.gz"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME",
                "."
            ]
        }],
        "images": [
            "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME"
        ]
    }
    

    Dengan:

    • BUCKET adalah nama bucket Cloud Storage yang berisi kode sumber untuk di-build.
    • SOURCE adalah nama file kode sumber yang dikompresi.
    • IMAGE_NAME adalah nama image yang akan dibuat.
    • LOCATION: lokasi regional atau multi-regional repositori Docker Anda di Artifact Registry.
    • PROJECT_ID: Google Cloud Project ID Anda.
    • REPOSITORY: nama repositori Docker Anda di Artifact Registry.

    Dalam permintaan build ini, Cloud Build memanggil langkah build docker dengan argumen build -t LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY ..

    Nama lengkap image yang akan dibuat adalah LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY.

    Image yang dikirim ke Artifact Registry menggunakan konvensi penamaan Artifact Registry.

  2. Jalankan perintah berikut, dengan PROJECT_ID adalah Google Cloud project ID Anda dan REGION adalah salah satu region yang didukung:

    curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \
        --format='value(credential.access_token)')" \
        https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/builds
    

    Dalam perintah ini, curl mengirim request.json dalam panggilan POST ke endpoint builds untuk metode API projects.builds.create.

    Perintah ini menampilkan detail tentang build Anda di jendela shell atau terminal. Output-nya adalah respons JSON dan terlihat mirip dengan hal berikut:

        {
            "name": "operations/build/$PROJECT-ID/NmZhZW...",
            "metadata": {
                "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
                "build": {
                    "id": $BUILD-ID,
                    "status": "QUEUED",
                    "source": {
                        "storageSource": {
                            "bucket": "BUCKET",
                            "object": "SOURCE.tar.gz"
                        }
                    },
                    "createTime": "2017-05-12T18:58:07.341526Z",
                    "steps": [
                    {
                        "name": "gcr.io/cloud-builders/docker",
                        "args": [
                            "build",
                            "-t",
                            "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME",
                            "."
                        ]
                    }
                    ],
                    "timeout": "600s",
                    "images": [
                        "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME"
                    ],
                    "projectId": $PROJECT-ID,
                    "logsBucket": "gs://...",
                    "sourceProvenance": {
                        "resolvedStorageSource": {
                            "bucket": "BUCKET",
                            "object": "SOURCE.tar.gz"
                            "generation": "..."
                        }
                    },
                    "logUrl": "https://console.cloud.google.com/cloud-build/builds/...?project=$PROJECT_ID"
                }
            }
        }
    

    Respons JSON dimodelkan menggunakan resource Operation di Cloud Build API. Kolom metadata dimodelkan menggunakan resource Build. Status QUEUED menunjukkan bahwa build sedang menunggu eksekusi.

Mengirim build dengan connected_repository

gcloud

Untuk menjalankan permintaan build dengan sumber build dari resource repositori generasi ke-2, jalankan perintah berikut:

gcloud builds submit REPOSITORY --revision=REVISION --config=BUILD_CONFIG LOCATION 

Dengan:

  • LOCATION adalah lokasi regional atau multi-regional repositori Docker Anda di Artifact Registry.
  • REPOSITORY adalah nama repositori Cloud Build generasi ke-2, yang diformat sebagai projects/*/locations/*/connections/*repositories/*.
  • REVISION adalah revisi yang akan diambil dari repositori Git seperti cabang, tag, SHA commit, atau ref Git apa pun.
  • BUILD_CONFIG adalah jalur ke file konfigurasi build.

Seiring progres build, output-nya akan ditampilkan di jendela shell atau terminal. Setelah build selesai, Anda akan melihat output yang mirip dengan berikut:

    DONE
    ---------------------------------------------------------------------------------
    ID                                    CREATE_TIME                DURATION STATUS
    $BUILD_ID                             2023-10-28T15:21:18+00:00  12S      SUCCESS

dengan $BUILD_ID sebagai ID unik build Anda.

gcloudignore: Saat menyertakan kode sumber untuk build, perintah sebelumnya akan mengupload semua file dalam direktori yang ditentukan ke Google Cloud untuk di-build. Jika ingin mengecualikan file tertentu dalam direktori, Anda dapat menyertakan file bernama .gcloudignore di direktori upload level teratas; file yang ditentukannya akan diabaikan. Jika .gcloudignore tidak ada di direktori upload tingkat teratas, tetapi file .gitignore ada, gcloud CLI akan membuat file .gcloudignore yang kompatibel dengan Git yang mengikuti file .gitignore Anda. Untuk informasi selengkapnya, lihat dokumentasi gcloudignore.

Jika Anda tidak memiliki kode sumber untuk diteruskan ke build, gunakan tanda --no-source dengan BUILD_CONFIG adalah jalur ke file konfigurasi build:

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY

API

Untuk mengirimkan permintaan build menggunakan curl:

  1. Buat file bernama request.json dengan konten berikut:

    {
        "source": {
            "connectedRepository": {
                "repository": "REPOSITORY",
                "revision": "REVISION"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME",
                "."
            ]
        }],
        "images": [
            "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME"
        ]
    }
    

    Dengan:

    • REPOSITORY adalah nama repositori Cloud Build generasi ke-2, yang diformat sebagai projects/*/locations/*/connections/*repositories/*.
    • REVISION adalah revisi yang akan diambil dari repositori Git seperti cabang, tag, SHA commit, atau ref Git apa pun.
    • IMAGE_NAME adalah nama image yang akan dibuat.
    • LOCATION: lokasi regional atau multi-regional repositori Docker Anda di Artifact Registry.
    • PROJECT_ID: Google Cloud Project ID Anda.

    Dalam permintaan build ini, Cloud Build memanggil langkah build docker dengan argumen build -t LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME ..

    Nama lengkap image yang akan dibuat adalah LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME. Image yang dikirim ke Artifact Registry menggunakan konvensi penamaan Artifact Registry.

  2. Jalankan perintah berikut dengan PROJECT_ID adalah Google Cloud project ID Anda dan REGION adalah salah satu region yang didukung:

    curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \
        --format='value(credential.access_token)')" \
        https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/builds
    

    Dalam perintah ini, curl mengirim request.json dalam panggilan POST ke endpoint builds untuk metode API projects.builds.create.

    Perintah ini menampilkan detail tentang build Anda di jendela shell atau terminal. Output-nya adalah respons JSON dan terlihat mirip dengan hal berikut:

        {
            "name": "operations/build/$PROJECT-ID/NmZhZW...",
            "metadata": {
                "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
                "build": {
                    "id": $BUILD-ID,
                    "status": "QUEUED",
                    "source": {
                        "connectedRepository": {
                            "repository": "REPOSITORY",
                            "revision": "REVISION"
                        }
                    },
                    "createTime": "2017-05-12T18:58:07.341526Z",
                    "steps": [
                    {
                        "name": "gcr.io/cloud-builders/docker",
                        "args": [
                            "build",
                            "-t",
                            "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME",
                            "."
                        ]
                    }
                    ],
                    "timeout": "600s",
                    "images": [
                        "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME"
                    ],
                    "projectId": PROJECT_ID,
                    "logsBucket": "gs://...",
                    "sourceProvenance": {
                        "resolvedConnectedRepository": {
                            "repository": "REPOSITORY",
                            "revision": "REVISION.tar.gz"
                            "generation": "..."
                        }
                    },
                    "logUrl": "https://console.cloud.google.com/cloud-build/builds/...?project=PROJECT_ID"
                }
            }
        }
    

    Respons JSON dimodelkan menggunakan resource Operation di Cloud Build API. Kolom metadata dimodelkan menggunakan resource Build. Status QUEUED menunjukkan bahwa build sedang menunggu eksekusi.

Langkah berikutnya