Skip to content

GitHub Action之Dispatch触发其他仓库

通过 github action API 实现在仓库 A 执行后触发仓库 B 执行。

基本思想

仓库 A 中 workflow 执行完成后,利用 GitHub API 中的(curl 或 gh 命令)触发仓库 B。

流程示意图:

Text Only
A: build -> ... -> trigger
B:                  -> deploy -> ...

配置

workflows 配置:

  • 仓库 B:
    1. 添加repository_dispatch
YAML
# .github/workflows/deploy.yml
name: Pages

on:
  push:
    branches:
      - main
  # ==> 新增部分
  repository_dispatch:
    types: [deploy-event]
  # <== 新增部分结束

jobs:
  deploy:
  # 任务执行
  • 仓库 A:
    1. 添加 GitHub Token,https://github.com/用户名/仓库名/settings/secrets/actions
    2. 修改 workflow,jobs添加trigger部分
YAML
# .github/workflows/example.yml
name: Demo

on:
  push:
    branches:
      - main
  # schedule:
  #   - cron: "0 5 */3 * *"

jobs:
  build:# 原先任务的配置
    # ...

  # ==> 新增部分: 触发任务
  trigger:
    needs: build # 依赖前面任务
    runs-on: ubuntu-latest
    steps:
      - name: Trigger workflow
        env:
          GH_TOKEN: ${{ secrets.GH_TOKEN_ACTION }} # 步骤1中添加的secrets名
          REPO: owner/repo # 保持和B仓库名字一致
          EVENT_TYPE: "deploy-event" # 保持B仓库repository_dispatch类型中一致
        run: |
          gh api --method POST \
            /repos/${REPO}/dispatches \
            -f "event_type=${EVENT_TYPE}"
  # <== 新增部分结束

TOKEN 申请说明

生成 fine-grained personal access token (PAT) , 网址: https://github.com/settings/tokens?type=beta

添加需要的仓库后,选择权限如下(添加 Actions、Contents 和 Workflows 读写权限即可):

权限名 读写权限
Actions Access: Read and write
Contents Access: Read and write
Metadata Access: Read-only
Workflows Access: Read and write

Comments