Sobes.tech
Middle+

Jak przekazać dynamiczny atrybut z CI do Dockera podczas budowania obrazu, na przykład identyfikator projektu, jeśli nie używa się zmiennych środowiskowych?

sobes.tech AI

Odpowiedź od AI

Możesz używać argumentów build.

# Składnia do definiowania argumentu build z wartością domyślną
ARG PROJECT_ID=default
# Użycie argumentu w instrukcji COPY, na przykład
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Lub w instrukcji RUN
RUN echo "ID projektu to ${PROJECT_ID}"

W pipeline CI/CD podczas budowania obrazu można przekazać wartość argumentu za pomocą flagi --build-arg:

# Przykład polecenia build w CI
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .

Tutaj $CI_PROJECT_ID to zmienna CI zawierająca identyfikator projektu.

Inny sposób to użycie pliku z zmiennymi do budowania, co jest wariacją użycia zmiennych środowiskowych:

# Dockerfile się nie zmienia
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar

Plik build-args.env:

PROJECT_ID=my-specific-project

Polecenie build z plikiem:

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

Inna opcja to generowanie pliku wewnątrz Dockerfile za pomocą RUN:

ARG PROJECT_ID=default
# Generowanie pliku z identyfikatorem projektu
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Użycie tego pliku przez aplikację