如何使用输入变量来指定 GitHub 操作将在哪个自托管运行器上运行?
Posted
技术标签:
【中文标题】如何使用输入变量来指定 GitHub 操作将在哪个自托管运行器上运行?【英文标题】:How do you use an input variable to specify which self-hosted runner a GitHub action would run on? 【发布时间】:2021-10-14 09:01:41 【问题描述】:我正在使用 GitHub Actions。
我正在尝试创建一个自托管运行器,它将在多个云服务器之一上运行,但能够控制它在哪个特定服务器上运行。这是在具有本地资源的机器上进行滚动更新。
我已经使用自托管运行器设置了标签,但到目前为止我不得不制作 1..N 个单独的 YML 脚本:
on:
workflow_dispatch:
jobs:
post-to-server1:
runs-on: [self-hosted, server1 ]
然后我必须重复这个脚本 n 次。
我想做的是:
name: 'Server Patching'
on:
workflow_dispatch:
inputs:
server-target:
description: 'Target Server:'
required: true
default: 'dev'
jobs:
test-params:
runs-on: [ self-hosted, $ github.event.inputs.server-target ]
steps:
- name: Start cloning of $ github.event.inputs.server-target
run: |
echo "Starting patching of: '$ github.event.inputs.server-target '"
Check failure on line 12 in .github/workflows/test_workflow.yml
GitHub Actions / .github/workflows/test_workflow.yml
Invalid workflow file
You have an error in your yaml syntax on line 12
有没有办法做到这一点?
我也标记了这个 YAML,因为变量替换似乎也是 YAML 语法的一个问题(尽管它可能特定于 GitHub Actions)
更新:是的,你可以,如果你改变这一行:
runs-on: [ self-hosted, $ github.event.inputs.server-target ]
到:
runs-on: $ github.event.inputs.server-target
错误实际上发生在test-params:
而不是它下面的行。
我的理论是语法检查器在变量替换之前触发?
【问题讨论】:
你能发布完整的 YAML 文件吗?错误参考第 18 和 25 行,而您的 sn-p 没有那么多行。根据docs,在jobs.<job_id>.runs-on
中使用github
上下文应该没问题。
是的,已发布。很好,抱歉,我已经对其进行了一些消毒。
【参考方案1】:
我不确定有什么不同,但它对我有用:
runs-on: [ self-hosted, "$ github.event.inputs.server-target " ]
【讨论】:
谢谢!我会试试的。我没想到要加引号。【参考方案2】:创建这样的列表似乎不适用于动态值。
只要您选择 not already in use by GitHub 的标签(例如 ubuntu-latest、macos-11、...),您应该不会遇到删除 self-hosted
标签的问题。所以你当前的命名模式本身应该没问题
这样你就可以使用这个了:
runs-on: $ github.event.inputs.serverToPatch
【讨论】:
谢谢!是的,这就成功了。我所要做的就是取下方括号,为“运行”列出一个列表。你说得很好,如果服务器标签是唯一的(我们可以控制它),那么其他标签就无关紧要了。以上是关于如何使用输入变量来指定 GitHub 操作将在哪个自托管运行器上运行?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 在 GitHub 操作中设置环境变量
如何使用可重用的Github Actions和Heroku构建简单的部署管道