第 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 示例
							这通常可以通过 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]。