Как использовать общую библиотеку на уровне папок Jenkins Pipeline?

У нас есть несколько компонентов, которые хранятся в их собственных репозиториях git. Конкретные комбинации этих компонентов создаются и поставляются как решения для различных типов развертываний / клиентов. Итак, у нас есть конвейерный git-репозиторий, в котором есть несколько Jenkinsfile (с разными именами - и, соответственно, именами сборок).

Очевидно, что между этими конвейерами много общего. Я знаю об общей библиотеке Jenkins, и она работает, когда им дают свой собственный репозиторий git. Но, поскольку мои конвейеры уже находятся в специальном репозитории git, мне любопытно узнать, как использовать "Общие библиотеки на уровне папок", описанные здесь -> https://jenkins.io/doc/book/pipeline/shared-libraries/

Но я не могу понять, как использовать эти общие библиотеки на уровне папок. Я не мог найти примеры / документацию для этого стиля библиотек.

Будем весьма благодарны за любые ссылки на документацию / пример - или рекомендации, как это сделать.

Благодарю.

2 ответа

Я думаю, что правильный способ сделать это - реализовать SCMRetriever и использовать library шаг.

Тем не менее, вы можете использовать следующий хак:

Если предположить, jenkins/vars/log.groovy в вашем локальном репо содержится:

def info(message) {
    echo "INFO: ${message}"
}

Ваш Jenkinsfile можно загрузить эту общую библиотеку из jenkins/ использование каталога library шаг:

node('node1') { // load library
    checkout scm
    // create new git repo inside jenkins subdirectory
    sh('cd jenkins && git init && git add --all . && git commit -m init &> /dev/null') 
    def repoPath = sh(returnStdout: true, script: 'pwd').trim() + "/jenkins"
    library identifier: 'local-lib@master', retriever: modernSCM([$class: 'GitSCMSource', remote: repoPath])
}

node('node2') {
    stage('Build') {
        log.info("called shared lib") // use the loaded library
    }
}

Во-первых: чтобы использовать общую библиотеку на уровне папки, необходимо создать стандартную структуру библиотеки и зафиксировать ее в репозитории SCM.

Во-вторых: вам нужно настроить jenkins для использования библиотеки в диалоговом окне параметров папки , в которой находится ваш конвейер.

Простой пример со сценарным пайплайном и без дополнительного репозитория для библиотеки:

      "<URL>/my-test-repo.git"
    |
    |- <JenkinsPipelineScript>
    |
    |- "jenkins_lib"
        |
        |- resources
        |- src
        |- vars
            |- "HelloWorld.groovy"

Итак, в вашем JenkinsPipelineScript просто импортируйте библиотеку,

      @Library('jenkins_lib') _

и вызовите "HelloWord.groovy"

      HelloWorld()

HelloWorld.groovy может выглядеть так:

      def call() {
sh "echo Hello world from library-script!" 
}
Другие вопросы по тегам