我使用了几个不同的 Github 工作流,包括一个只能在官方版本上运行的工作流。里面.github/workflows/release.yml
是这个on
条件:
on:
push:
tags:
- 'v*'
Run Code Online (Sandbox Code Playgroud)
但是,如果我们团队中的某个人不小心(或故意)从develop
分支中推送了一个标签,这仍然可以运行。理想情况下,我们希望将其锁定,以便标签必须在main
分支上(因为它是受保护的),甚至可能更进一步,如果我们能够确保标签仅引用与以下相关的特定合并提交,那就太好了相应的发布。例如,如果我运行
git branch --contains tags/v1.2.3
Run Code Online (Sandbox Code Playgroud)
这通常会输出main
我制作标签的分支。我可以在 github 工作流中添加一个条件来检查它的输出吗?
查看Github 操作文档,不清楚是否使用逻辑 AND 或逻辑 OR 评估多个条件。
中指定的事件类型在它们之间on
具有逻辑OR
关系。所以例如
on:
push:
tags: ['v[0-9].[0-9]+.[0-9]+']
branches: [master]
Run Code Online (Sandbox Code Playgroud)
不幸的是,会触发任何分支上任何匹配标签的工作流程,但也会触发带有或不带有标签的 master 上的任何推送。我还按照文档中的示例更新了标签模式。
您必须决定是否只想为标签运行工作流,然后过滤掉除 master 之外的任何内容:
on:
push:
tags: ['v[0-9].[0-9]+.[0-9]+']
jobs:
myjob:
runs-on: ubuntu-latest
if: ${{ github.ref == 'refs/heads/master' }}
steps: [...]
Run Code Online (Sandbox Code Playgroud)
或者反过来:
on:
push:
branches: [master]
jobs:
myjob:
runs-on: ubuntu-latest
if: ${{ startsWith('refs/tags/v', github.ref) }}
steps: [...]
Run Code Online (Sandbox Code Playgroud)
例如,如果您的工作流包含其他可能在推送到 master 时运行的作业,您可能会选择第二种解决方案。您还会注意到,第二个标签的过滤器不太准确,这可能会成为一个问题。同样重要的是要注意,您可以使用 中的条件跳过整个工作流程on
,jobs.<job_id>.if
也可以仅使用步骤jobs.<job_id>.steps[*].if
归档时间: |
|
查看次数: |
865 次 |
最近记录: |