#git #jenkins #jenkins-pipeline
#git #дженкинс #дженкинс-конвейер
Вопрос:
У меня есть задание Jenkins с параметром branch, настроенным на опрос SCM каждые 5 минут, и запускаю скрипт конвейера из SCM:
Первое, что делает скрипт, это удаляет предыдущую рабочую область и получает свежую копию исходного кода:
#!/usr/bin/env groovy
node {
try {
stage('Get Source') {
// Clear the workspace
deleteDir()
// Get the source code
checkout scm
}
// Stages for building and running unit tests...
}
}
Согласно журналу опроса Git, он проверяет репозиторий каждые 5 минут, но не находит изменений:
Started on Mar 13, 2019 4:29:34 PM
Using strategy: Default
[poll] Last Built Revision: Revision 47251333f2d6c740275f24dd667255e66f7b5665 (refs/remotes/origin/master)
using credential **********
> git --version # timeout=10
using GIT_SSH to set credentials Jenkins SSH Authentication Key
> git ls-remote -h git@bitbucket.org:myuser/myrepo.git # timeout=10
Found 1 remote heads on git@bitbucket.org:myuser/myrepo.git
Using strategy: Default
[poll] Last Built Revision: Revision 47251333f2d6c740275f24dd667255e66f7b5665 (refs/remotes/origin/master)
using credential **********
> git --version # timeout=10
using GIT_SSH to set credentials Jenkins SSH Authentication Key
> git ls-remote -h git@bitbucket.org:myuser/myrepo.git # timeout=10
Found 1 remote heads on git@bitbucket.org:myuser/myrepo.git
Done. Took 1.8 sec
No changes
Однако после 47251333f2d6c740275f24dd667255e66f7b5665 есть несколько дополнительных коммитов, которые были отправлены в удаленную главную ветвь.
Здесь я прочитал, что задание должно быть запущено вручную один раз, прежде чем SCM-опрос начнет работать, но я запускал его вручную несколько раз. Что я делаю не так?
Комментарии:
1. Извините, если это вам не поможет, но: почему вы используете опрос? Это обязательно? Вы слышали о webhooks? Это более эффективная и актуальная стратегия.
2. Мой сервер Jenkins находится в частной сети, поэтому я не думаю, что веб-хук из Bitbucket будет работать.
Ответ №1:
Я думаю, что я разобрался с проблемой. Поскольку спецификатор ветвления в моей конфигурации скрипта конвейера */${BRANCH}
, мне пришлось указать это на шаге проверки:
#!/usr/bin/env groovy
node {
try {
def repo = 'dice-seeker-android'
def branch = params.Branch
def credentialsID = params.CredentialsID
stage('Get Source') {
// Clear the workspace
deleteDir()
// Get the source code
checkout([
$class: 'GitSCM',
branches: [[
name: '*/' branch
]],
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: repo
]],
userRemoteConfigs: [[
credentialsId: credentialsID,
url: 'git@bitbucket.org:myuser/' repo '.git'
]]
])
}
// Stages for building and running unit tests...
}
}
Это означает, что мне также пришлось включить параметр учетных данных, который использует мой SSH-ключ.
Наконец, однажды мне пришлось запустить задание вручную. Теперь, похоже, он принимает изменения.
Если у кого-нибудь есть решение получше, требующее меньше кода, мне все равно было бы интересно услышать об этом.
Ответ №2:
первым шагом в вашем скрипте является удаление рабочей области и получение более новой (со всеми новыми коммит), поэтому я предполагаю, что она уже обновлена. вот почему он не обнаруживает ваши коммиты.