如何判断脚本运行在本地环境还是Azure DevOps环境
解决方案
Azure DevOps 运行 Pipeline 时会自动注入一批专属预置环境变量,直接判断这类变量是否存在即可快速区分本地 Linux 环境和 Azure DevOps 运行环境。
常用判断方法
- 检查
SYSTEM_TEAMPROJECTID变量:只要脚本运行在 Azure DevOps Pipeline 上下文内,这个变量就必然存在,对应当前 Pipeline 关联的团队项目 ID,本地环境默认不会存在该变量。 - 检查
AZURE_HTTP_USER_AGENT变量:Azure DevOps 所有类型的 Agent 运行时都会携带该变量,值内会包含VSTS或Azure DevOps标识,和本地环境的变量重合概率极低。
你可以任选一个变量做判断,也可以组合多个变量降低误判概率,Python 示例代码如下:
import os def is_running_on_azure(): return os.getenv("SYSTEM_TEAMPROJECTID") is not None
备选高可靠方案
如果担心环境变量被人为篡改导致误判,可以主动给本地环境添加专属标识:
- 在本地 Linux 环境的 shell 配置文件(比如
~/.bashrc、~/.zshrc)中添加自定义变量:export LOCAL_DEV_MARK=1 - 脚本内优先判断该变量是否存在,存在则判定为本地环境,否则判定为 Azure DevOps 环境,该方案不存在误判可能,也不受云侧预置变量规则调整的影响。
注意事项
- 不推荐依赖 Azure 虚拟机元数据服务做判断:如果你使用微软托管的 Azure DevOps Agent,部分场景下脚本没有元数据服务的访问权限,判断成功率远低于直接使用 Pipeline 内置环境变量。
- 如果后续需要兼容其他 CI 环境,只需要新增对应平台的专属变量判断逻辑即可,比如 GitHub Actions 可以判断
GITHUB_ACTIONS变量,GitLab CI 可以判断GITLAB_CI变量。
内容的提问来源于stack exchange,提问作者humanbeing
相关产品推荐
相关产品推荐

