Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 在dockerfile中的go build命令中注入或插入多个环境变量_Git_Go_Dockerfile - Fatal编程技术网

Git 在dockerfile中的go build命令中注入或插入多个环境变量

Git 在dockerfile中的go build命令中注入或插入多个环境变量,git,go,dockerfile,Git,Go,Dockerfile,我正在使用dockerfile构建go代码,并尝试在-ldflags选项中传递3个选项。 其中两个标志来自ENV变量,我必须通过字符串插值或串联将它们注入到-ldflags内容中,但我不知道如何注入 目标是在main.go中的两个变量中注入git修订哈希和当前时间戳 这可以通过使用echo命令来完成,但我想确定,使用简单的变量插值/串联是不可能的 ENV GIT_REVISION $( git rev-parse --short HEAD ) ENV COMPILATION_TIMESTAMP

我正在使用dockerfile构建go代码,并尝试在-ldflags选项中传递3个选项。 其中两个标志来自ENV变量,我必须通过字符串插值或串联将它们注入到-ldflags内容中,但我不知道如何注入

目标是在main.go中的两个变量中注入git修订哈希和当前时间戳

这可以通过使用echo命令来完成,但我想确定,使用简单的变量插值/串联是不可能的

ENV GIT_REVISION $( git rev-parse --short HEAD )

ENV COMPILATION_TIMESTAMP $( date +%Y%m%dT%H:%M:%S )

RUN go get -d -v

// This one works:
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o myprogram .

// This one, with those variables, fails:
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags "-extldflags '-static' -X main.compiledOn=${COMPILATION_TIMESTAMP} -X main.gitRevisionHash=${GIT_REVISION}" -o myprogram .

不幸的是,当前的Docker builder命令都不支持环境变量替换。您最好编写一个shell脚本,其中环境变量替换是头等公民。然后,当您调用RUN./script时,您将能够捕获上一层的ENV值。

我不能将其标记为解决方案,但想与大家分享我是如何用另一种方法解决潜在问题的:

# Handle source-code-file extvars.go to inject GIT_REVISION and COMPILATION_TIMESTAMP
# File extvars.go exists and compiles normally already, and I'm just providing a new/updated one:
RUN echo "package main" > $APPDIR/extvars.go
RUN echo "" >> $APPDIR/extvars.go && \
    echo "var gitRevision = \"$( git rev-parse --short HEAD )\"" >> $APPDIR/extvars.go && \
    echo "" >> $APPDIR/extvars.go && \
    echo "var compilationTimestamp = \"$( date +%Y.%m.%dT%H:%M:%S)\"" >> $APPDIR/extvars.go


这可能是因为RUN不是支持环境替换的Dockerfile命令之一: