Google Cloud Build 操作符

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

先决条件任务

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

CloudBuildCancelBuildOperator

取消正在进行的构建。

有关参数定义,请查看 CloudBuildCancelBuildOperator

使用操作符

使用 CloudBuildCancelBuildOperator 操作符取消正在进行的构建。

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_idid_gcp_conn_idlocation 参数,以便动态确定值。结果会保存到 XCom,以便其他操作符使用。

CloudBuildCreateBuildOperator

使用指定的配置启动构建。此操作符生成的已创建构建的构建 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", "args": ["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", "args": ["echo", "Hello world", "sleep 200"]}],
}

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

使用操作符

使用 CloudBuildCreateBuildOperator 操作符触发构建。

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,
    )

您可以使用可延迟模式以异步方式运行此操作

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_idbuildgcp_conn_idimpersonation_chainlocation 参数,以便动态确定值。结果会保存到 XCom,以便其他操作符使用。

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",
    )

默认情况下,创建构建后,它将等待构建操作完成。如果不需要等待完成,您可以传递 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_BODY,
        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_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"},
)

您可以使用可延迟模式以异步方式运行此操作

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,
        )

您可以使用可延迟模式以异步方式运行此操作

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 触发器。此操作符生成的已创建构建触发器的构建触发器 ID 不是幂等的。

有关参数定义,请查看 CloudBuildCreateBuildTriggerOperator

使用操作符

使用 CloudBuildCreateBuildTriggerOperator 操作符创建新的 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_idtriggergcp_conn_idlocation 参数,以便动态确定值。结果会保存到 XCom,以便其他操作符使用。

CloudBuildDeleteBuildTriggerOperator

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

有关参数定义,请查看 CloudBuildDeleteBuildTriggerOperator

使用操作符

使用 CloudBuildDeleteBuildTriggerOperator 操作符删除新的 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_idtrigger_idgcp_conn_idlocation 参数,以便动态确定值。结果会保存到 XCom,以便其他操作符使用。

CloudBuildGetBuildOperator

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

有关参数定义,请查看 CloudBuildGetBuildOperator

使用操作符

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

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_idid_gcp_conn_idlocation 参数,以便动态确定值。结果会保存到 XCom,以便其他操作符使用。

CloudBuildGetBuildTriggerOperator

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

有关参数定义,请查看 CloudBuildGetBuildTriggerOperator

使用操作符

使用 CloudBuildGetBuildTriggerOperator 操作符返回有关 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_idtrigger_idgcp_conn_idlocation 参数,以便动态确定值。结果会保存到 XCom,以便其他操作符使用。

CloudBuildListBuildTriggersOperator

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

有关参数定义,请查看 CloudBuildListBuildTriggersOperator

使用此操作符

使用 CloudBuildListBuildTriggersOperator 操作符列出所有现有的 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 模板locationproject_idgcp_conn_id 参数一起使用,这允许您动态确定值。结果将保存到 XCom,这允许其他操作符使用它。

CloudBuildListBuildsOperator

列出先前请求的构建。

有关参数定义,请查看 CloudBuildListBuildsOperator

使用此操作符

使用 CloudBuildListBuildsOperator 操作符列出先前请求的构建。

tests/system/google/cloud/cloud_build/example_cloud_build.py[源代码]

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

您可以将 Jinja 模板locationproject_idgcp_conn_id 参数一起使用,这允许您动态确定值。结果将保存到 XCom,这允许其他操作符使用它。

CloudBuildRetryBuildOperator

基于指定的构建创建新的构建。此方法使用原始构建请求创建一个新的构建,这可能会或可能不会导致相同的构建。

有关参数定义,请查看 CloudBuildRetryBuildOperator

使用此操作符

使用 CloudBuildRetryBuildOperator 操作符基于指定的构建创建新的构建。

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_idid_gcp_conn_idlocation 参数,以便动态确定值。结果会保存到 XCom,以便其他操作符使用。

CloudBuildRunBuildTriggerOperator

在特定的源修订版上运行触发器。

有关参数定义,请查看 CloudBuildRunBuildTriggerOperator

使用此操作符

使用 CloudBuildRunBuildTriggerOperator 操作符在特定的源修订版上运行触发器。

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_idtrigger_idsourcegcp_conn_idlocation 参数一起使用,这允许您动态确定值。结果将保存到 XCom,这允许其他操作符使用它。

CloudBuildUpdateBuildTriggerOperator

通过其项目 ID 和触发器 ID 更新 Cloud Build 触发器。

有关参数定义,请查看 CloudBuildUpdateBuildTriggerOperator

使用此操作符

使用 CloudBuildUpdateBuildTriggerOperator 操作符更新 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_idtrigger_idtriggergcp_conn_idlocation 参数一起使用,这允许您动态确定值。结果将保存到 XCom,这允许其他操作符使用它。

参考

有关更多信息,请查看

此条目是否有帮助?