Google Cloud Build Operator

Google Cloud Build 是一项在 Google Cloud Platform 基础设施上执行构建的服务。Cloud Build 可以从 Google Cloud Storage、Cloud Source Repositories 导入源代码,根据您的规范执行构建,并生成诸如 Docker 容器或 Java 归档文件等制品。

先决条件任务

要使用这些 operator,您必须执行以下几项操作

CloudBuildCancelBuildOperator

取消正在进行的构建。

有关参数定义,请参阅 CloudBuildCancelBuildOperator

使用 operator

使用 CloudBuildCancelBuildOperator operator 取消正在进行的构建。

tests/system/google/cloud/cloud_build/example_cloud_build.py

    cancel_build = CloudBuildCancelBuildOperator(
        task_id="cancel_build",
        id_=cast("str", XComArg(create_build_without_wait, key="id")),
        project_id=PROJECT_ID,
    )

您可以使用 Jinja 模板project_id, id_, gcp_conn_id, location 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

CloudBuildCreateBuildOperator

使用指定配置启动构建。由此 operator 生成的已创建构建的构建 ID 不是幂等的。

有关参数定义,请参阅 CloudBuildCreateBuildOperator

构建配置

为了触发构建,需要传递构建配置。

tests/system/google/cloud/cloud_build/example_cloud_build.py

CREATE_BUILD_FROM_STORAGE_BODY = {
    "source": {"storage_source": GCP_SOURCE_ARCHIVE_URL},
    "steps": [{"name": "ubuntu", "entrypoint": "bash", "args": ["-c", "echo Hello world && sleep 200"]}],
}

此外,构建可以引用存储在 Google Cloud Source Repositories 中的源代码。

tests/system/google/cloud/cloud_build/example_cloud_build.py

CREATE_BUILD_FROM_REPO_BODY: dict[str, Any] = {
    "source": {"repo_source": {"repo_name": GCP_SOURCE_REPOSITORY_NAME, "branch_name": "master"}},
    "steps": [{"name": "ubuntu", "entrypoint": "bash", "args": ["-c", "echo Hello world && sleep 200"]}],
}

阅读构建配置概览,以了解您可以在构建配置文件中包含的所有字段。

使用 operator

使用 CloudBuildCreateBuildOperator operator 执行触发构建操作。

tests/system/google/cloud/cloud_build/example_cloud_build.py

    create_build_from_storage = CloudBuildCreateBuildOperator(
        task_id="create_build_from_storage",
        project_id=PROJECT_ID,
        build=CREATE_BUILD_FROM_STORAGE_BODY,
    )

您可以使用可推迟模式(deferrable mode)以异步方式运行此 operator

tests/system/google/cloud/cloud_build/example_cloud_build.py

    create_build_from_storage = CloudBuildCreateBuildOperator(
        task_id="create_build_from_storage",
        project_id=PROJECT_ID,
        build=CREATE_BUILD_FROM_STORAGE_BODY,
        deferrable=True,
    )

您可以使用 Jinja 模板project_id, build, gcp_conn_id, impersonation_chain, location 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

tests/system/google/cloud/cloud_build/example_cloud_build.py

    create_build_from_storage_result = BashOperator(
        bash_command=f"echo {cast('str', XComArg(create_build_from_storage, key='results'))}",
        task_id="create_build_from_storage_result",
    )

默认情况下,构建创建后,operator 会等待构建操作完成。如果无需等待完成,可以按以下示例所示传递 wait=False。

tests/system/google/cloud/cloud_build/example_cloud_build.py

    create_build_without_wait = CloudBuildCreateBuildOperator(
        task_id="create_build_without_wait",
        project_id=PROJECT_ID,
        build=CREATE_BUILD_FROM_REPO_NO_WAIT_BODY,
        wait=False,
    )

您可以使用可推迟模式(deferrable mode)以异步方式运行此 operator

tests/system/google/cloud/cloud_build/example_cloud_build.py

    create_build_without_wait = CloudBuildCreateBuildOperator(
        task_id="create_build_without_wait",
        project_id=PROJECT_ID,
        build=CREATE_BUILD_FROM_REPO_NO_WAIT_BODY,
        wait=False,
        deferrable=True,
    )

为了在 Cloud Build 上启动构建,您可以使用构建配置文件。构建配置文件定义了 Cloud Build 执行任务所需的字段。您可以使用 YAML 或 JSON 语法编写构建配置文件。

tests/system/google/cloud/cloud_build/example_cloud_build.py

create_build_from_file = CloudBuildCreateBuildOperator(
    task_id="create_build_from_file",
    project_id=PROJECT_ID,
    build=yaml.safe_load((Path(CURRENT_FOLDER) / "resources" / "example_cloud_build.yaml").read_text()),
    params={"name": "Airflow"},
)

您可以使用可推迟模式(deferrable mode)以异步方式运行此 operator

tests/system/google/cloud/cloud_build/example_cloud_build.py

create_build_from_file_deferrable = CloudBuildCreateBuildOperator(
    task_id="create_build_from_file_deferrable",
    project_id=PROJECT_ID,
    build=yaml.safe_load((Path(CURRENT_FOLDER) / "resources" / "example_cloud_build.yaml").read_text()),
    params={"name": "Airflow"},
    deferrable=True,
)

此外,Cloud Build 可以引用存储在 Google Cloud Source Repositories 中的源代码。构建启动后,它将在源代码仓库中构建代码。

tests/system/google/cloud/cloud_build/example_cloud_build.py

        create_build_from_repo = CloudBuildCreateBuildOperator(
            task_id="create_build_from_repo",
            project_id=PROJECT_ID,
            build=CREATE_BUILD_FROM_REPO_BODY,
        )

您可以使用可推迟模式(deferrable mode)以异步方式运行此 operator

tests/system/google/cloud/cloud_build/example_cloud_build.py

    create_build_from_repo = CloudBuildCreateBuildOperator(
        task_id="create_build_from_repo",
        project_id=PROJECT_ID,
        build=CREATE_BUILD_FROM_REPO_BODY,
        deferrable=True,
    )

CloudBuildCreateBuildTriggerOperator

创建一个新的 Cloud Build 触发器。由此 operator 生成的已创建构建触发器的构建触发器 ID 不是幂等的。

有关参数定义,请参阅 CloudBuildCreateBuildTriggerOperator

使用 operator

使用 CloudBuildCreateBuildTriggerOperator operator 创建一个新的 Cloud Build 触发器。

tests/system/google/cloud/cloud_build/example_cloud_build_trigger.py

create_build_trigger = CloudBuildCreateBuildTriggerOperator(
    task_id="create_build_trigger", project_id=PROJECT_ID, trigger=create_build_trigger_body
)

您可以使用 Jinja 模板project_id, trigger, gcp_conn_id, location 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

CloudBuildDeleteBuildTriggerOperator

按项目 ID 和触发器 ID 删除 Cloud Build 触发器。

有关参数定义,请参阅 CloudBuildDeleteBuildTriggerOperator

使用 operator

使用 CloudBuildDeleteBuildTriggerOperator operator 删除一个新的 Cloud Build 触发器。

tests/system/google/cloud/cloud_build/example_cloud_build_trigger.py

delete_build_trigger = CloudBuildDeleteBuildTriggerOperator(
    task_id="delete_build_trigger",
    project_id=PROJECT_ID,
    trigger_id=build_trigger_id,
)

您可以使用 Jinja 模板project_id, trigger_id, gcp_conn_id, location 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

CloudBuildGetBuildOperator

返回有关先前请求的构建的信息。

有关参数定义,请参阅 CloudBuildGetBuildOperator

使用 operator

使用 CloudBuildGetBuildOperator operator 返回有关先前请求的构建的信息。

tests/system/google/cloud/cloud_build/example_cloud_build.py

    get_build = CloudBuildGetBuildOperator(
        task_id="get_build",
        id_=cast("str", XComArg(retry_build, key="id")),
        project_id=PROJECT_ID,
    )

您可以使用 Jinja 模板project_id, id_, gcp_conn_id, location 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

CloudBuildGetBuildTriggerOperator

返回有关 Cloud Build 触发器的信息。

有关参数定义,请参阅 CloudBuildGetBuildTriggerOperator

使用 operator

使用 CloudBuildGetBuildTriggerOperator operator 返回有关 Cloud Build 触发器的信息。

tests/system/google/cloud/cloud_build/example_cloud_build_trigger.py

get_build_trigger = CloudBuildGetBuildTriggerOperator(
    task_id="get_build_trigger",
    project_id=PROJECT_ID,
    trigger_id=build_trigger_id,
)

您可以使用 Jinja 模板project_id, trigger_id, gcp_conn_id, location 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

CloudBuildListBuildTriggersOperator

列出所有现有的 Cloud Build 触发器。

有关参数定义,请参阅 CloudBuildListBuildTriggersOperator

使用 operator

使用 CloudBuildListBuildTriggersOperator operator 列出所有现有的 Cloud Build 触发器。

tests/system/google/cloud/cloud_build/example_cloud_build_trigger.py

list_build_triggers = CloudBuildListBuildTriggersOperator(
    task_id="list_build_triggers",
    project_id=PROJECT_ID,
    location="global",
    page_size=5,
)

您可以使用 Jinja 模板location, project_id, gcp_conn_id 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

CloudBuildListBuildsOperator

列出先前请求的构建。

有关参数定义,请参阅 CloudBuildListBuildsOperator

使用 operator

使用 CloudBuildListBuildsOperator operator 列出先前请求的构建。

tests/system/google/cloud/cloud_build/example_cloud_build.py

list_builds = CloudBuildListBuildsOperator(
    task_id="list_builds",
    project_id=PROJECT_ID,
    location="global",
)

您可以使用 Jinja 模板location, project_id, gcp_conn_id 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

CloudBuildRetryBuildOperator

基于指定构建创建新构建。此方法使用原始构建请求创建一个新构建,结果构建可能与原始构建相同,也可能不同。

有关参数定义,请参阅 CloudBuildRetryBuildOperator

使用 operator

使用 CloudBuildRetryBuildOperator operator 基于指定构建创建新构建。

tests/system/google/cloud/cloud_build/example_cloud_build.py

    retry_build = CloudBuildRetryBuildOperator(
        task_id="retry_build",
        id_=cast("str", XComArg(cancel_build, key="id")),
        project_id=PROJECT_ID,
    )

您可以使用 Jinja 模板project_id, id_, gcp_conn_id, location 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

CloudBuildRunBuildTriggerOperator

在特定源代码修订版本上运行触发器。

有关参数定义,请参阅 CloudBuildRunBuildTriggerOperator

使用 operator

使用 CloudBuildRunBuildTriggerOperator operator 在特定源代码修订版本上运行触发器。

tests/system/google/cloud/cloud_build/example_cloud_build_trigger.py

run_build_trigger = CloudBuildRunBuildTriggerOperator(
    task_id="run_build_trigger",
    project_id=PROJECT_ID,
    trigger_id=build_trigger_id,
    source=create_build_from_repo_body["source"]["repo_source"],
)

您可以使用 Jinja 模板project_id, trigger_id, source, gcp_conn_id, location 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

CloudBuildUpdateBuildTriggerOperator

按项目 ID 和触发器 ID 更新 Cloud Build 触发器。

有关参数定义,请参阅 CloudBuildUpdateBuildTriggerOperator

使用 operator

使用 CloudBuildUpdateBuildTriggerOperator operator 更新 Cloud Build 触发器。

tests/system/google/cloud/cloud_build/example_cloud_build_trigger.py

create_build_trigger = CloudBuildCreateBuildTriggerOperator(
    task_id="create_build_trigger", project_id=PROJECT_ID, trigger=create_build_trigger_body
)

您可以使用 Jinja 模板project_id, trigger_id, trigger, gcp_conn_id, location 参数动态确定值。结果保存到 XCom 中,可供其他 operator 使用。

参考

有关进一步信息,请参阅

此条目是否有帮助?