手动启动构建

本页面介绍了如何使用 gcloud 命令行工具和 Cloud Build API 在 Cloud Build 中手动启动构建。 要创建只能手动调用的构建触发器,请参阅创建手动触发器

准备工作

  • 如果要使用本指南中的命令行示例,请安装 gcloud 命令行工具
  • 要使用 Cloud Build 构建配置进行构建,请使用构建配置文件构建
  • 如需使用 Dockerfile 进行构建,请准备好 Dockerfile
  • 如果您的构建需要源代码,请准备好源代码。

必需的 IAM 权限

有关授予 IAM 角色的说明,请参阅配置项目成员的访问权限

运行构建

控制台

您无法使用 Google Cloud Console 手动启动新构建,但您可以重试以前的构建。

如需重试以前的构建,请执行以下操作:

  1. 打开 Google Cloud Console 的 Cloud Build 部分中的构建记录页面。

    打开“构建记录”页面

  2. 选择您的项目,然后点击打开

  3. 构建记录页面中,点击要重建的构建。

  4. 点击重建

gcloud

使用 Dockerfile

Dockerfile 包含使用 Cloud Build 构建 Docker 映像所需的所有信息。

如需使用 Dockerfile 运行构建请求,请从包含您的应用代码、Dockerfile 以及任何其他资源的目录中运行以下命令:

gcloud builds submit --tag gcr.io/project-id/image-name .

其中:

  • project-id 是您的 Cloud 项目的名称。
  • image-name 是要构建的映像。
  • . 指定源代码位于当前工作目录中。

要构建的映像的全名是 gcr.io/project-id/image-name。推送到 Container Registry 的映像使用注册表名称格式

gcloud builds submit 命令:

  • 压缩当前目录中的应用代码、Dockerfile 以及任何其他资源(用 . 表示);
  • 将文件上传至 Cloud Storage 存储分区;
  • 使用上传的文件作为输入启动构建;
  • 使用提供的名称标记映像
  • 将构建的映像推送到 Container Registry。

随着构建的进行,会在 shell 或终端窗口中显示其输出。构建完成后,您应该看到类似于以下内容的输出:

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

其中 $BUILD_ID 是构建的唯一标识符。

使用 Cloud Build 构建配置文件

要使用构建配置提交构建,请运行以下命令:

    gcloud builds submit --config build-config source-code

其中:

  • build-config 是构建配置文件的路径。
  • source-code 是源代码的路径或网址。

当您在 Cloud 项目中首次运行 gcloud builds submit 时,Cloud Build 会在该项目中创建一个名为 [YOUR_PROJECT_NAME]_couldbuild 的 Cloud Storage 存储分区。Cloud Build 使用此存储分区来存储您用于构建的任何源代码。Cloud Build 不会自动删除此存储分区中的内容。如需删除不再用于构建的对象,您可以在存储分区上设置生命周期配置,也可以手动删除对象

以下命令使用存储在 Cloud Storage 存储分区中的归档源代码提交 cloudbuild.yaml 构建请求。

    gcloud builds submit --config cloudbuild.yaml \
        gs://cloud-build-examples/node-docker-example.tar.gz

您可以使用 . 指定源代码位于当前工作目录中:

    gcloud builds submit --config cloudbuild.yaml .

gcloudignore:包含了构建的源代码时,上述命令会将指定目录中的所有文件上传至 Google Cloud Platform 以进行构建。如果您要排除目录中的某些文件,可以在顶级上传目录中包含名为 .gcloudignore 的文件;该文件所指定的文件将被忽略。如果顶级上传目录中不存在 .gcloudignore 文件,但存在 .gitignore 文件,则 gcloud 工具将生成一个与 Git 兼容的 .gcloudignore 文件,该文件遵循 .gitignore 的文件。如需了解详情,请参阅 gcloudignore 文档

如果您没有要传入到构建的源代码,请使用 --no-source 标志,其中 build-config 是构建配置文件的路径:

    gcloud builds submit --config build-config --no-source

API

如需使用 提交构建请求,请执行以下操作curl

  1. 创建名为 request.json 且包含以下内容的文件:

    {
        "source": {
            "storageSource": {
                "bucket": "cloud-build-examples",
                "object": "node-docker-example.tar.gz"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/$PROJECT_ID/my-image",
                "."
            ]
        }],
        "images": [
            "gcr.io/$PROJECT_ID/my-image"
        ]
    }
    

    在此构建请求中,Cloud Build 会调用带有参数 build -t gcr.io/$PROJECT_ID/cb-demo-img .docker 构建步骤。

    要构建的映像的全名是 gcr.io/$PROJECT_ID/cb-demo-img。 推送到 Container Registry 的映像使用注册表名称格式

    用于构建的代码源位于压缩的 tar 归档文件 node-docker-example.tar.gz 中。该文件存储在名为 cloud-build-examplesCloud Storage 存储分区中。

  2. 运行以下命令,其中 project-id 是您的云项目 ID:

    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/builds
    

    在此命令中,curl 将 POST 调用中的 request.json 发送到 builds 端点以获取 projects.builds.create API 方法。

    该命令在 shell 或终端窗口中显示有关构建的详细信息。输出是 JSON 响应,看起来类似于以下内容:

    {
        "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": "cloud-build-examples",
                        "object": "node-docker-example.tar.gz"
                    }
                },
                "createTime": "2017-05-12T18:58:07.341526Z",
                "steps": [
                {
                    "name": "gcr.io/cloud-builders/docker",
                    "args": [
                        "build",
                        "-t",
                        "gcr.io/$PROJECT-ID/cb-demo-img",
                        "."
                    ]
                }
                ],
                "timeout": "600s",
                "images": [
                    "gcr.io/$PROJECT-ID/cb-demo-img"
                ],
                "projectId": $PROJECT-ID,
                "logsBucket": "gs://...",
                "sourceProvenance": {
                    "resolvedStorageSource": {
                        "bucket": "cloud-build-examples",
                        "object": "node-docker-example.tar.gz",
                        "generation": "..."
                    }
                },
                "logUrl": "https://console.cloud.google.com/gcr/builds/...?project=$PROJECT-ID"
            }
        }
    }
    

    JSON 响应使用 Cloud Build API 中的 Operation 资源建模。metadata 字段使用 Build 资源建模。QUEUED 状态表示构建正在等待执行。

后续步骤