git - 在 dockerfile 中的 go build 命令中注入(inject)或插入多个 ENV 变量

标签 git go dockerfile

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

目标是在 main.go 的两个变量中注入(inject) git revision hash 和当前时间戳

可以通过creating a file from dockerfile来完成使用“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 值。

关于git - 在 dockerfile 中的 go build 命令中注入(inject)或插入多个 ENV 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54346593/

相关文章:

跨包的 golang 变量命名约定

Docker:无法从 Spring Boot 应用程序读取类路径资源

bash - 在Docker容器中运行脚本

git 存储 : where did the files in my directory go?

git - LockedFileException : failed to lock file config. 写锁

git - 如何解决 git stash 冲突?

git - 打印分支描述

go - 在 Golang 中进行依赖注入(inject)的最佳方式是什么

go - 如何使用client-go重新启动StatefulSet的特定Pod?

dockerfile - 如何将brew安装到Dockerfile (`brew: not found`)