aso*_*ent 5 node.js docker azure-devops
我的要求是在由 azure devops pipeline 构建的 docker 映像上设置一些环境变量。
该管道用于开发/阶段/生产环境,每个阶段都与自己的一组组变量相关联,我希望这些变量在nodejs应用程序中可用。
我可以使用 $VARNAME 读取管道内的变量,但当使用 process.env.VARNAME 运行代码时无法读取相同的变量。
我知道这不是最好的方法,因为图像会有环境变量,这些变量可能有秘密,因此我也愿意接受不同的想法。
到目前为止我已经尝试过:在添加的 dockerfile ARG VARNAME=somevalue 中添加了 ARG
- task: Docker@2
displayName: Build docker image
inputs:
command: build
repository: $(imageName)
tags: $(Build.BuildId)
buildContext: '$(Pipeline.Workspace)/PublishedWebApp'
arguments: --build-arg SOMEVAR=anewvalue
Run Code Online (Sandbox Code Playgroud)
我尝试在 nodejs 代码中将其作为 process.env.SOMEVAR 进行访问。
我实际上可以看到在管道中执行的 docker 构建上的 --build-arg 但在代码中它从未出现。
我所追求的是相当标准的要求,我们有多个环境,每个环境都有不同的密钥(不同的组变量绑定到不同的阶段),如何将不同的密钥传递给部署?
据我所知,有一些组件需要调整:
--build-arg。这是对的。ARG在 dockerfile 中有一个用于接收 via 传入的内容--build-arg。这是对的。FROM python:3.7-slim
ARG SOME_PASSED_IN_ARG
ENV SOMEVARNAME $SOME_PASSED_IN_ARG
...
Run Code Online (Sandbox Code Playgroud)
您SOMEVARNAME可以像process.env.SOMEVARNAME从节点应用程序一样进行访问。
我在@levi-lu-msft 的帖子中表示感谢:/sf/answers/4184914191/
至于最佳实践,在 BUILD 时在容器中定义逻辑默认环境变量是完全可以接受的(例如 ENV=Production)。在运行时,您可以使用传入的参数覆盖任何环境变量:
docker run ... --e SOME_PASSED_IN_ARG=someOtherValue
一些“更好”的做法: