Заставить Дженкинса выбрать все ветки при любой сборке - PullRequest
0 голосов
/ 06 апреля 2020

Я использую работу многоотраслевого конвейера jenkins для выполнения различных проверок и слияний между ветвями и тегами в одном репозитории. Выборка SCM выполняется с использованием этих расширений scm, чтобы убедиться, что все ветви и теги выбраны в рабочей области (параметр «Honor refspe c on initial clone» не проверен):

[[$class: 'PruneStaleBranch'], [$class: 'CloneOption', noTags: false, reference: '', shallow: false]]

Работает нормально для первой сборки, когда рабочее пространство пусто:

git fetch --tags --force --progress -- https://scmServer/repo.git +refs/heads/*:refs/remotes/origin/*

Но не в последующих сборках, где jenkins выбирает только ветвь, связанную с заданием:

git fetch --tags --force --progress --prune -- https://scmServer/repo.git +refs/heads/release/10.0.0:refs/remotes/origin/release/10.0.0

В этом случае другие ветви, такие как master, не выбираются и устаревают в рабочей области по сравнению с исходной.

Одним неприятным решением было бы стирать рабочее пространство при каждой сборке, но я бы предпочел этого избежать. Как я могу заставить Дженкинса выбрать все ветки для всех сборок? Одним из объяснений такого поведения может быть l ie в названии опции "Honor refspe c on initial clone". Поскольку я не в исходном клоне, этот параметр может не применяться, и поведение по умолчанию в не начальных сборках выглядит так, чтобы соблюдать refspe c.

1 Ответ

0 голосов
/ 06 апреля 2020

Проблема действительно была связана с refspe c, который поставляется по умолчанию в объекте scm многоотраслевого конвейера. В этом контексте refspe c указывает c на создаваемую ветку. Он просто игнорируется во время первой сборки и только в первой сборке, если для параметра 'honor refspe c on initial clone' установлено значение false.

Я попытался отредактировать или обновить refspe c scm карта, но это не сработало, поэтому я просто создал новый и скопировал нужные атрибуты + пользовательский refspe c, чтобы получить все ветви

    def scmVars = checkout([
        $class: 'GitSCM',
        branches: scm.branches,
        extensions: scm.extensions, 
        userRemoteConfigs: [[
            credentialsId: scm.userRemoteConfigs[0].credentialsId,
            name: 'origin', 
            refspec: '+refs/heads/*:refs/remotes/origin/*', 
            url: scm.userRemoteConfigs[0].url
        ]],
        doGenerateSubmoduleConfigurations: false
    ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...