我在我的存储库的主分支上实施了一个 GitHub Actions 工作流,它在 GitHub 中创建了我的包的一个新的 release。然后我实施了另一个工作流,该工作流应在创建发布时触发。但是,此触发器不起作用。
请注意 GitHub abandoned 他们自己的
项目并建议使用 softprops 发布动作.actions/create-release@v1
我的工作流程模板如下:
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 }}
我的
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 }}
发布和标签已正确添加到 GitHub 中,因此除了应该在发布上触发的工作流没有执行外,一切看起来都运行良好。
我该如何解决这个问题?
GitHub Actions 有关在工作流中执行任务的文档 说明如下:
当您使用存储库的 GITHUB_TOKEN 代表 GitHub Actions 应用程序执行任务时,由 GITHUB_TOKEN 触发的事件不会创建新的工作流运行。这可以防止您意外创建递归工作流运行。
这意味着您必须创建一个个人访问令牌并将此令牌添加到您的存储库机密中。
要生成新的个人访问令牌,请转到您的个人开发人员设置并生成一个新令牌。然后转到您的存储库设置并添加一个包含个人访问令牌的新秘密,将其命名为
PAT
.
在您的发布工作流程模板中,替换:
token: ${{ github.token }}
搭配:
token: ${{ secrets.PAT }}
现在将触发工作流的发布创建事件!
注意: 这种方法似乎 有点hacky,但这是目前已知的唯一解决此问题的方法,可以被认为是工作流集成的主要设计缺陷。
workflow_run
事件触发器非常适用于此用例:
on:
workflow_run:
workflows: ["Main release"]
types: [completed]
您可以为各种发布标签添加条件,除此之外,如果需要,还可以添加所有条件。
作为上面答案中Personal Access Token的替代方案(它可以访问您的回购协议的all),您可以为此目的生成专用SSH密钥对并将其作为添加到存储库部署密钥。这确保您只能访问这个单一的存储库,同时它提供了稍后将部署密钥添加到其他存储库的灵活性。
您可以按如下方式配置:
生成 SSH 密钥对:
ssh-keygen -N "" -f deploy_key -C "github-actions"
添加私钥(生成的文件
deploy_key
)作为encryped secret,例如COMMIT_KEY
到 GitHub 项目。
添加公钥(生成的文件
deploy_key.pub
)作为deploy key,对GitHub项目具有写入权限。勾选Allow write access
复选框。
在您的工作流程中检出源代码时,添加 SSH 密钥:
- name: Checkout
uses: actions/checkout@v3
with:
ssh-key: "${{secrets.COMMIT_KEY}}"
同一工作流程中的后续推送操作将触发任何已配置的 GitHub 工作流程,就好像它们是手动推送的一样。