如何用Python或GitHub API通过个人访问令牌触发Workflow运行?
触发GitHub Workflow的两种Python实现方案
前置准备
首先需要创建一个GitHub个人访问令牌(PAT),创建时需勾选repo(私有仓库)或public_repo(公共仓库)权限,确保令牌能访问目标仓库并触发Workflow。
方案一:使用PyGitHub模块(GitHub官方Python SDK)
PyGitHub是GitHub官方维护的Python库,封装了API调用细节,使用更简洁。
- 安装模块
pip install pygithub
- 示例代码
from github import Github # 替换为你的个人访问令牌 ACCESS_TOKEN = "your-personal-access-token" # 仓库信息:替换为实际的所有者和仓库名 REPO_OWNER = "dev-zarir" REPO_NAME = "Python-Workflow" # Workflow文件名:替换为你的Workflow文件实际路径(比如 .github/workflows/python.yml) WORKFLOW_FILE_NAME = "python.yml" # 触发的分支名,默认通常是main或master BRANCH_NAME = "main" # 初始化GitHub客户端 g = Github(ACCESS_TOKEN) repo = g.get_repo(f"{REPO_OWNER}/{REPO_NAME}") # 触发Workflow repo.get_workflow(WORKFLOW_FILE_NAME).create_dispatch(branch=BRANCH_NAME)
方案二:使用requests直接调用GitHub API
如果不想依赖第三方库,可直接用requests调用GitHub的Actions API。
- 示例代码
import requests # 替换为你的个人访问令牌 ACCESS_TOKEN = "your-personal-access-token" # 仓库信息 REPO_OWNER = "dev-zarir" REPO_NAME = "Python-Workflow" # Workflow标识:可以是文件名(如python.yml)或Workflow的ID WORKFLOW_ID = "python.yml" # 触发的分支名 BRANCH_NAME = "main" # API端点 url = f"https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/actions/workflows/{WORKFLOW_ID}/dispatches" # 请求头 headers = { "Authorization": f"token {ACCESS_TOKEN}", "Accept": "application/vnd.github.v3+json" } # 请求体:指定触发的分支,若Workflow有输入参数可添加inputs字段 payload = { "ref": BRANCH_NAME } # 发送POST请求 response = requests.post(url, json=payload, headers=headers) # 检查响应状态 if response.status_code == 204: print("Workflow触发成功") else: print(f"触发失败,状态码:{response.status_code},详情:{response.text}")
注意事项
- 确保个人访问令牌的权限范围正确,缺少权限会触发403错误。
- Workflow的
on: workflow_dispatch配置必须存在,否则无法通过API触发。 - 分支名需为仓库中已存在的有效分支,否则会返回404错误。
内容的提问来源于stack exchange,提问作者Shahriar Zarir
相关产品推荐
相关产品推荐

