如何在Jenkins流水线中获取Gitea的PR编号?
Jenkins多分支流水线获取Gitea PR编号方案
1. 先检查Gitea插件配置
确保Jenkins已安装Gitea Plugin,并且在多分支流水线的源码配置中:
- 正确关联Gitea服务器
- 勾选"发现拉取请求"相关规则(比如"来自origin的拉取请求")
只有配置到位,Jenkins才会识别PR并自动注入相关环境变量。
2. 直接使用内置环境变量
配置正确的前提下,以下变量可直接获取PR编号:
CHANGE_ID:多数版本的Gitea插件会注入该变量,直接对应PR编号CHANGE_NUMBER:部分场景下的备选变量,同样指向PR编号
如果之前返回null,优先排查插件配置和PR发现规则是否生效。
3. 从分支名称提取(备选方案)
如果你的Gitea PR分支命名有固定格式(比如PR-123、pr/123),可以用Groovy代码提取:
// 针对PR-xxx格式 def prId = env.BRANCH_NAME.replaceAll(/^PR-/, '') // 针对pr/xxx格式 def prId = env.BRANCH_NAME.replaceAll(/^pr\//, '') // 通用数字提取(兼容多种前缀) def prId = env.BRANCH_NAME.find(/\d+/).toInteger()
建议增加分支格式判断,避免非PR分支执行时报错:
def prId = null if (env.BRANCH_NAME =~ /PR-\d+/ || env.BRANCH_NAME =~ /pr\/\d+/) { prId = env.BRANCH_NAME.find(/\d+/).toInteger() }
4. 调用Gitea API获取(终极方案)
如果以上方法都失效,可通过Gitea API查询当前分支对应的PR:
// 提前在Jenkins凭据中存储Gitea访问令牌 def giteaToken = credentials('gitea-access-token') def repoOwner = '你的仓库所有者' def repoName = '你的仓库名称' def branchName = env.BRANCH_NAME // 调用API查询开放状态的PR def prResponse = sh(script: """ curl -s -H "Authorization: token ${giteaToken}" \ https://你的Gitea域名/api/v1/repos/${repoOwner}/${repoName}/pulls?state=open&head=${branchName} """, returnStdout: true) // 解析返回的JSON数据 def prData = new groovy.json.JsonSlurper().parseText(prResponse) if (prData.size() > 0) { def prId = prData[0].number echo "获取到PR编号: ${prId}" }
内容的提问来源于stack exchange,提问作者gunyoung
相关产品推荐
相关产品推荐

