O aplicativo Next.js agrupa as variáveis env durante o tempo de construção. É por isso que preciso passar variáveis env como args e usá-las durante o estágio de construção. Agora, como parte do pipeline CD/CI, quero passar args dinamicamente por meio de variáveis de ambiente declaradas em compose.yaml. No entanto, a variável env do arquivo compose não é lida durante o tempo de construção. Na verdade, o terminal imprime a seguinte mensagem:
time="2024-12-12T23:35:10-05:00" level=warning msg="A variável "NEXT_PUBLIC_GRAPHQL_SERVER" não está definida. Padrão para uma string em branco."
Compor.yaml
services:
frontend:
build:
context: ./frontend
args:
- NEXT_PUBLIC_GRAPHQL_SERVER=${NEXT_PUBLIC_GRAPHQL_SERVER}
env_file:
- ./frontend/.env
environment:
NODE_ENV: production
NEXT_PUBLIC_GRAPHQL_SERVER: http://localhost:3000/
ports:
- 8080:8080
arquivo docker:
FROM base AS builder
WORKDIR /usr/src/app
COPY --from=deps /usr/src/app/node_modules ./node_modules
COPY . .
ARG NEXT_PUBLIC_GRAPHQL_SERVER
ENV NEXT_PUBLIC_GRAPHQL_SERVER=${NEXT_PUBLIC_GRAPHQL_SERVER}
RUN npm run build
Tudo funciona bem quando defino explicitamente a variável env em args, mas esse não é o fluxo de trabalho desejado.
services:
frontend:
build:
context: ./frontend
args:
- NEXT_PUBLIC_GRAPHQL_SERVER=http://localhost:3000/