Как использовать общую библиотеку на уровне папок 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!"
}