Google Cloud Build 操作符¶
Google Cloud Build 是一项在 Google Cloud Platform 基础设施上执行构建的服务。Cloud Build 可以从 Google Cloud Storage、Cloud Source Repositories 导入源代码,按照您的规范执行构建,并生成 Docker 容器或 Java 归档等工件。
先决条件任务¶
要使用这些操作符,您必须执行以下几项操作:
使用 Cloud Console 选择或创建 Cloud Platform 项目。
按照 Google Cloud 文档中的说明,启用项目的结算功能。
按照 Cloud Console 文档中的说明,启用 API。
通过 pip 安装 API 库。
pip install 'apache-airflow[google]'有关详细信息,请参阅 安装。
使用操作符¶
使用 CloudBuildCancelBuildOperator
操作符取消正在进行的构建。
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,以便其他操作符使用。
CloudBuildCreateBuildOperator¶
使用指定的配置启动构建。此操作符生成的已创建构建的构建 ID 不是幂等的。
有关参数定义,请查看 CloudBuildCreateBuildOperator
构建配置¶
要触发构建,必须传递构建配置。
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 中的源代码。
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
操作符触发构建。
create_build_from_storage = CloudBuildCreateBuildOperator(
task_id="create_build_from_storage",
project_id=PROJECT_ID,
build=CREATE_BUILD_FROM_STORAGE_BODY,
)
您可以使用可延迟模式以异步方式运行此操作
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,以便其他操作符使用。
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,如下例所示。
create_build_without_wait = CloudBuildCreateBuildOperator(
task_id="create_build_without_wait",
project_id=PROJECT_ID,
build=CREATE_BUILD_FROM_REPO_BODY,
wait=False,
)
您可以使用可延迟模式以异步方式运行此操作
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 语法编写构建配置文件。
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"},
)
您可以使用可延迟模式以异步方式运行此操作
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 中的源代码。构建启动后,它将构建源代码存储库中的代码。
create_build_from_repo = CloudBuildCreateBuildOperator(
task_id="create_build_from_repo",
project_id=PROJECT_ID,
build=CREATE_BUILD_FROM_REPO_BODY,
)
您可以使用可延迟模式以异步方式运行此操作
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 触发器。
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,以便其他操作符使用。
CloudBuildDeleteBuildTriggerOperator¶
通过项目 ID 和触发器 ID 删除 Cloud Build 触发器。
有关参数定义,请查看 CloudBuildDeleteBuildTriggerOperator
使用操作符¶
使用 CloudBuildDeleteBuildTriggerOperator
操作符删除新的 Cloud Build 触发器。
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,以便其他操作符使用。
使用操作符¶
使用 CloudBuildGetBuildOperator
操作符返回有关先前请求的构建的信息。
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,以便其他操作符使用。
CloudBuildGetBuildTriggerOperator¶
返回有关 Cloud Build 触发器的信息。
有关参数定义,请查看 CloudBuildGetBuildTriggerOperator
使用操作符¶
使用 CloudBuildGetBuildTriggerOperator
操作符返回有关 Cloud Build 触发器的信息。
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,以便其他操作符使用。
CloudBuildListBuildTriggersOperator¶
列出所有现有的 Cloud Build 触发器。
有关参数定义,请查看 CloudBuildListBuildTriggersOperator
使用此操作符¶
使用 CloudBuildListBuildTriggersOperator
操作符列出所有现有的 Cloud Build 触发器。
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,这允许其他操作符使用它。
使用此操作符¶
使用 CloudBuildListBuildsOperator
操作符列出先前请求的构建。
list_builds = CloudBuildListBuildsOperator(
task_id="list_builds",
project_id=PROJECT_ID,
location="global",
)
您可以将 Jinja 模板 与 location
、project_id
、gcp_conn_id
参数一起使用,这允许您动态确定值。结果将保存到 XCom,这允许其他操作符使用它。
CloudBuildRetryBuildOperator¶
基于指定的构建创建新的构建。此方法使用原始构建请求创建一个新的构建,这可能会或可能不会导致相同的构建。
有关参数定义,请查看 CloudBuildRetryBuildOperator
使用此操作符¶
使用 CloudBuildRetryBuildOperator
操作符基于指定的构建创建新的构建。
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,以便其他操作符使用。
使用此操作符¶
使用 CloudBuildRunBuildTriggerOperator
操作符在特定的源修订版上运行触发器。
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,这允许其他操作符使用它。
CloudBuildUpdateBuildTriggerOperator¶
通过其项目 ID 和触发器 ID 更新 Cloud Build 触发器。
有关参数定义,请查看 CloudBuildUpdateBuildTriggerOperator
使用此操作符¶
使用 CloudBuildUpdateBuildTriggerOperator
操作符更新 Cloud Build 触发器。
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,这允许其他操作符使用它。