【问题标题】:How to use python-cloudbuild to run a build trigger如何使用 python-cloudbuild 运行构建触发器
【发布时间】:2021-09-24 08:19:29
【问题描述】:

如何使用 python-cloudbuild 库运行构建触发器并正确传递来自 SourceRepo 的数据?

更新 1:

我设置了一个构建触发器,我正在尝试通过更改替换和 repo 分支来运行该触发器

更新 2:

实际代码结果:

Traceback(最近一次调用最后一次):文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/google/api_core/grpc_helpers.py”,第 67 行,在 error_remapped_callable return callable_ (*args, **kwargs) 文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/grpc/_channel.py”,第 946 行,在 call 中return _end_unary_response_blocking(state, call, False, None) 文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/grpc/_channel.py”,第 849 行,在 _end_unary_response_blocking raise _InactiveRpcError(state ) grpc._channel._InactiveRpcError: <_inactiverpcerror of rpc status="StatusCode.INTERNAL</p">

credentials, project_id = google.auth.default()
client = cloudbuild_v1.services.cloud_build.CloudBuildClient()

trigger_id = '2f1erbc4-asdf-1234-qwery-c4bc74d16d62'

repo_source = cloudbuild_v1.RepoSource()
repo_source.branch_name = 'develop'
repo_source.substitutions = {
    "_ENVIRONMENT":"dev",
    "NAMESPACE":"dev"
}

operation = client.run_build_trigger(
    project_id=project_id,
    trigger_id=trigger_id,
    source=repo_source
)

【问题讨论】:

  • 嗨达米安,只是为了确认你在这里想要实现的目标。您已经创建了一个构建触发器,现在想从 python 脚本运行它?我之所以问是因为——除非配置为手动——构建触发器通常会根据源仓库上发生的 git 事件(推送/拉取请求/标签)精确创建以自动执行,而无需运行任何东西。
  • 是的,我设置了构建触发器,我正在尝试通过更改替换和 repo 分支来运行该触发器。
  • 我在直接与 Cloud Build API 交互时遇到了类似的错误——尤其是与 projects.triggers 端点交互时。可能值得在 IssueTracker 上打开一个问题
  • 实际上,我设法直接使用 API 使其工作,我被另一个问题阻止,即“branchName”字段似乎不接受正则表达式(请参阅Trigger Run REST API not accepting regex branchName in payload)。但是,我仍然面临与您使用 google-cloud-build python 库相同的问题。请参阅我的答案,了解使用 google-api-python-client 的替代实现。

标签: python google-cloud-platform google-api-python-client google-cloud-build google-cloud-python


【解决方案1】:

在使用 Python 的 Cloud Build 客户端库 (google-cloud-build) 时,我遇到了同样的问题。但是,直接调用 REST API 时它确实可以正常工作,因此库似乎是这里的原因。作为替代方案,您可以使用 Google API Python 客户端库 (google-api-python-client) 实现相同目的:

from googleapiclient.discovery import build

project_id = "my-project-id"
trigger_id = "00000000-1111-2222-aaaa-bbbbccccdddd"

with build("cloudbuild", "v1") as cloudbuild:
  run_build_trigger = cloudbuild.projects().triggers().run(
    projectId = project_id,
    triggerId = trigger_id,
    body = {
      "branchName": "dev",
      "substitutions": {
        "_TEST": "FOO"
      }
    }
  )

  run_build_trigger.execute()

确保所有替换都已在现有触发器上声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2019-04-09
    相关资源
    最近更新 更多