【问题标题】:How variables in Azure Pipelines be used in Container's NodeJS code directly?Azure Pipelines 中的变量如何直接在 Container 的 NodeJS 代码中使用?
【发布时间】:2019-06-16 06:07:12
【问题描述】:

我尝试在 Azure Pipelines 的 Release 中设置变量,可以使用 Release 中的 Command Task 将变量的值替换为 Docker Kubernetes 的 .yaml 文件。

它对我来说很好,但我需要准备几个命令任务来一个一个地替换变量。

例如,我在 Pipelines 的 Release 中设置了变量 TESTING1_(value:Test1)、TESTING2_(value:Test2) 和 TESTING3_(value:Test3)。然后我只使用命令任务将 Docker Kubernetes 的 .yaml 文件中的 TESTING1_ 替换为 $(TESTING1_) 。以下是 .yaml 文件中的原始环境设置:

spec:
  containers:
  - name: devops
      env:
      - name: TESTING1
        value: TESTING1_
      - name: TESTING2
        value: $(TESTING2_)

运行 Pipelines 的 Release 后,在 NodeJS 中打印出的结果是:

console.log(process.env.TESTING1); --> 测试1

console.log(process.env.TESTING2); --> $(TESTING2_)

console.log(process.env.TESTING3); --> 未定义

【问题讨论】:

    标签: docker kubernetes environment-variables azure-pipelines azure-pipelines-release-pipeline


    【解决方案1】:

    我认为您应该为此使用配置映射(也许更新配置映射中的值)。您不应该直接更新容器。这为您提供了灵活性和管理。示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      containers:
        - name: test-container
          image: k8s.gcr.io/busybox
          command: [ "/bin/sh", "-c", "env" ]
          env:
            - name: SPECIAL_LEVEL_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.how
    

    然后,如果某些值发生更改,您会更新配置映射,并且所有引用此配置映射的 pod 都会获得新值。

    https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#define-container-environment-variables-using-configmap-data

    【讨论】:

    • 这是个好主意。但是,由于文件将上传到 GitHub,我如何保护其他人看不到的值?谢谢。
    • 为什么要上传secrets/configuration到github?
    • 我的所有代码和 Docker 文件都被推送到 GitHub 进行存储,如果文件有更改,我会使用 Docker Pipelines 进行自动部署。你的意思是我只需要使用 Kubectl 命令(使用本地文件)设置一次配置映射,每次自动部署都可以使用?因此,似乎 Config Maps 没有加密 Docker Secrets 是(但我没有使用不能使用 Docker Secrets 的 Swarm)。如果使用其他人可以使用 Azure Pipelines 进行部署的配置映射,存储密码是否安全?谢谢
    • 是的,您创建一次 configmap,然后 pod 就可以使用它(您不必为 configmap 提供管道)。秘密是一个稍微不同的东西,但你也可以使用它们,同样的原则适用,你更新秘密>>所有的 pod 都获得了新的价值。对于敏感数据,最好使用机密(或者可能是其他一些替代方法,因为默认情况下机密可以轻松解密)
    • 知道了,谢谢。由于我将 Azure WebApp 用于容器(使用 Kubernetes)而不是 Swarm,因此它不能使用 Docker Secrets 来存储敏感信息。因此,Config Maps 未加密,存在泄露敏感信息的风险。最好使用更安全的替换任务来使用 Azure Pipelines 的变量。 (虽然需要有几个任务来替换变量)非常感谢..
    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 2023-01-08
    • 2014-06-03
    相关资源
    最近更新 更多