Во-первых, это не повторяющийся вопрос о функции "объединить перед сборкой".Я гуглил и просмотрел все, что нашел в отношении этой функции.Но никто не говорит о моей проблеме.
У нас есть Bitbuck Server + Jenkins, и я написал работу для наших PR на Bitbucket:
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 для каждого pull-запроса.В работе я хочу проверить ветку 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
снова проверяет фиксацию origianl (git checkout -f 1606dd8
) и продолжает сборку.Журнал показывает, что это действительно код без изменений из создаваемой ветви master
.
Вопросы:
1. Почему он проверяет исходный коммит после слияния?Почему он не продолжает сборку на объединенном коде?
2. Как сделать параметр branch
в mergeOptions
динамическим, чтобы это всегда была ветвь other в pull-запросе?
Спасибо.