如何在Azure DevOps管道中为Node.js构建作业设置环境变量

7

我正在将一些机密信息从Azure Key Vault导入到变量组中,以供CI / CD管道使用。

我能够使用Azure Devops UI从KeyVault将所需的机密映射到VariableGroup。

在我的管道YAML文件中,我能够读取和打印那些VariableGroup变量,它们是AzureKeyVault机密。

    trigger:
      - dev

    # define the VM image 
    pool:
      vmImage: "Ubuntu 16.04"

    # define variables to use during the build
    variables:
    - group: SecretVarGroup # it has keyvault variable 'KV_API_KEY'
    - group: PublicVarGroup # it has a variable 'API_CLIENTID'

    # define the step to export key to env varaiable
    steps:

      - script: echo $MYSECRETAPIKEY
        env:
          MYSECRETAPIKEY: $(KV_API_KEY)

      ## Run the npm build
      - script: |
          npm run build
        displayName: "npm build"

我能够在构建输出日志中以***值的形式看到“KV_API_KEY”密钥的价值,我认为它已经被使用了。我也能在构建日志中以及node js process.env对象中看到API_CLIENTID的值。

我本来以为变量“MYSECRETAPIKEY”将会在我的node js process.env对象中可用。但是它不可用。

测试的方法是,在我的node js项目构建配置中,我有一个打印语句,可以打印出process.env对象。它打印了管道构建代理的所有环境变量,包括我的PUBLICVARGROUP变量“API_CLIENTID”。但我没有在process.env对象中看到我的机密变量“MYSECRETAPIKEY”。

   env:
          MYSECRETAPIKEY: $(KV_API_KEY)

我曾以为上述代码会将变量导出到特定的语言进程环境中,但实际并非如此。我该如何解决这个问题?


你是在什么时候运行你的应用程序的?是在流水线期间吗?还是你打包后再运行它的? - Krzysztof Madej
我甚至还没有运行该应用程序。这只是一个构建流水线。我可以通过我的npm构建任务验证日志或process.env对象。 - Full Stack Brain
1
你能展示一下这个任务吗? - Krzysztof Madej
抱歉,您指的任务是什么?我刚刚添加了我的构建任务..还有其他一些任务,如复制等。 - Full Stack Brain
我想知道您是如何确切地验证 MYSECRETAPIKEY 不可用的,以便我可以重现它。 - Krzysztof Madej
1个回答

14
# define the step to export key to env varaiable
steps:

  ## Run the npm build
  - script: |
      npm run build
    displayName: "npm build"
    env:
      MYSECRETAPIKEY: $(KV_API_KEY)

看起来代理的作用是为了让每个任务和脚本使用自己的 secrets。问题在于,我将env:声明放在了一个单独的adhoc任务中。将其移动到上面代码中与脚本声明相同的位置已经解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接