【发布时间】:2018-07-26 04:32:32
【问题描述】:
我正在使用带有 Git 的本地 BitBucket 服务器。我正在尝试开始使用持续集成,所以我设置了一个本地 Jenkins 实例。目标是让 Jenkins 检查拉取请求并构建项目,然后将结果报告给 BitBucket。
在 BitBucket 中,我使用 Webhook to Jenkins for Stash,它会在每次创建/更新拉取请求时通知我的 Jenkins 实例。
在 Jenkins 中,当收到上述插件的通知时,我使用 Stash pullrequest builder plugin 让 Jenkins 签出 pullrequest。我已经使用了文档中的设置,即
Refspec: +refs/pull-requests/*:refs/remotes/origin/pr/*
Branch Specifier: origin/pr/${pullRequestId}/from
它几乎可以工作......
当我在 BitBucket 中创建新的拉取请求时,Jenkins 得到通知,检查 PR 并将结果报告回 BitBucket。到目前为止,一切都很好。
但是,当我更新 PR(即提交新代码并推送到 BitBucket)时,Jenkins 会被触发,但仍会检查 PR 中的先前提交,而不是新提交。
我进行了一些调查,但被卡住了。据我了解Refspec 指定我应该在本地将refs/remotes/origin/pr/* 映射到refs/pull-requests/*。但是,当我对现有 PR 进行新提交时,BitBucket 似乎不会更新 PR 的引用,这导致 Jenkins 只能找到旧的。
当我在提交更新并将更新推送到现有 PR 后运行 git ls-remote origin 时,我得到以下信息:
edf245 (new commit)... refs/heads/feature/Name-Of-My-Branch-That-I-Created-Pull-Request-From-pr
af774f (previous commit in PR)... refs/pull-requests/69/from
7fa82b (master)... refs/pull-requests/69/merge
然而,在访问 BitBucket 中的 PR 页面后,refs 似乎已更新,我得到以下结果:
edf245 (new commit)... refs/heads/feature/Name-Of-My-Branch-That-I-Created-Pull-Request-From-pr
edf245 (new commit)... refs/pull-requests/69/from
7fa82b (master)... refs/pull-requests/69/merge
如果我在此之后手动触发 Jenkins,它会构建最新的提交。
所以我的问题是,在我访问 BitBucket 中的实际 PR 页面之前,BitBucket 似乎并没有更新 refspec。我该如何解决这个问题?
谷歌搜索我最终找到了here 的问题,它的行为似乎是设计使然...
【问题讨论】:
标签: git jenkins continuous-integration bitbucket pull-request