如何将Azure DevOps变量组变量作为环境变量在脚本中直接调用
问题解答
可以实现,不需要逐个手动在env参数中添加变量组内变量,你构想的yaml中bash步骤下的group参数不是官方支持的语法,无法生效,以下是可落地的实现方案,后续新增变量组内变量无需修改yaml配置:
实现原理
Azure DevOps Linux代理默认会将当前流水线所有引用的变量(包括变量组内变量)序列化存储到预定义环境变量BUILD_VARIABLES的JSON字符串中,我们只需要在bash步骤中解析该JSON,动态导出为环境变量即可。
完整yaml示例
pool: vmImage: ubuntu-latest variables: - group: myGroup # 引用你的变量组,不需要做其他额外配置 stages: - stage: test jobs: - job: test displayName: Test steps: - bash: | # 解析BUILD_VARIABLES,导出所有非涉密变量为环境变量 for var in $(echo "$BUILD_VARIABLES" | jq -r 'to_entries[] | select(.value.isSecret == false) | .key + "=" + .value.value'); do export "$var" done # 此时所有变量组内非涉密变量已经是环境变量,直接执行Python脚本即可 python3 your_script.py displayName: 动态导出变量组变量并执行Python脚本
Python侧使用示例
脚本不需要做额外适配,直接读取系统环境变量即可:
import os # 直接读取变量组内的变量 print(os.getenv("你的变量名"))
注意事项
- 标记为涉密的变量组变量不会被包含在
BUILD_VARIABLES中,这类变量为了安全还是需要单独手动映射到bash步骤的env参数中 - 上述脚本依赖
jq工具,Ubuntu官方托管代理默认已经预装,如果你使用私有代理请提前安装
内容的提问来源于stack exchange,提问作者Steffen Exler
相关产品推荐
相关产品推荐

