如何通过Shell脚本配置Azure DevOps Linux代理环境并传递环境变量?
在Linux Azure Pipelines代理中传递Shell脚本的环境变量给后续任务
当然可以实现,Linux代理上有两种可靠的方式让Shell脚本里的变量被同作业后续任务访问:
方法1:写入代理环境变量文件
Linux管道代理会自动加载$(Agent.TempDirectory)/env文件中的环境变量,你可以在Shell脚本里把需要传递的变量追加到这个文件中:
修改你的Shell脚本env.sh:
# 原有业务逻辑和export语句 export APP_VERSION=1.0.0 export BUILD_TYPE=release # 将变量写入代理环境文件 echo "APP_VERSION=$APP_VERSION" >> "$AGENT_TEMPDIRECTORY/env" echo "BUILD_TYPE=$BUILD_TYPE" >> "$AGENT_TEMPDIRECTORY/env"
然后在Pipeline中执行这个脚本即可,后续任务就能直接读取这些变量:
jobs: - job: BuildLinux steps: - task: ShellScript@2 inputs: scriptPath: /my/path/env.sh - task: Bash@3 inputs: targetType: 'inline' script: | echo "当前APP版本:$APP_VERSION" echo "构建类型:$BUILD_TYPE"
方法2:使用Pipeline变量设置命令(官方推荐)
Azure Pipelines提供了##vso[task.setvariable]命令,可以直接将变量设置为管道级别的变量,后续任务无需额外配置就能访问:
修改你的Shell脚本env.sh:
# 原有业务逻辑 APP_VERSION=1.0.0 BUILD_TYPE=release # 设置Pipeline变量 echo "##vso[task.setvariable variable=APP_VERSION]$APP_VERSION" echo "##vso[task.setvariable variable=BUILD_TYPE]$BUILD_TYPE"
Pipeline使用示例和方法1一致,后续任务同样可以直接使用$APP_VERSION和$BUILD_TYPE。
两种方法的区别
- 方法1是修改代理进程的环境变量,所有后续在该代理上运行的任务都会继承这些变量;
- 方法2是设置Pipeline的任务级变量,更符合Pipeline的变量管理规范,如果你需要将变量传递到其他作业,还可以添加
isoutput=true参数实现跨作业传递。
内容的提问来源于stack exchange,提问作者HolyPeckers
相关产品推荐
相关产品推荐

