用于GitHub拉取请求的DockerHub自动构建-使用$ DOCKER_TAG变量?

时间:2019-03-25 23:18:02

标签: docker dockerhub

我有一个项目,该项目的每个分支都运行DockerHub自动构建。这些版本运行良好。

我想扩展此自动构建配置,以便为这些分支的选定拉取请求构建映像。

enter image description here

以下文档指出,在DockerHub自动构建中应该有一个名为DOCKER_TAG的变量。

https://docs.docker.com/docker-hub/builds/advanced/#environment-variables-for-building-and-testing

我想以以下方式配置我的自动构建。

如果我尝试构建一个名为“ pr1234”的标签,那么我的构建将在运行该构建之前覆盖PR#1234中的代码。

# Assign the env variable DOCKER_TAG to an arg of the same name
ARG DOCKER_TAG=${DOCKER_TAG}

...

# if DOCKER_TAG is in the format prNNNN then merge code for that PR on top of the current branch
RUN PRNUM=`echo ${DOCKER_TAG}| egrep "^pr([0-9]+)$" | sed -e s/pr//` && \
    if [ -n "$PRNUM" ]; \ 
    then echo "Merging $PRNUM"; \
      curl -o /tmp/pr.patch -L https://github.com/DSpace/DSpace/pull/$PRNUM.diff; \
      git apply /tmp/pr.patch; \
    fi

如果我在本地运行构建,则可以设置此变量,并且我的docker构建可以根据需要运行。

docker build -t dspace/dspace:pr1234 -f Dockerfile.jdk8-test --build-arg DOCKER_TAG=pr1234 .

当我尝试从Dockerhub运行此程序时,DOCKER_TAG变量似乎为空,因此我认为未按预期设置DOCKER_TAG。

您能建议一种访问此变量或完成所选PR的自动构建的方法吗?

1 个答案:

答案 0 :(得分:2)

我找到了一个可行的解决方案。我创建了一个名为 hooks / build 的构建钩子,并显式传递了变量。

#!/bin/bash
docker build --build-arg DOCKER_TAG=$DOCKER_TAG -f $DOCKERFILE_PATH -t $IMAGE_NAME .

请参见https://docs.docker.com/docker-hub/builds/advanced/#custom-build-phase-hooks