第 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 环境。
流程
- 登录到您的 Red Hat Quay registry。
- 在导航窗格中,单击 Repositories。
- 单击 Create Repository。
- 点 Builds 选项卡。
- 在 Builds 页面上,单击 Create Build Trigger。
- 选择所需的平台,如 Github、Bitbucket、Gitlab 或使用自定义 Git 存储库。在本例中,单击 Custom Git Repository Push。
-
输入自定义 Git 存储库名称,例如
git@github.com:<username>/<repo>.git
。然后,单击 Next。 提示时,通过选择其中一个或两个选项来配置标记选项:
- 使用分支或标签名称 标记清单。在选择此选项时,构建的清单会标记 git commit 的分支或标签名称。
如果在默认分支上添加
latest
标签。在选择此选项时,如果构建在存储库的默认分支中进行了标记,则构建的清单具有 latest。另外,您可以添加自定义标记模板。您可以在这里输入多个标签模板,包括使用提交中的简短 SHA ID、时间戳、作者名称、提交者和分支名称作为标签。如需更多信息,请参阅 "Tag naming for build triggers"。
配置标记后,点 Next。
- 出现提示时,选择调用触发器时要构建的 Dockerfile 的位置。如果 Dockerfile 位于 git 存储库的根目录并命名为 Dockerfile,请输入 /Dockerfile 作为 Dockerfile 路径。然后,单击 Next。
-
出现提示时,选择 Docker 构建的上下文。如果 Dockerfile 位于 Git 存储库的根目录中,请输入
/
作为构建上下文目录。然后,单击 Next。 - 可选。选择可选的机器人帐户。这可让您在构建过程中拉取私有基础镜像。如果您知道不使用私有基础镜像,您可以跳过这一步。
- 点击 Next。检查任何验证警告。如有必要,请在单击 Finish 前修复问题。
您会被警报,该触发器已被成功激活。请注意,使用这个触发器需要以下操作:
- 您必须授予以下对 git 存储库的读取访问权限。
您必须将存储库设置为
POST
到以下 URL,才能触发构建。保存 SSH Public Key,然后单击 return to <organization_name>/<repository_name>。您将被重定向到存储库的 Builds 页面。
在 Builds 页面中,您现在有一个 构建触发器。例如:
创建自定义 Git 触发器后,需要额外的步骤。继续 继续"设置自定义 Git 触发器"。
如果您要为 Github、Gitlab 或 Bitbucket 设置构建触发器,请继续" 手动触发构建 "。
6.1.1. 设置自定义 Git 触发器
创建自定义 Git 触发器 后,需要额外的步骤:
- 您必须提供在创建触发器时生成的 SSH 公钥的读取访问权限。
- 您必须设置 POST 到 Red Hat Quay 端点的 Webhook,以触发构建。
只有在使用 自定义 Git 触发器 时,才需要这些步骤。
6.1.1.1. 获取构建触发器凭证
SSH 公钥和 Webhook 端点 URL 在 Red Hat Quay UI 上提供。
先决条件
- 您已创建了自定义 Git 触发器。
流程
- 在存储库的 Builds 页面中,单击 自定义 Git 触发器 菜单 kebab。
- 单击 View Credentials。
- 保存 SSH 公钥和 Webhook 端点 URL。
通过从 Settings 或 gear 图标选择 View Credentials,可以使用密钥和 URL。
从您的存储库中查看和修改标签
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/json
的 Content-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 部分中的以下标签模板来标记带有每个提交信息的镜像:
- ${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
6.1.3. 跳过源 control-triggered 构建
要指定构建系统应该忽略提交,请在提交消息中的任何位置添加文本 [skip build]
或 [build skip]
。