mar*_*use 21 continuous-integration release github github-actions
我在存储库的主分支上实现了GitHub Actions工作流程,它在 GitHub 中创建了我的包的新版本。然后我实施了另一个工作流程,该工作流程应在创建版本时触发。然而,这个触发器不起作用。
请注意,GitHub放弃了自己的
actions/create-release@v1项目,并建议使用softprops 发布操作。
我的工作流程模板如下:
name: Main release
on:
push:
branches:
- main
jobs:
release:
name: 'Release main'
runs-on: ubuntu-latest
steps:
- name: 'Checkout source code'
uses: 'actions/checkout@v2'
with:
ref: ${{ github.ref }
- name: Release
uses: softprops/action-gh-release@v1
with:
draft: false
body_path: CHANGELOG.md
name: ${{ steps.version.outputs.version }}
tag_name: ${{ github.ref }}
token: ${{ github.token }}
Run Code Online (Sandbox Code Playgroud)
我的on:release:created触发工作流程如下:
name: Act on release created
on:
release:
types: [created]
jobs:
build:
name: Build
environment: dev_environment
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Test
run: |
echo $RELEASE_VERSION
echo ${{ env.RELEASE_VERSION }}
Run Code Online (Sandbox Code Playgroud)
版本和标签已正确添加到 GitHub 中,因此一切看起来都工作正常,只是应该在版本上触发的工作流程未执行。
我该如何解决这个问题?
mar*_*use 24
有关在工作流程中执行任务的GitHub Actions文档说明如下:
当您使用存储库的 GITHUB_TOKEN 代表 GitHub Actions 应用程序执行任务时,GITHUB_TOKEN 触发的事件不会创建新的工作流程运行。这可以防止您意外创建递归工作流运行。
这意味着您必须创建个人访问令牌并将该令牌添加到您的存储库机密中。
要生成新的个人访问令牌,请转到您的个人开发人员设置并生成新令牌。然后转到存储库设置并添加包含个人访问令牌的新密钥,将其命名为 ie PAT。
在您的发布工作流程模板中,替换:
token: ${{ github.token }}
Run Code Online (Sandbox Code Playgroud)
和:
token: ${{ secrets.PAT }}
Run Code Online (Sandbox Code Playgroud)
现在,发布时创建的事件将触发工作流程!
注意:这种方法似乎 有点hacky,但它是目前此问题唯一已知的解决方法,并且可以被视为工作流集成的主要设计缺陷。
小智 8
作为上面给出的答案的附录,我发现workflow_run事件触发器非常适合此用例:
on:
workflow_run:
workflows: ["Main release"]
types: [completed]
Run Code Online (Sandbox Code Playgroud)
除此之外,您还可以为各种发布标签以及所有需要添加条件。