Sobes.tech
Middle+

Kuidas edastada CI dünaamiline atribuut Dockerile pildi ehitamisel, näiteks projekti identifikaator, kui keskkonnamuutujaid ei kasutata?

sobes.tech AI

Vastus AI-lt

Võib kasutada ehitusargumente.

# Süntaks ehitusargumenti määratlemiseks vaikese väärtusega
ARG PROJECT_ID=default
# Argumenti kasutamine kopeerimiskäsus, näiteks
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Või RUN käsus
RUN echo "Projekti ID on ${PROJECT_ID}"

CI/CD torujuhtmes, pildi ehitamisel, saab argumenti väärtust edastada --build-arg lipuga:

# Näide CI ehituskäsklusest
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .

Siin on $CI_PROJECT_ID CI-muutuja, mis sisaldab projekti identifikaatorit.

Teine võimalus on kasutada faili muutujaid ehitamiseks, mis on variatsioon keskkonnamuutujate kasutamisest:

# Dockerfile ei muutu
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar

build-args.env fail:

PROJECT_ID=my-specific-project

Ehituskäsk failiga:

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

Teine võimalus on genereerida fail Dockerfile sees RUN abil:

ARG PROJECT_ID=default
# Projekti identifikaatoriga faili genereerimine
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Selle faili kasutamine rakenduse poolt