Sobes.tech
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