Внедрить или интерполировать более одной переменной ENV в команде go build в dockerfile - PullRequest
0 голосов
/ 24 января 2019

Я использую dockerfile для создания кода go, и я пытаюсь передать 3 опции в опции -ldflags .Два из этих флагов взяты из ENV переменных, и я должен вставить их в -ldflags содержимое, через интерполяцию строк или конкатенацию, но я не знаю, как.

Цель состоит в том, чтобы внедрить хэш редакции git и текущую метку времени в две переменные в main.go

Это можно сделать, создав файл из 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 .

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Я не могу пометить как решение, но хочу поделиться, как я решил основную проблему с альтернативным подходом:

# 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


0 голосов
/ 25 января 2019

К сожалению, ни одна из текущих команд Docker не поддерживает замену переменных среды.Лучше всего было бы написать сценарий оболочки, в котором замена переменных среды является первоклассным гражданином.Затем, когда вы вызовете RUN ./script, вы сможете поймать значения ENV из предыдущих слоев.

...