GitHub Workflow中如何按所选Environment读取Runner环境变量值?
解决GitHub Workflow中根据所选环境读取对应变量的问题
你遇到的问题是因为workflow_dispatch的输入默认值是在触发工作流前解析的,这时候还没关联到你选择的Environment,所以${{ env.Runner }}无法被正确解析,直接以字符串形式显示。要实现根据所选Environment自动读取对应环境的Runner变量,需要调整工作流的结构,具体步骤如下:
修正思路
- 移除
GithubRunner这个输入项(或者设为可选),因为我们要根据选择的Environment自动获取对应变量,不需要用户手动输入 - 在工作流的jobs部分,将
environment指定为用户选择的输入值,这样工作流会自动关联到对应的环境,加载该环境下的变量 - 之后在job的步骤中,直接使用
${{ env.Runner }}就能拿到对应环境的Runner值
修改后的完整代码示例
name: 'Github Workflow' run-name: 'Terraform Plan-Apply' on: workflow_dispatch: inputs: Configuration: description: 'Deployment Group' required: true type: choice options: - Applications - KeyVault - Synapse - Databricks Environment: description: 'Environment' required: true type: choice options: - Dev - QA - Prod jobs: terraform-deploy: name: 'Terraform Plan & Apply' environment: ${{ github.event.inputs.Environment }} # 关联到所选环境 runs-on: ${{ env.Runner }} # 直接使用对应环境的Runner变量作为运行器 steps: - name: Checkout code uses: actions/checkout@v4 - name: Verify Runner variable run: echo "Using Runner from environment: ${{ env.Runner }}" # 这里会正确输出对应环境的Runner变量值 # 后续添加Terraform相关步骤,比如init、plan、apply等
关键说明
- 触发工作流时选择某个Environment(比如Dev),工作流会自动关联到GitHub Settings中创建的Dev环境,加载该环境下的所有变量(包括你设置的Runner)
- 关联环境后,
env.Runner就会被正确赋值为对应环境的变量值,而不是显示表达式字符串 - 如果你需要用
env.Runner作为运行器(即runs-on的值),直接写成runs-on: ${{ env.Runner }}即可,前提是你的Runner变量值是GitHub支持的运行器名称(比如自托管运行器的名称)
内容的提问来源于stack exchange,提问作者Asterix
相关产品推荐
相关产品推荐

