Google Cloud Build Operator¶
Google Cloud Build 是一項在 Google Cloud Platform 基礎設施上執行構建的服務。Cloud Build 可以從 Google Cloud Storage、Cloud Source Repositories 匯入原始碼,根據您的規範執行構建,並生成諸如 Docker 容器或 Java 歸檔檔案等製品。
先決條件任務¶
要使用這些 operator,您必須執行以下幾項操作
使用 Cloud 控制檯 選擇或建立一個 Cloud Platform 專案。
為您的專案啟用結算功能,詳情請參閱Google Cloud 文件。
啟用 API,詳情請參閱Cloud 控制檯文件。
透過 pip 安裝 API 庫。
pip install 'apache-airflow[google]'有關詳細資訊,請參閱安裝。
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 使用。
參考¶
有關進一步資訊,請參閱