Mi requisito es establecer algunas variables de entorno en la imagen de la ventana acoplable creada por la canalización de Azure DevOps.
Esta canalización se usa para entornos de desarrollo/etapa/producción, cada etapa está vinculada a su propio conjunto de variables de grupo, estas variables quiero que estén disponibles en la aplicación nodejs.
Puedo leer las variables dentro de la tubería usando $VARNAME pero no puedo leer lo mismo cuando el código se ejecuta usando process.env.VARNAME.
Entiendo que no es el mejor enfoque, ya que la imagen tendría variables de entorno que potencialmente pueden tener secretos, por lo que también estoy abierto a diferentes ideas.
Lo que he intentado hasta ahora: se agregó ARG en dockerfile ARG VARNAME = algún valor en la tarea de compilación de docker agregada
- task: Docker@2 displayName: Build docker image inputs: command: build repository: $(imageName) tags: $(Build.BuildId) buildContext: '$(Pipeline.Workspace)/PublishedWebApp' arguments: --build-arg SOMEVAR=anewvalueIntento acceder a esto como process.env.SOMEVAR en el código nodejs.
De hecho, puedo ver --build-arg en la compilación de la ventana acoplable ejecutada en la canalización, pero en el código nunca aparece.
Lo que busco es un requisito bastante estándar, tenemos múltiples entornos, cada entorno tendrá diferentes claves (diferentes variables de grupo vinculadas a diferentes etapas), ¿cómo paso diferentes claves a la implementación?
Hay algunos componentes por lo que puedo ver que necesitan alinearse:
--build-arg . Esto es correcto.ARG en el dockerfile para recibir lo que se pasa a través --build-arg . Esto es correcto. FROM python:3.7-slim ARG SOME_PASSED_IN_ARG ENV SOMEVARNAME $SOME_PASSED_IN_ARG ... Accedería a SOMEVARNAME como process.env.SOMEVARNAME desde la aplicación de nodo.
Le doy crédito a @levi-lu-msft en su publicación aquí: https://stackoverflow.com/a/59784488/1490277
En cuanto a las mejores prácticas, es perfectamente aceptable definir variables de entorno lógicas predeterminadas en el contenedor en BUILD (por ejemplo, ENV=PRODUCCIÓN). En EJECUTAR, puede sobrescribir cualquier variable de entorno usando los argumentos pasados:
docker run ... --e SOME_PASSED_IN_ARG=someOtherValue
Algunas prácticas "mejores":