第 6 章 构建触发器


构建触发器 是在满足特定条件时自动启动容器镜像构建的机制,如更改源代码、依赖项更新或 创建 webhook 调用。这些触发器有助于自动化镜像构建过程,并确保容器镜像始终保持最新状态,而无需手动干预。

以下小节涵盖了与创建构建触发器、标签命名约定、如何跳过源控制构建、启动构建或手动触发构建相关的内容。

6.1. 创建构建触发器

以下流程 设置自定义 Git 触发器。自定义 Git 触发器是任何 Git 服务器充当 构建触发器 的通用方法。它依赖于 SSH 密钥和 webhook 端点。创建自定义 Git 触发器与创建任何其他触发器类似,但以下情况除外:

但是,可以复制这些步骤,以使用 Github、Gitlab 或 Bitbucket 创建 构建触发器,但在 config.yaml 文件中为这些服务配置凭证。

注意
  • 如果要使用 Github 创建 构建触发器,则必须通过创建 OAuth 应用程序将 Github 配置为与 Red Hat Quay 搭配使用。如需更多信息,请参阅"创建 OAuth 应用程序 Github"。

先决条件

  • 对于 OpenShift Container Platform 部署上的 Red Hat Quay,您必须为 裸机构建 或虚拟构建 配置了 OpenShift Container Platform 环境。

流程

  1. 登录到您的 Red Hat Quay registry。
  2. 在导航窗格中,单击 Repositories
  3. 单击 Create Repository
  4. Builds 选项卡。
  5. Builds 页面上,单击 Create Build Trigger
  6. 选择所需的平台,如 GithubBitbucketGitlab 或使用自定义 Git 存储库。在本例中,单击 Custom Git Repository Push
  7. 输入自定义 Git 存储库名称,例如 git@github.com:<username>/<repo>.git。然后,单击 Next
  8. 提示时,通过选择其中一个或两个选项来配置标记选项:

    • 使用分支或标签名称 标记清单。在选择此选项时,构建的清单会标记 git commit 的分支或标签名称。
    • 如果在默认分支上添加 latest 标签。在选择此选项时,如果构建在存储库的默认分支中进行了标记,则构建的清单具有 latest。

      另外,您可以添加自定义标记模板。您可以在这里输入多个标签模板,包括使用提交中的简短 SHA ID、时间戳、作者名称、提交者和分支名称作为标签。如需更多信息,请参阅 "Tag naming for build triggers"。

      配置标记后,点 Next

  9. 出现提示时,选择调用触发器时要构建的 Dockerfile 的位置。如果 Dockerfile 位于 git 存储库的根目录并命名为 Dockerfile,请输入 /Dockerfile 作为 Dockerfile 路径。然后,单击 Next
  10. 出现提示时,选择 Docker 构建的上下文。如果 Dockerfile 位于 Git 存储库的根目录中,请输入 / 作为构建上下文目录。然后,单击 Next
  11. 可选。选择可选的机器人帐户。这可让您在构建过程中拉取私有基础镜像。如果您知道不使用私有基础镜像,您可以跳过这一步。
  12. 点击 Next。检查任何验证警告。如有必要,请在单击 Finish 前修复问题。
  13. 您会被警报,该触发器已被成功激活。请注意,使用这个触发器需要以下操作:

    • 您必须授予以下对 git 存储库的读取访问权限。
    • 您必须将存储库设置为 POST 到以下 URL,才能触发构建。

      保存 SSH Public Key,然后单击 return to <organization_name>/<repository_name>。您将被重定向到存储库的 Builds 页面。

  14. Builds 页面中,您现在有一个 构建触发器。例如:

    Example Build trigger

    创建自定义 Git 触发器后,需要额外的步骤。继续 继续"设置自定义 Git 触发器"。

    如果您要为 Github、Gitlab 或 Bitbucket 设置构建触发器,请继续" 手动触发构建 "。

6.1.1. 设置自定义 Git 触发器

创建自定义 Git 触发器 后,需要额外的步骤:

  1. 您必须提供在创建触发器时生成的 SSH 公钥的读取访问权限。
  2. 您必须设置 POST 到 Red Hat Quay 端点的 Webhook,以触发构建。

只有在使用 自定义 Git 触发器 时,才需要这些步骤。

6.1.1.1. 获取构建触发器凭证

SSH 公钥和 Webhook 端点 URL 在 Red Hat Quay UI 上提供。

先决条件

  • 您已创建了自定义 Git 触发器

流程

  1. 在存储库的 Builds 页面中,单击 自定义 Git 触发器 菜单 kebab。
  2. 单击 View Credentials
  3. 保存 SSH 公钥和 Webhook 端点 URL。

通过从 Settingsgear 图标选择 View Credentials,可以使用密钥和 URL。

从您的存储库中查看和修改标签

Trigger Credentials

6.1.1.1.1. SSH 公钥访问

根据 Git 服务器配置,可以通过多种方法安装为自定义 Git 触发器生成的 SSH 公钥。

例如,服务器上获取 Git 的文档描述了如何在基于 Linux 的机器上设置 Git 服务器,专注于通过 SSH 管理存储库和访问控制。在此过程中,将小服务器设置为将密钥添加到 $HOME/.ssh/authorize_keys 文件夹,它为 构建器 提供克隆存储库的访问权限。

对于任何未正式支持的 Git 存储库管理软件,通常有一个位置来输入通常标记为 Deploy Keys 的密钥。

6.1.1.1.2. Webhook

要自动触发构建,您必须使用以下格式将 .json 有效负载 POST 到 webhook URL:

注意

此请求需要一个包含 application/jsonContent-Type 标头才能有效。

Webhook 示例

{
  "commit": "1c002dd",                                   // required
  "ref": "refs/heads/master",                            // required
  "default_branch": "master",                            // required
  "commit_info": {                                       // optional
    "url": "gitsoftware.com/repository/commits/1234567", // required
    "message": "initial commit",                         // required
    "date": "timestamp",                                 // required
    "author": {                                          // optional
      "username": "user",                                // required
      "avatar_url": "gravatar.com/user.png",             // required
      "url": "gitsoftware.com/users/user"                // required
    },
    "committer": {                                       // optional
      "username": "user",                                // required
      "avatar_url": "gravatar.com/user.png",             // required
      "url": "gitsoftware.com/users/user"                // required
    }
  }
}

这通常可以通过 post-receive Git hook 来完成,但它取决于服务器设置。

6.1.2. 构建触发器的标签命名

自定义标签可用于 Red Hat Quay。

一个选项是包括分配给每个构建镜像标签的任何字符字符串。或者,您可以使用构建触发器的 Configure Tagging 部分中的以下标签模板来标记带有每个提交信息的镜像:

Configure Tagging

  • ${commit} :已发布的提交的完全 SHA
  • ${parsed_ref.branch}: 分支信息(如果可用)
  • ${parsed_ref.tag}: 标签信息(如果可用)
  • ${parsed_ref.remote} :远程名称
  • ${commit_info.date}: 签发提交的日期
  • ${commit_info.author.username}: 提交作者的用户名
  • ${commit_info.short_sha}: 提交 SHA 的前 7 个字符
  • ${committer.properties.username}: committer 的 Username

此列表未完成,但包含用于标记目的的最有用的选项。您可以在此页面中找到完整的标签模板模式。https://github.com/quay/quay/blob/abfde5b9d2cf7d7145e68a00c9274011b4fe0661/buildtrigger/basehandler.py#L96-L195

如需更多信息,请参阅为 Red Hat Quay 和 Quay.io 构建触发器中设置自定义标签模板

6.1.3. 跳过源 control-triggered 构建

要指定构建系统应该忽略提交,请在提交消息中的任何位置添加文本 [skip build][build skip]

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.