如何获取GitHub Actions工作流运行位置及粒度相关技术问题
GitHub Actions运行位置获取与粒度说明
一、如何获取流水线的运行位置?
GitHub托管运行器
- 直接使用内置环境变量
RUNNER_LOCATION,它返回的区域标识可直接映射到Azure Region(例如us-east-1、westeurope)。示例用法:echo "当前运行位置: $RUNNER_LOCATION" - 辅助变量
RUNNER_NAME可用于验证,但核心取位置信息用RUNNER_LOCATION即可。
自托管运行器
- GitHub不会自动注入位置相关变量,需手动配置:
- 方式1:在自托管运行器的本地
.env文件中添加自定义变量,比如SELF_HOSTED_LOCATION="eastus",工作流中直接引用该变量即可。 - 方式2:注册自托管运行器时,通过
--env参数注入位置变量,示例命令:./config.sh --url https://github.com/你的组织/你的仓库 --token 你的注册令牌 --env SELF_HOSTED_LOCATION=eastus
- 方式1:在自托管运行器的本地
二、运行位置的粒度说明
GitHub托管运行器
- 同一作业内的所有步骤:完全在同一位置运行。作业会绑定到单个运行器实例,整个作业生命周期内实例位置不会变动,所有步骤都在该实例上执行。
- 同一工作流内的不同作业:默认不保证同一位置。GitHub会根据系统负载自动分配可用区域的运行器,不同作业可能被分到不同区域。如果需要强制同一位置,可在作业的
runs-on字段中指定区域限制,例如:jobs: build: runs-on: ubuntu-latest location: us-east-1
自托管运行器
- 同一作业内的所有步骤:和托管场景一致,同一位置运行。作业绑定到单个自托管运行器实例,所有步骤都在该实例上完成。
- 同一工作流内的不同作业:取决于你的运行器配置:
- 如果所有作业都指定了同一个自托管运行器,或同一组位置相同的运行器,那么所有作业位置一致。
- 如果作业指定了不同的运行器组(组内运行器分布在不同位置),或未做限制,作业可能被分配到不同位置的运行器,位置就会不同。
内容的提问来源于stack exchange,提问作者MilaHalina
相关产品推荐
相关产品推荐

