Sobes.tech
Middle+

Wie kann man ein dynamisches Attribut von CI an Docker beim Erstellen des Images übergeben, zum Beispiel die Projekt-ID, wenn keine Umgebungsvariablen verwendet werden?

sobes.tech KI

Antwort von AI

Build-Argumente können verwendet werden.

# Syntax zum Definieren eines Build-Arguments mit Standardwert
ARG PROJECT_ID=default
# Verwendung des Arguments in der COPY-Anweisung, z.B.
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Oder in der RUN-Anweisung
RUN echo "Projekt-ID ist ${PROJECT_ID}"

Im CI/CD-Pipeline kann beim Bauen des Images der Wert des Arguments mit dem Flag --build-arg übergeben werden:

# Beispiel für einen Build-Befehl in CI
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .

Hier ist $CI_PROJECT_ID eine CI-Variable, die die Projekt-ID enthält.

Eine andere Möglichkeit ist die Verwendung einer Variablen-Datei für den Build, was eine Variante der Verwendung von Umgebungsvariablen ist:

# Das Dockerfile ändert sich nicht
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar

build-args.env:

PROJECT_ID=my-specific-project

Build-Befehl mit Datei:

docker build --build-arg PROJECT_ID=$(cat build-args.env) -t my-image:${CI_COMMIT_SHORT_SHA} .

Eine weitere Option ist die Generierung einer Datei im Dockerfile mittels RUN:

ARG PROJECT_ID=default
# Generierung einer Datei mit der Projekt-ID
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Weitere Verwendung durch die Anwendung