繁体   English   中英

从 Azure 管道 maven 构建上的单元测试访问安全变量

[英]Access Secure variable from unit test on Azure pipeline maven build

我正在尝试使用 maven 为 Java 应用程序之一创建一个 Azure DevOps 管道,并且在单元测试中我有 2 个来自环境变量的值的访问权限。

String key = System.getenv().get("MY_KEY");
String secret = System.getenv().get("MY_SECRET");

我在浏览器的管道变量下添加了 2 个值,并将它们标记为“将此值保密”,以便将值保密。

在此处输入图像描述

在管道中,我添加了必需的变量并将值替换为配置的变量。

variables:
  MY_KEY: $(MY_KEY_VAL)
  MY_SECRET: $(MY_SECRET_VAL)

但是,当我运行构建管道时,由于“密钥”和“秘密”值上的 null 值导致单元测试失败。

我怎样才能解决这个问题? 我在配置上做错了吗?

更新

正如 Ben 下面提到的,无法在托管代理上设置环境变量。 为了在构建管道期间运行所有单元测试并仍然保持密钥和机密的安全,我修改了单元测试以从项目根目录的文件中读取密钥和机密。 而是将包含密钥和秘密的文件添加到 git 存储库中,它被添加为管道库中的安全文件,并被授予管道访问权限。

在管道上,我能够使用“DownloadSecureFile”任务下载安全文件。

- task: DownloadSecureFile@1
  displayName: Download API secrets
  name: configfile
  inputs:
    secureFile: 'service_api_keys'

使用 bash 将文件移动到项目根目录。

- bash: mv $(configfile.secureFilePath) ./

运行构建过程,该过程将读取单元测试执行的秘密。

您需要替换 Java 文件中的值。 您在上面详细说明的变量替换,即

variables:
  MY_KEY: $(MY_KEY_VAL)
  MY_SECRET: $(MY_SECRET_VAL)

只会替换管道 YAML 文件中的值。

您可以使用“ 替换令牌”任务替换 Java 文件中的变量,例如

- task: replacetokens@3
    inputs:
      targetFiles: "yourJavaFile.java"
      encoding: "auto"
      writeBOM: true
      verbosity: "detailed"
      actionOnMissing: "warn"
      keepToken: false
      tokenPrefix: "#{"
      tokenSuffix: "}#"
    displayName: Perform variable substitution in java file

在您的 java 文件中,您将编写要替换的变量,例如

String key = System.getenv().get("#{MY_KEY}#");
String secret = System.getenv().get("#{MY_SECRET}#");

System.getenv() 读取运行 java 代码的机器的系统环境变量。 并且管道中定义的变量在代理 scope 而不是机器 scope 中。也许这就是单元测试无法获取变量的原因。

可能没有直接的方法来实现这一点。 As Ben Smith mentioned, you can refactor your code to get the key/secret from a json files and add a Set Json Property task to update the json files with the variables you defined in the pipeline before maven task run the unit test. 查看此处了解此任务的详细用法。

作为另一种解决方法,您可以在自托管 linux 代理上运行您的管道,并尝试添加 bash 脚本任务为您的 linux 设置环境变量代理人)。 在这里查看如何为 linux 设置环境变量。

在此处查看有关创建自托管 linux 代理的说明。

希望以上对您有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM