【发布时间】:2019-05-01 18:53:03
【问题描述】:
首先,这不是“构建前合并”功能的重复问题。我搜索并查看了我发现的有关此功能的所有内容。但是没有人谈论我的问题。
我们有 Bitbuck Server + Jenkins,我在 Bitbucket 上为我们的 PR 写了一份工作:
job('pull-request-job') {
scm {
git {
remote {
name 'origin'
credentials 'jenkins-ssh'
url 'ssh://git@stash.example.com/my/repository.git'
refspec '+refs/pull-requests/*/from:refs/remotes/*'
}
branch '**/pull-requests/**'
extensions {
mergeOptions {
remote 'origin'
branch 'master'
}
}
}
}
triggers {
scm ''
}
steps {
shell './mvnw -e clean verify'
}
}
快速说明:我们不练习 gitflow 或类似的东西。大多数情况下(尽管并非总是如此)它只是一个 master 和开发人员正在处理的分支。
目标:我想要一个由 Bitbucket 服务器为每个拉取请求触发的工作。在工作中,我想检查 my 分支(我工作的分支,将被合并到 master 分支)并运行测试。默认配置很好地完成了这项工作。现在在运行测试之前,我想从master 分支(或my 分支将要合并到的任何其他分支)到my 分支获取最新更改。我怎样才能做到这一点?
拥有上述职位描述是行不通的。构建示例如下:
commit notification 1606dd8
[EnvInject] - Loading node environment variables.
Building in workspace /var/lib/jenkins/workspace/pull-request-job
using credential jenkins-ssh
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url ssh://git@stash.example.com/my/repository.git # timeout=10
Fetching upstream changes from ssh://git@stash.example.com/my/repository.git
> git --version # timeout=10
using GIT_SSH to set credentials Jenkins User SSH Private Key
> git fetch --tags --progress ssh://git@stash.example.com/my/repository.git +refs/pull-requests/*/from:refs/remotes/*
> git rev-parse 1606dd8^{commit} # timeout=10
> git branch -a -v --no-abbrev --contains 1606dd8 # timeout=10
Merging Revision 1606dd8 (3, 2, 1) to origin/master, UserMergeOptions{mergeRemote='origin', mergeTarget='master', mergeStrategy='default', fastForwardMode='--ff'}
> git rev-parse origin/master^{commit} # timeout=10
> git config core.sparsecheckout # timeout=10
> git checkout -f origin/master
> git merge --ff 1606dd8 # timeout=10
> git rev-parse HEAD^{commit} # timeout=10
Seen branch in repository 1
Seen branch in repository 2
Seen branch in repository 3
Seen branch in repository origin/master
Seen 4 remote branches
> git show-ref --tags -d # timeout=10
Checking out Revision 1606dd8 (1, 2, 3, origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 1606dd8
Commit message: "Upgrade maven"
> git rev-list --no-walk 1606dd8 # timeout=10
> git rev-list --no-walk 1606dd8 # timeout=10
> git rev-list --no-walk 1606dd8 # timeout=10
[pull-request-job] $ /bin/sh -xe /tmp/jenkins3480907669634770028.sh
+ ./mvnw -e clean verify
根据记录,Jenkins 在将我的分支合并到 master 后,正在再次检查原始提交 (git checkout -f 1606dd8) 并继续构建。日志显示它确实是没有从 master 构建的分支更改的代码。
问题:
1. 合并后为什么要检出原来的commit?为什么不继续在合并后的代码上构建?
2. 如何使mergeOptions 中的branch 参数动态化,使其始终是拉取请求中的other 分支?
谢谢。
【问题讨论】: