java.lang.Exception: нет или несколько репозиториев с BitBucket Notifier в многоветвевом конвейере Jenkins

У меня есть декларативный конвейер с несколькими ветвями на Jenkins, который запускается событиями репо из моей облачной учетной записи Bitbucket, и я хотел бы, чтобы он сообщал о результате обратно в Bitbucket.

Мой Jenkinsfile выглядит следующим образом:

pipeline {
    agent any
    stages {
        stage('Prepare Env') {
            steps {
                bitbucketStatusNotify(buildState: 'INPROGRESS')
                sh "npm i"
            }
            post {
                success {
                    bitbucketStatusNotify(buildState: 'SUCCESSFUL')
                }
                failure {
                    bitbucketStatusNotify(buildState: 'FAILED')
                }
            }
        }
    }
}

Я обнаружил, что вторая и все последующие фиксации запроса на вытягивание вызывают условие, когда сборка Jenkins завершается сбоем при уведомлении Bitbucket о результате сборки сообщением: java.lang.Exception: None or multiple repos.

Это каким-то образом согласуется с одной из первых строк в журнале: Fetching changes from 2 remote Git repositories.

Однако на самом деле у меня есть только один репозиторий, и я понятия не имею, почему Дженкинс распознает его как несколько.

Как я могу заставить свою сборку перестать видеть несколько репозиториев и добиться успеха?

Полный журнал следует:

Branch event
Checking out git https://bitbucket.org/mycompany/myproject.git https://bitbucket.org/mycompany/myproject.git into /var/lib/jenkins/workspace/myproject_PR-48-TV7ILAHCKATC6ZK26DHNTXI6KKLEGO3RSNDKAL2363W5GU5TABFQ@script to read Jenkinsfile
 > /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from 2 remote Git repositories
 > /usr/bin/git config remote.origin.url https://bitbucket.org/mycompany/myproject.git # timeout=10
Fetching without tags
Fetching upstream changes from https://bitbucket.org/mycompany/myproject.git
 > /usr/bin/git --version # timeout=10
using GIT_ASKPASS to set credentials Migrated by JIRA Plugin
 > /usr/bin/git fetch --no-tags --progress https://bitbucket.org/mycompany/myproject.git +refs/heads/VE-3869-dodawanie-edycja-i-usuwanie-aktu:refs/remotes/origin/PR-48
 > /usr/bin/git config remote.upstream.url https://bitbucket.org/mycompany/myproject.git # timeout=10
Fetching without tags
Fetching upstream changes from https://bitbucket.org/mycompany/myproject.git
using GIT_ASKPASS to set credentials Migrated by JIRA Plugin
 > /usr/bin/git fetch --no-tags --progress https://bitbucket.org/mycompany/myproject.git +refs/heads/master:refs/remotes/upstream/master
Merging remotes/upstream/master commit 98a73e74fed491c44dcb1b361a1eedb737e8960c into PR head commit bd199dfbe53f7a9cb0b71b45e048b98f4f173835
 > /usr/bin/git config core.sparsecheckout # timeout=10
 > /usr/bin/git checkout -f bd199dfbe53f7a9cb0b71b45e048b98f4f173835
 > /usr/bin/git merge 98a73e74fed491c44dcb1b361a1eedb737e8960c # timeout=10
 > /usr/bin/git rev-parse HEAD^{commit} # timeout=10
Merge succeeded, producing e402581b4779a8ce8e4d0b3af0a543ae99c1dbd4
Checking out Revision e402581b4779a8ce8e4d0b3af0a543ae99c1dbd4 (PR-48)
 > /usr/bin/git config core.sparsecheckout # timeout=10
 > /usr/bin/git checkout -f e402581b4779a8ce8e4d0b3af0a543ae99c1dbd4
Commit message: "Merge commit '98a73e74fed491c44dcb1b361a1eedb737e8960c' into HEAD"
 > /usr/bin/git rev-list --no-walk 760dbaed862dfc7416eb5d2e158499cb6ad941cb # timeout=10
[Bitbucket] Notifying pull request build result
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/myproject_PR-48-TV7ILAHCKATC6ZK26DHNTXI6KKLEGO3RSNDKAL2363W5GU5TABFQ
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
 > /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from 2 remote Git repositories
 > /usr/bin/git config remote.origin.url https://bitbucket.org/mycompany/myproject.git # timeout=10
Fetching without tags
Fetching upstream changes from https://bitbucket.org/mycompany/myproject.git
 > /usr/bin/git --version # timeout=10
using GIT_ASKPASS to set credentials Migrated by JIRA Plugin
 > /usr/bin/git fetch --no-tags --progress https://bitbucket.org/mycompany/myproject.git +refs/heads/VE-3869-dodawanie-edycja-i-usuwanie-aktu:refs/remotes/origin/PR-48
 > /usr/bin/git config remote.upstream.url https://bitbucket.org/mycompany/myproject.git # timeout=10
Fetching without tags
Fetching upstream changes from https://bitbucket.org/mycompany/myproject.git
using GIT_ASKPASS to set credentials Migrated by JIRA Plugin
 > /usr/bin/git fetch --no-tags --progress https://bitbucket.org/mycompany/myproject.git +refs/heads/master:refs/remotes/upstream/master
Merging remotes/upstream/master commit 98a73e74fed491c44dcb1b361a1eedb737e8960c into PR head commit bd199dfbe53f7a9cb0b71b45e048b98f4f173835
 > /usr/bin/git config core.sparsecheckout # timeout=10
 > /usr/bin/git checkout -f bd199dfbe53f7a9cb0b71b45e048b98f4f173835
 > /usr/bin/git merge 98a73e74fed491c44dcb1b361a1eedb737e8960c # timeout=10
 > /usr/bin/git rev-parse HEAD^{commit} # timeout=10
Merge succeeded, producing e74140b80595d0bf0ee1da066a6b34dab9797f2a
Checking out Revision e74140b80595d0bf0ee1da066a6b34dab9797f2a (PR-48)
 > /usr/bin/git config core.sparsecheckout # timeout=10
 > /usr/bin/git checkout -f e74140b80595d0bf0ee1da066a6b34dab9797f2a
Commit message: "Merge commit '98a73e74fed491c44dcb1b361a1eedb737e8960c' into HEAD"
 > /usr/bin/git rev-list --no-walk 760dbaed862dfc7416eb5d2e158499cb6ad941cb # timeout=10
First time build. Skipping changelog.
[Bitbucket] Notifying pull request build result
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Prepare Env)
[Pipeline] bitbucketStatusNotify
Post stage
[Pipeline] bitbucketStatusNotify
Error when executing failure post condition:
java.lang.Exception: None or multiple repos
    at org.jenkinsci.plugins.bitbucket.scm.GitScmAdapter.getCommitRepoMap(GitScmAdapter.java:53)
    at org.jenkinsci.plugins.bitbucket.BitbucketBuildStatusHelper.createBuildStatusResources(BitbucketBuildStatusHelper.java:87)
    at org.jenkinsci.plugins.bitbucket.BitbucketBuildStatusHelper.createBuildStatusResources(BitbucketBuildStatusHelper.java:140)
    at org.jenkinsci.plugins.bitbucket.BitbucketBuildStatusHelper.notifyBuildStatus(BitbucketBuildStatusHelper.java:231)
    at org.jenkinsci.plugins.bitbucket.BitbucketBuildStatusNotifierStep$Execution.run(BitbucketBuildStatusNotifierStep.java:206)
    at org.jenkinsci.plugins.bitbucket.BitbucketBuildStatusNotifierStep$Execution.run(BitbucketBuildStatusNotifierStep.java:152)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
    at hudson.security.ACL.impersonate(ACL.java:290)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build)
Stage "Build" skipped due to earlier failure(s)

person ohaleck    schedule 27.09.2018    source источник
comment
Является ли сценарий конвейера, который вы опубликовали, конкурентоспособным? Я не могу найти часть клона репозитория.   -  person Joerg S    schedule 28.09.2018
comment
@JoergS раньше был этап, содержащий шаг git, но я понял, что он работает и без него, поскольку репозиторий управляется плагином исходного кода ветки Bitbucket, который настроен вне Jenkinsfile.   -  person ohaleck    schedule 28.09.2018
comment
Если вы говорите, но я понял, что это работает и без него, вы имеете в виду, что вы смогли решить проблему?   -  person Joerg S    schedule 28.09.2018
comment
Нет. Осознание пришло до того, как появилась проблема. Я удалил шаг «Git», что не сделало сборку хуже. Это кажется законным, поскольку мне пришлось бы передать Jenkins какой-то дескриптор ветки, чтобы он построил мои запросы на вытягивание. В любом случае, даже добавление шага «Git» назад не решает проблему. Он по-прежнему говорит «2 удаленных репозитория Git» и завершается ошибкой с исключением «Нет или несколько репозиториев».   -  person ohaleck    schedule 28.09.2018
comment
При проверке журнала он предположительно рассматривает PR и цель PR как два разных репозитория. Являются ли они в одном и том же удаленном Bitbucket или запрос на вытягивание исходит от какой-то вилки?   -  person Joerg S    schedule 29.09.2018
comment
@JoergS они на одном пульте, сам Bitbucket.   -  person ohaleck    schedule 01.10.2018
comment
Я предполагал это. Это тоже один и тот же репозиторий или PR происходит из какого-то разветвленного репозитория?   -  person Joerg S    schedule 01.10.2018
comment
@JoergS PR происходит от клона на машине разработчика. Не уверен, следует ли рассматривать это как один и тот же репозиторий или клон. В любом случае, он объединяется с веткой на BitBucket до создания PR.   -  person ohaleck    schedule 02.10.2018
comment
Почему-то мне кажется, что слияние выполняется в Дженкинсе. Это может быть причиной того, что он видит два репозитория. Возможно, вы можете попробовать поиграть с настройками слияния в Jenkins, чтобы использовать слияние Bitbucket вместо того, чтобы Jenkins выполнял слияние. Об этом есть еще одна ветка, однако другая ветка посвящена многоотраслевым проектам. Ссылку поищу, может тут тоже пригодится.   -  person Joerg S    schedule 03.10.2018
comment
См. мой ответ здесь о том, как вытащить объединенную фиксацию из Bitbucket вместо того, чтобы позволить Дженкинсу выполнить слияние. stackoverflow.com/a/51915362/4279361 . Возможно, вы захотите рассмотреть возможность использования многоветвевого конвейера с использованием плагина исходного кода ветки Bitbucket, у которого нет ЭТОЙ проблемы. Хотя, конечно, есть и другие проблемы :(   -  person Joerg S    schedule 03.10.2018
comment
@JoergS Я уже использую плагин. Ответ Nacesk ниже устранил проблему для меня!   -  person ohaleck    schedule 09.10.2018
comment
Хорошо знать. Каким-то образом я, должно быть, пропустил тот факт, что вы уже используете этот плагин.   -  person Joerg S    schedule 10.10.2018


Ответы (2)


Короткий ответ: удалите все вызовы bitbucketStatusNotify. Уведомления являются неявными, поскольку это работа битбакета.

Длинный ответ: Потратив 3 часа на ту же ошибку, мы увидели, что проблема связана с плагином «bitbucketStatusNotify».

Указанная вами ошибка «Извлечение изменений из 2 удаленных репозиториев Git», по-видимому, связана с тем, как jenkins управляет заданиями PR, и приводит к сбою плагина bitbucketStatusNotify.

Поскольку это работа плагина bitbucket, уведомления для bitbucket выполняются автоматически, поэтому, если вы удалите вызовы bitbucketStatusNotify, он должен работать должным образом.

person nacesk    schedule 08.10.2018

Это исправлено этим PR, но начиная с 1.4.1 еще не помечено для выпуска.

https://github.com/jenkinsci/bitbucket-build-status-notifier-plugin/pull/43

person Erik van Velzen    schedule 24.01.2020