Autobuild 和 Autotest 的高级选项
注意
自动化构建需要一个 Docker Pro、Team 或 Business 订阅。
以下选项允许您自定义 automated build 和 automated 测试过程。
用于构建和测试的环境变量
几个实用程序环境变量由构建过程设置,它们是 在自动生成、自动化测试和执行期间可用 钩。
注意
这些环境变量仅适用于 build 和 test 进程,并且不会影响服务的运行环境。
SOURCE_BRANCH
:当前正在测试的分支或标签的名称。SOURCE_COMMIT
:正在测试的提交的 SHA1 哈希值。COMMIT_MSG
:来自正在测试和构建的提交的消息。DOCKER_REPO
:正在构建的 Docker 存储库的名称。DOCKERFILE_PATH
:当前正在构建的 Dockerfile。DOCKER_TAG
:正在构建的 Docker 存储库标记。IMAGE_NAME
:正在构建的 Docker 存储库的名称和标签。(此变量是DOCKER_REPO
:DOCKER_TAG
.)
如果您在docker-compose.test.yml
文件中进行自动化测试,请在sut
service 的环境,如下所示。
services:
sut:
build: .
command: run_tests.sh
environment:
- SOURCE_BRANCH
覆盖生成、测试或推送命令
Docker Hub 允许您覆盖和自定义build
,test
和push
命令。例如,您
可能使用 build 钩子来设置仅在构建期间使用的构建参数
过程。您还可以设置自定义构建阶段挂钩,以便在这些命令之间执行作。
重要
请谨慎使用这些钩子。这些钩子文件的内容将替换 基本
docker
命令,因此您必须包含类似的 build、test 或 push 命令,否则您的自动化过程无法完成。
要覆盖这些阶段,请创建一个名为hooks
在源代码中
repository 与 Dockerfile 位于同一目录级别。创建一个名为hooks/build
,hooks/test
或hooks/push
并包含命令,这些命令的
builder 进程可以执行,例如docker
和bash
命令(前缀为
适当地与#!/bin/bash
).
这些钩子在 Ubuntu 实例上运行,
其中包括口译员
例如 Perl 或 Python,以及诸如git
或curl
.有关可用解释器和实用程序的完整列表,请参阅 Ubuntu 文档。
自定义构建阶段钩子
您可以通过创建 钩。钩子允许你为 autobuild 提供额外的指令,并且 autotest 进程。
创建一个名为hooks
在源代码仓库中
directory 级别作为 Dockerfile 进行分配。将定义钩子的文件放入其中
文件夹。钩子文件可以同时包含两者docker
命令和bash
命令设置为
只要它们适当地以#!/bin/bash
.构建器执行
每个步骤之前和之后的文件中的命令。
可以使用以下钩子:
hooks/post_checkout
hooks/pre_build
hooks/post_build
hooks/pre_test
hooks/post_test
hooks/pre_push
(仅在执行构建规则或 Automated build 时使用 )hooks/post_push
(仅在执行构建规则或 Automated build 时使用 )
构建钩子示例
覆盖 “build” 阶段以设置变量
Docker Hub 允许您在 hook 中定义构建环境变量 文件,或者从自动化构建界面,然后你可以在 hook 中引用它。
下面的示例定义了一个构建钩子,它使用docker build
arguments 设置为
设置变量CUSTOM
基于使用
Docker Hub 构建设置。$DOCKERFILE_PATH
是您提供的变量
替换为要构建的 Dockerfile 的名称,以及$IMAGE_NAME
是名称
正在构建的镜像中。
$ docker build --build-arg CUSTOM=$VAR -f $DOCKERFILE_PATH -t $IMAGE_NAME .
重要
一个
hooks/build
file 会覆盖 Basicdocker build
命令,因此您必须在 hook 中包含类似的 build 命令或 自动生成失败。
请参阅 docker 构建文档以了解有关 Docker 构建时变量的更多信息。
推送到多个仓库
默认情况下,构建过程仅将镜像推送到其中
配置构建设置。如果需要将同一镜像推送到多个
repositories 中,您可以设置post_push
hook 添加其他标签并推送
到更多存储库。
$ docker tag $IMAGE_NAME $DOCKER_REPO:$SOURCE_COMMIT
$ docker push $DOCKER_REPO:$SOURCE_COMMIT
源存储库或分支克隆
当 Docker Hub 从源代码存储库中提取分支时,它会执行 浅层克隆,它仅克隆指定分支的尖端。这样做的好处是 最大限度地减少从存储库传输所需的数据量,以及 加快构建速度,因为它只提取必要的最少代码。
因此,如果您需要执行依赖于不同
分支,例如post_push
hook 的 Hook 中,除非
您可以执行下列作之一:
您可以通过执行以下作来获得目标分支的浅层签出:
$ git fetch origin branch:mytargetbranch --depth 1
你也可以 “unshallow” 克隆,它会获取整个 Git 历史(以及 可能需要很长时间/移动大量数据)通过使用
--unshallow
flag 的 Fetch 上:$ git fetch --unshallow origin