如何在Azure Pipeline中永久设置环境变量实现跨步骤调用
问题原因
Azure Pipelines的每个script步骤都会启动独立的shell子进程,在单个步骤内export的环境变量仅在当前进程生效,进程结束后就会失效,无法直接传递到后续步骤。
另外你配置里的验证步骤直接写$PATH会被当成命令执行引发报错,需要调整为echo $PATH输出变量值。
解决方案
根据你的需求分两种场景处理:
场景1:仅需要PATH修改在当前流水线的后续步骤生效
该方案对微软托管代理、自托管代理都适用,微软托管代理每次运行都会重置环境,无法做到永久生效,只能用这个方案。
你不需要修改export_variables.sh文件,直接调整流水线配置即可:
steps: - script: | source ./export_variables.sh echo "##vso[task.setvariable variable=PATH;]$PATH" displayName: "export variables" - script: echo $PATH displayName: "verify" condition: succeeded()
其中##vso[task.setvariable]是Azure Pipelines代理识别的特殊指令,执行后会自动将指定变量设置为当前流水线所有后续步骤的全局环境变量。
场景2:自托管代理永久生效
如果你使用的是自托管代理,可以直接将PATH配置写入shell的启动配置文件,后续所有在该代理上运行的流水线都会自动生效,修改export_variables.sh内容如下:
#!/bin/bash # 将路径写入当前用户的bash配置,永久生效 echo 'export PATH=abc/def/bin:$PATH' >> ~/.bashrc source ~/.bashrc # 同时设置当前流水线后续步骤的PATH,避免本次运行还要重启代理才生效 echo "##vso[task.setvariable variable=PATH;]$PATH"
内容的提问来源于stack exchange,提问作者Necktschnagge
相关产品推荐
相关产品推荐

