为除 main 之外的所有分支触发 GitHub Actions,其中唯一的工作流定义文件是
Posted
技术标签:
【中文标题】为除 main 之外的所有分支触发 GitHub Actions,其中唯一的工作流定义文件是【英文标题】:Trigger GitHub Actions for all branches except main, where the only workflow definition file is 【发布时间】:2021-11-10 07:33:59 【问题描述】:我正在尝试构建一个存储库,它允许我为我正在分叉的项目的不同版本构建 Docker 映像。 存储库应具有以下布局:
main
定义工作流的分支,触发器如下:
on:
push:
branches-ignore:
- main
该工作流从任何分支构建软件(基本上是适用于所有版本的软件的mvn clean package
、docker build
和 docker push
)
许多software-1.2.3
分支不包含任何.github/workflow
文件(将此文件复制到每个分支并在那里维护会很麻烦)
从我目前的研究来看,GitHub Actions 似乎只在存在工作流定义时运行。但是,我想知道是否有办法使用 webhook 或其他东西来欺骗系统做我想做的事情。
我的下一个最佳选择可能是使用workflow_dispatch,
【问题讨论】:
如果你在main
有工作流,然后新建分支,所有的分支都包含工作流,不是吗?
不,分支不是从main
分叉出来的。它们是来自外部存储库的分支。这是一个示例:github.com/rmetzger/flink-docker-factory。我想在每次推送到flink-1.13
(或类似分支)时运行master
中定义的工作流。
恐怕我不明白你的工作流程。
如果你不需要它是实时的,你可以考虑使用cron功能,并检测已添加到repo的分支,通过Github API检查是否存在工作流最后一次提交,如果没有,则触发一次。这不会是微不足道的。也许您可以使用所需的工作流程在每个外部分支之上添加一个提交?
这看起来很有希望:***.com/a/57903434/7453391
【参考方案1】:
on: push !main
不起作用,因为 !main 分支需要在其中包含此工作流。
手动运行工作流是最容易实施的解决方案。
on:
workflow_dispatch:
inputs:
BRANCH_OF_FORK:
description: 'branch name, on which this pipeline should run'
required: true
jobs:
doSomething:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
ref: $ github.event.inputs.BRANCH_OF_FORK
- run: docker build something something
有一个 on:fork
事件,可用于触发运行,但它只能触发此特定分支的 fork 事件,该分支的工作流中有 on:fork
代码。
可以在没有 on-fork 事件的 cron 作业上运行工作流,但您必须以编程方式选择正确的分支。
steps:
- id: branch-selector
run: |
git clone $ github.event.repo.url .
all_branches=`git branch --all | grep -v " main\$" | grep -v "/main\$"`
correct_branch=`pick_correct_branch.py $all_branches`
git checkout -b $correct_branch
- run: docker build something something
pick_correct_branch.py
留作练习供读者实施。
【讨论】:
以上是关于为除 main 之外的所有分支触发 GitHub Actions,其中唯一的工作流定义文件是的主要内容,如果未能解决你的问题,请参考以下文章
配置 nginx 为除主页之外的所有页面返回 503 错误代码
为除一个/几个表之外的所有表授予 [几乎] 所有 mySQL 权限
Discord.py 重写 get_member() 函数,为除 bot 之外的所有用户返回 None