是否可以在docker hub的自动构建中添加环境变量?

时间:2017-07-24 09:40:54

标签: docker build-settings automated-deploy

我想要自动化我的构建过程,并且需要传递一个环境变量来运行DockerFile中的一些命令。我想知道在码头中心有没有办法做到这一点。我知道docker cloud有这样的东西,但是我想知道docker hub中是否存在功能,因为正常构建的cli中有--build-args参数。

1 个答案:

答案 0 :(得分:1)

设置自动构建

Docker Hub https://hub.docker.com)可以从外部存储库中的源代码自动构建映像,并将构建的映像自动推送到您的Docker存储库中托管在您的Docker Hub存储库帐户下 例如: https://cloud.docker.com/u/binbash/repository/list

设置自动构建(也称为autobuilds)时,将创建要构建到Docker映像中的branchestags的列表。当您将代码推送到其中列出的图像标签之一的源代码分支(当前仅支持 GitHub / Bitbucket )时,推送会使用webhook触发新的构建,从而生成Docker映像。然后将构建的映像推送到Docker Hub注册表。 有关详细的实施步骤,请参阅https://docs.docker.com/docker-hub/builds/

构建的环境变量

您可以设置环境变量的值(实际上它们被映射为构建ARG值-docker build --build-arg-仅在构建时使用-https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg)。

不要与您的服务在运行时(docker run --env MYVAR1=foo-https://docs.docker.com/v17.12/edge/engine/reference/commandline/run/#set-environment-variables--e-env-env-file)使用的环境值ENV VARS混淆

在配置自动构建时,将在构建过程中使用从Docker Hub UI配置的环境变量。通过单击构建环境变量部分旁边的加号,然后输入变量名称和值,来添加build environment variables

当您从Docker Hub UI设置变量值时,它们可被您在挂钩文件中设置的命令使用(这很重要,并将在下面进行扩展),但它们被存储,以便只有对Docker Hub存储库具有管理员访问权限的用户才能看到其值。这意味着您可以使用它们安全地存储访问令牌或其他应保密的信息。

构建钩子示例(以实现Docker Hub UI Env变量)

通过自动构建的网络用户界面添加变量,即可在hooks中使用它们。在挂钩中,您必须使用该值来使用--build-arg设置自定义生成arg 。最后,您必须在Dockerfile内部使用此自定义生成arg,以使用ENV命令或export手动设置环境变量。

示例:

说您要在构建环境中使用环境变量TERRAFORM_VERSION='0.12.0-beta2'

第1步。 在自动构建的网络用户界面中添加“构建环境变量” [![在此处输入图片描述] [1]] [1]

第2步。 创建一个自定义构建挂钩,即在与Dockerfile相同的目录中创建一个名为 hook 文件夹。在hooks文件夹中,创建一个名为 build 的文件。这将创建自定义构建挂钩。 Docker将使用它来构建您的映像。构建内容:

#!/bin/bash

docker build -t $IMAGE_NAME --build-arg TERRAFORM_VERSION=$TERRAFORM_VERSION .

注意:此处$TERRAFORM_VERSION来自网络用户界面。

第3步: 在您的Dockerfile中

ARG TERRAFORM_VERSION
ENV TERRAFORM_VERSION $TERRAFORM_VERSION

注意:此处$TERRAFORM_VERSION来自名为build的bash脚本文件中的自定义生成参数。

完整示例: https://github.com/binbashar/public-docker-images/tree/master/terraform-resources

就这样!现在应该可以工作了。可能在Docker Hub X中将“构建环境变量”重命名为“自定义挂钩环境变量”将简化官方文档(https://docs.docker.com/docker-hub/builds/advanced/)中对该概念的理解。

加分!

启动构建脚本时会设置许多关键环境参数,您可以在钩子中使用所有这些参数,这些参数在创建自定义build-args时很有用。

SOURCE_BRANCH: the name of the branch or the tag that is currently being tested.
SOURCE_COMMIT: the SHA1 hash of the commit being tested.
COMMIT_MSG: the message from the commit being tested and built.
DOCKER_REPO: the name of the Docker repository being built.
DOCKERFILE_PATH: the dockerfile currently being built.
DOCKER_TAG: the Docker repository tag being built.
IMAGE_NAME: the name and tag of the Docker repository being built. (This variable is a combination of DOCKER_REPO:DOCKER_TAG.)