Middle+
Como passar um atributo dinâmico do CI para o Docker durante a construção da imagem, por exemplo, o identificador do projeto, se não usar variáveis de ambiente?
sobes.tech IA
Resposta da IA
Pode-se usar argumentos de build.
# Sintaxe para definir um argumento de build com valor padrão
ARG PROJECT_ID=default
# Uso do argumento na instrução COPY, por exemplo
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Ou na instrução RUN
RUN echo "O ID do projeto é ${PROJECT_ID}"
Na pipeline de CI/CD, ao construir a imagem, pode-se passar o valor do argumento usando a flag --build-arg:
# Exemplo de comando de build em CI
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .
Aqui, $CI_PROJECT_ID é uma variável de CI que contém o identificador do projeto.
Outra forma é usar um arquivo com variáveis para a construção, embora isso seja mais uma variação do uso de variáveis de ambiente:
# O Dockerfile não muda
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar
Arquivo build-args.env:
PROJECT_ID=my-specific-project
Comando de build com arquivo:
docker build --build-arg PROJECT_ID=$(cat build-args.env) -t my-image:${CI_COMMIT_SHORT_SHA} .
Outra alternativa é gerar um arquivo dentro do Dockerfile usando RUN:
ARG PROJECT_ID=default
# Gerar arquivo com o identificador do projeto
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Uso posterior por parte da aplicação