【问题标题】:Github Actions: how to run a workflow created on a non-master branch from the workflow_dispatch event?Github Actions:如何从 workflow_dispatch 事件运行在非主分支上创建的工作流?
【发布时间】:2020-08-11 16:08:00
【问题描述】:

有人可以帮助我了解 Github Actions 选项卡的行为吗?作为在第三方 repo 上工作的 Actions 新手,我希望能够在分支上创建一个操作并在 workflow_dispatch 事件上执行它。我没有成功,但我发现了以下内容:

  • “操作”选项卡将根据与上次执行的工作流相关的分支更改查找工作流和操作代码的分支。例如如果使用 Run Workflow 按钮从 Action 选项卡执行某些工作流,并且 Use Workflow From 下拉菜单设置为某个分支 Branch-A,则 Actions 选项卡左侧的 em>Workflows 面板将取自 Branch-A 的 .github/ 版本。
  • 此工作流有一个 workflow_dispatch 事件触发器。 文本不会随分支而变化。它似乎取自 master。或者,它可能取自最后一组结果。我没有对此进行测试,因为无论哪种方式它都不是有用的行为。

解决方法是在推送事件上执行,这还可以,但与 Github 的高标准设计不符。

以上是否听起来 a)关于正确和 b)无论您如何看待它,都不是最佳行为?或者,是否有更好的方法来构建和测试操作?

【问题讨论】:

    标签: github-actions


    【解决方案1】:

    您可以使用 Github CLI 从命令行在功能分支中运行仍在开发中的工作流。 documentation 说:

    在存储库默认以外的分支上运行工作流 分支,使用 --ref 标志。

    gh workflow run workflow --ref branch-name

    要添加输入参数,运行如下:

    gh workflow run workflow --ref branch-name -f myparameter=myvalue

    【讨论】:

    • 特别是对于workflow_dispatch,在工作流运行一次之前,这将不起作用。您可以添加一个推送事件挂钩,然后在运行一次后将其激活。使用gh workflow list,一旦运行一次,您就可以在列表中看到该作业。
    • 嗯,我不知道gh 存在。谢谢。可悲的是@Dustin 写道。它不适用于以前从未运行过的新创建的工作流。我已经通过在新分支上创建新的工作流文件并在运行 gh workflow run workflow-test.yml --ref=feat/wf-dispatch-cli-test 之后测试了这一点,我只得到了 could not find any workflows named workflow-test.yml。然而,它在这个新分支上看到旧的工作流程没有问题。
    • 要对此进行跟进:将pull_request: 添加到您的工作流文件并推送它。它将注册工作流程(您可以通过gh workflow list 查看)。然后运行gh workflow run 'My Workflow Name' --ref branch-name。请注意,这是工作流的实际名称,而不是 yaml 文件的名称。
    【解决方案2】:
    • 看起来像你描述的那样工作
    • 当您在非主分支上运行工作流时,文本似乎发生了变化,并且此分支上的工作流名称已更改为新名称...

    这个工作流程名称更改真的很奇怪。我找不到任何描述这种行为的文档。

    测试工作流程

    在测试之前需要做的一件事是将具有相同文件名的虚拟工作流实际添加到main/master。没有此工作流将不会出现在操作选项卡中。

    如何测试:

    1. 创建虚拟 Readme.md 和一些虚拟 .github/workflows/workflow.yml 进行测试:
      name: Test run v1
      
      on:
        workflow_dispatch:
      
      jobs:
        test:
          runs-on: ubuntu-18.04
          steps:
            - name: Show environment v1
              run: env | grep ^GITHUB
            - name: Show ref v1
              run: echo "===============> Version from $GITHUB_REF"
      
    2. 推送到您的默认分支(可能是mainmaster
    3. 那里应该会出现新的操作
    4. 您现在可以运行虚拟工作流

    测试分支运行:

    1. 从默认 repo 分支创建新分支 test-branch
    2. 修改工作流文件.github/workflows/workflow.yml
      name: Test run v2
      
      on:
        workflow_dispatch:
      
      jobs:
        test:
          runs-on: ubuntu-18.04
          steps:
            - name: Show environment v2
              run: env | grep ^GITHUB
            - name: Show ref v2
              run: echo "===============> Version from $GITHUB_REF"
      
    3. 提交并推送到test-branch
    4. 转到Actions
    5. 点击Test run v1并将Use workflow from设置为test-branch
    6. 点击运行工作流按钮

    您应该会看到与默认 repo 分支工作流版本不同的步骤名称和不同的GITHUB_REF

    奇怪的是,在以某种方式在 test-branch 上运行工作流而不合并任何内容后,我以前的工作流(从默认 repo 分支)将名称更改为新版本。

    【讨论】:

    • 这似乎是错误的,所以我认为这可以作为公认的答案。感谢您的分析。
    • 似乎这个奇怪的名称更改错误已修复,因为我已经有一段时间没有看到这种行为了。
    【解决方案3】:

    您可以通过GitHub CLI 运行您的工作流程,但您首先需要确保它之前运行过。

    gh workflow list
    

    如果您的工作流不在该列表中(按名称),请添加 pull_request: 并创建拉取请求,以便注册工作流一次。

    name: 'My Workflow'
    on:
      workflow_dispatch:
        inputs:
          parameter:
            description: My Parameter
      pull_request: -- Add this here
    ...
    

    创建拉取请求后,您应该在运行 gh workflow list 时看到“我的工作流程”。完成后,您可以删除添加的行。

    最后,现在运行:

    gh workflow run 'My Workflow' --ref my-branch -f parameter=value
    

    这应该从功能分支运行您的工作流调度。

    【讨论】:

    • 这是迄今为止最好的答案。
    • 而不是pull_request,使用push 来触发分支的第一次运行会更容易。
    【解决方案4】:

    作为一种选择,您可以将第三方存储库分叉到您的库中,并进行 PR,合并到您的主分支。之后,您将能够在您的存储库上调试工作流。

    另一个选项是添加:pull_requst: 并通过创建拉取请求来测试它。

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 2023-01-05
      • 1970-01-01
      • 2020-05-18
      • 2020-04-02
      • 2021-05-23
      • 2021-01-08
      • 1970-01-01
      • 2021-10-30
      相关资源
      最近更新 更多