Google Cloud Build 算子¶
Google Cloud Build 是一项在 Google Cloud Platform 基础设施上执行构建的服务。Cloud Build 可以从 Google Cloud Storage、Cloud Source Repositories 导入源代码,根据您的规范执行构建,并生成诸如 Docker 容器或 Java 存档之类的工件。
先决任务¶
要使用这些算子,您必须执行一些操作
使用 Cloud 控制台 选择或创建 Cloud Platform 项目。
为您的项目启用帐单,如 Google Cloud 文档 中所述。
启用 API,如 Cloud 控制台文档 中所述。
通过 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"]}],
}
此外,构建可以引用存储在 Google Cloud 源代码存储库 中的源代码。
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"]}],
}
阅读 构建配置概述 以了解你可以在构建配置文件中包含的所有字段。
使用运算符¶
使用 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,
)
您可以在 location
, project_id
, gcp_conn_id
参数中使用 Jinja 模板,这允许您动态确定值。结果保存到 XCom 中,这允许其他运算符使用它。
使用运算符¶
使用 CloudBuildListBuildsOperator
运算符列出先前请求的构建。
list_builds = CloudBuildListBuildsOperator(
task_id="list_builds",
project_id=PROJECT_ID,
location="global",
)
您可以在 location
, project_id
, gcp_conn_id
参数中使用 Jinja 模板,这允许您动态确定值。结果保存到 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,以便其他运算符使用它。