Конвейер Jenkins с опросом Git не запускается

#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:

первым шагом в вашем скрипте является удаление рабочей области и получение более новой (со всеми новыми коммит), поэтому я предполагаю, что она уже обновлена. вот почему он не обнаруживает ваши коммиты.