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

Soc*_*ods 7 automated-deploy build-settings docker

我想自动化我的构建过程,并且需要传递一个环境变量来运行Dockerfile. 我想知道在 Dockerhub 中是否有任何方法可以做到这一点。我知道 docker cloud 有这样的东西,但我想知道 Dockerhub 中是否有这个功能,因为--build-args在正常构建的 cli 中有参数。

Exe*_*ero 18

设置自动构建

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

当您设置自动构建(也称为autobuilds)时,您将创建一个列表,branches其中tags包含要构建到 Docker 映像中的 和 。当您将代码推送到那些列出的镜像标签之一的源代码分支(目前仅支持GitHub / Bitbucket)时,推送使用 awebhook来触发新构建,从而生成一个 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 -时间变量---构建参数)。

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

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

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

构建钩子示例(实现 Docker Hub UI 环境变量)

从自动构建的 Web UI 添加变量使它们在hooks. 在钩,你就必须使用该值来设置自定义生成ARG使用--build-arg。最后,您必须在您的内部使用此自定义构建 argDockerfile以使用ENVcommand 或export.

例子:

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

步骤 1. 在自动构建的 Web UI 中为“构建环境变量”添加此内容 [![在此处输入图像描述][1]][1]

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

#!/bin/bash

docker build -t $IMAGE_NAME --build-arg TERRAFORM_VERSION=$TERRAFORM_VERSION .
Run Code Online (Sandbox Code Playgroud)

注意:这里$TERRAFORM_VERSION来自 Web UI。

第三步: 在你的 Dockerfile 中

ARG TERRAFORM_VERSION
ENV TERRAFORM_VERSION $TERRAFORM_VERSION
Run Code Online (Sandbox Code Playgroud)

注意:这里$TERRAFORM_VERSION来自名为 .bash 的 bash 脚本文件中的自定义构建参数build

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

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

加分!

在启动构建脚本时设置了许多关键的环境参数,所有这些参数都可以在钩子中使用,并且在制作自定义构建参数时都非常有用。

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.)
Run Code Online (Sandbox Code Playgroud)