gpt4 book ai didi

node.js - 如何在 azure devops 管道中的 docker 镜像中嵌入环境变量?

转载 作者:行者123 更新时间:2023-12-04 03:34:05 27 4
gpt4 key购买 nike

我的要求是在 azure devops 管道构建的 docker 镜像上设置一些环境变量。
此管道用于开发/阶段/生产环境,每个阶段都绑定(bind)到自己的一组组变量,这些变量我希望在 nodejs 应用程序中可用。
我可以使用 $VARNAME 读取管道中的变量,但在使用 process.env.VARNAME 运行代码时无法读取相同的变量。
我知道这不是最好的方法,因为图像会包含可能包含 secret 的环境变量,因此我也对不同的想法持开放态度。
到目前为止我已经尝试过:
在 dockerfile 中添加了 ARG
ARG VARNAME=某个值
在添加的 docker build 任务上

- task: Docker@2
displayName: Build docker image
inputs:
command: build
repository: $(imageName)
tags: $(Build.BuildId)
buildContext: '$(Pipeline.Workspace)/PublishedWebApp'
arguments: --build-arg SOMEVAR=anewvalue
我尝试在 nodejs 代码中以 process.env.SOMEVAR 的形式访问它。
我实际上可以看到在管道中执行的 docker build 上的 --build-arg 但在代码中它从未出现过。
我追求的是非常标准的要求,我们有多个环境,每个环境都有不同的键(不同的组变量绑定(bind)到不同的阶段),我如何将不同的键传递给部署?

最佳答案

我可以看到有一些组件需要对齐:

  • 您正在通过 --build-arg 传递 key .这是对的。
  • 您有一个 ARG在 dockerfile 中接收通过 --build-arg 传入的内容.这是对的。
  • 您缺少将环境变量设置为等于传入的参数。
  • FROM python:3.7-slim

    ARG SOME_PASSED_IN_ARG
    ENV SOMEVARNAME $SOME_PASSED_IN_ARG
    ...
    您将访问 SOMEVARNAME喜欢 process.env.SOMEVARNAME从 Node 应用程序。
    我在他们的帖子中感谢@levi-lu-msft: https://stackoverflow.com/a/59784488/1490277
    至于最佳实践,在 BUILD 的容器中定义逻辑默认环境变量是完全可以接受的(例如 ENV=PRODUCTION)。在 RUN 中,您可以使用传入的参数覆盖任何环境变量: docker run ... --e SOME_PASSED_IN_ARG=someOtherValue一些“更好”的做法:
  • 容器是可重复的。不要嵌入会随着时间过期/更改的 BUILD 时间环境变量。换句话说,如果您决定部署 3 年前的版本并且 BUILD 时间环境变量具有过期值(例如优惠券代码),那么您的环境可能是脆弱且不可预测的。
  • 永远不要在 BUILD 的容器中嵌入 secret 。上面的#1,因为他们可能会改变加类时间并且也是为了安全。 secret 值(例如,一次性 key 、 token 等)可供任何人(坏 Actor 或事故 Actor )通过在运行时列出图像的环境变量来提取。
  • 关于node.js - 如何在 azure devops 管道中的 docker 镜像中嵌入环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67284215/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com