如何通过编程判断Python脚本是否运行在GitHub Action等CI测试环境
如何通过编程判断Python脚本是否运行在主流CI环境中
主流CI环境的标志性环境变量
各个CI服务都会设置专属的环境变量,这是最可靠的判断依据,几个常见CI的核心变量如下:
- GitHub Actions:
GITHUB_ACTIONS会被设为true,另外还有GITHUB_WORKFLOW、GITHUB_RUN_ID等辅助变量,但GITHUB_ACTIONS是最直接的判断标识 - Travis CI:
TRAVIS固定设为true,同时会伴随TRAVIS_BUILD_ID等变量 - Circle CI:
CIRCLECI设为true,CIRCLE_BUILD_NUM可作为辅助验证 - 其他常见CI:GitLab CI的
GITLAB_CI、Jenkins的JENKINS_URL(或BUILD_NUMBER)、Azure Pipelines的SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
关于用户名的一致性
CI环境中的执行用户名没有统一标准,不同服务商甚至同一服务商的不同镜像都可能不一样。比如GitHub Actions默认用runner,Travis CI部分镜像用travis、部分用root,Circle CI常用circleci或root。靠用户名判断完全不靠谱,优先用专属环境变量。
Python脚本判断实现
可以写一个简单的函数,通过检查环境变量快速判断:
import os def is_running_in_ci() -> bool: """判断是否处于任意CI环境""" ci_identifiers = [ "GITHUB_ACTIONS", "TRAVIS", "CIRCLECI", "GITLAB_CI", "JENKINS_URL", "SYSTEM_TEAMFOUNDATIONCOLLECTIONURI" ] return any(os.getenv(var) for var in ci_identifiers) def get_ci_provider() -> str | None: """识别具体的CI服务商""" if os.getenv("GITHUB_ACTIONS") == "true": return "GitHub Actions" elif os.getenv("TRAVIS") == "true": return "Travis CI" elif os.getenv("CIRCLECI") == "true": return "Circle CI" elif os.getenv("GITLAB_CI"): return "GitLab CI" elif os.getenv("JENKINS_URL"): return "Jenkins" elif os.getenv("SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"): return "Azure Pipelines" return None # 测试示例 if __name__ == "__main__": if is_running_in_ci(): provider = get_ci_provider() print(f"当前运行在{provider}环境中") else: print("当前未处于CI环境")
内容的提问来源于stack exchange,提问作者Nico Schlömer
相关产品推荐
相关产品推荐

