You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:50:36