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ę