Jenkins Multibranch Pipeline: скрипт / jenkinsfile как svn external

У меня в Jenkins многоотраслевой конвейер. Я хочу включить свой файл сценария (jenkinsfile) в качестве внешнего svn-файла в мои ветки разработки, чтобы централизованно организовать скрипт для всех ветвей. К сожалению, сканирование многоотраслевого конвейера не может найти файл сценария, поскольку он просматривает только объявленную ветвь, а не включенные внешние местоположения svn. Кто-нибудь знает, как это исправить?

Ниже приведен пример моей структуры svn, конфигурации задания и дополнительной информации.


SVN:

root/
    scripts/
        jenkinsfile
    code/
        version1/
            branchX/
            ...
        version11/        
            branchY/
            ...

Внешнее свойство SVN для branchX, branchY и т. Д.

Local path:   jenkinsfile
URL:          ^/scripts/jenkinsfile
Revision Peg: 12345

Конфигурация многоотраслевого задания:

Subversion
    Project Repository Base: http://.../root/code/
    Include branches:        version1/branchX, version11/branchY
Build configuration
    Mode:        by Jenkinsfile
    Script path: jenkinsfile

Сообщение журнала сканирования в многоотраслевом конвейере:

...
Checking candidate branch /code/version1/branchX@HEAD
      ‘jenkinsfile’ not found
Does not meet criteria
...

Я уже пытался отключить облегченную проверку плагина subversion scm в соответствии с этим советом: Многоканальный конвейер с jenkinsfile в svn: external (я добавил -Djenkins.scm.impl.subversion.SubversionSCMFileSystem.disable=true в <service><arguments>... в jenkins.xml)

Но Дженкинс все еще не может найти сценарий. И на самом деле, если я помещу свой скрипт прямо, например, branchX отключенная облегченная проверка приводит к двойной проверке в моей рабочей области (первая для чтения файла сценария, а вторая - для моего первого этапа в самом сценарии).

Может быть, вся моя установка тоже неправильная или это не идеальный способ?

Буду рад вашей помощи и советам. Спасибо и привет!


person j_d    schedule 30.01.2020    source источник


Ответы (1)


Если вы работаете в системе linux или bsd (osx), вы можете создать жесткую ссылку с root/scripts/jenkinsfile на root/code/version#/branchX/jenkinsfile для каждой активной ветки.

Таким образом, каждая ветка будет иметь свой собственный jenkinsfile, доступный локально, что позволит вам использовать облегченную проверку, и любое изменение, которое вы внесете в jenkinsfile в любом месте, будет доступно для всех других ветвей (файловая система будет хранить одну копию файл, несмотря на то, что он доступен из многих разных мест).

Команда bash для создания такой ссылки будет

ln root/scripts/jenkinsfile root/code/version#/branchX/jenkinsfile

Вам нужно будет не забывать создавать новую ссылку каждый раз, когда создается ветка, или автоматизировать это с помощью хуков

person matus    schedule 30.01.2020
comment
Для меня это больше похоже на обходной путь. Было бы неплохо управлять этим подключением через svn external. Таким образом, я мог разветвлять будущие новые каталоги из магистральных / старых версий и по-прежнему иметь действующую внешнюю ссылку svn. Кроме того, я не могу получить доступ к серверу Linux, на котором запущен svn. - person j_d; 30.01.2020
comment
Я заметил, что в вашем определении svn: externals вы, кажется, определяете файл, а не каталог. Вы пробовали определить каталог scripts как svn: external, а затем изменить конфигурацию конвейера в Jenkins, чтобы искать файл Jenkins в scripts/jenkinsfile? ... Вы можете проверить, работает ли svn: externals должным образом, путем клонирования репозитория локально в новую папку и посмотреть, находится ли jenkinsfile в нужном месте или нет. - person matus; 31.01.2020
comment
Файл как svn: external возможен, начиная с версии svn 1.6, и он работает. Я это уже проверял, клонировав репо локально. В Jenkins я настроил подключаемый модуль subversion scm для использования svn версии 1.8, так что проблем быть не должно. И да, я попытался связать всю папку als svn: external тоже, но многоотраслевое сканирование jenkins все еще не может найти скрипт. - person j_d; 31.01.2020