В первой статье цикла “Jenkins as a code” мы разобрали несколько примеров настройки экземпляра Jenkins под собственные нужды, в данной статье рассмотрим автоматическую настройку общих библиотек (Shared Libraries) — давайте разберемся!
Ранее мы уже подробно рассматривали значение общих библиотек для большого количества однотипных проектов, поэтому повторяться не будем. Наша цель — сделать так, чтобы после старта Jenkins общая библиотека уже была подключена и настроена — это избавит от необходимости настройки через UI.
Как и в предыдущей статье, нам на помощь приходят хуки (groovy-скрипты) из каталога ${JENKINS_HOME}/init.groovy.d/
. Создадим новый файл 04-global-pipeline-library.groovy
следующего содержания:
import jenkins.model.Jenkins
import jenkins.plugins.git.GitSCMSource
import jenkins.plugins.git.traits.BranchDiscoveryTrait
import org.jenkinsci.plugins.workflow.libs.GlobalLibraries
import org.jenkinsci.plugins.workflow.libs.LibraryConfiguration
import org.jenkinsci.plugins.workflow.libs.SCMSourceRetriever
List libraries = [] as ArrayList
def instance = Jenkins.getInstance()
println("--- Configuring global library getting")
def githubRepo = 'https://github.com/ealebed/jenkins-shared-libs.git'
def libraryName = 'jenkins-shared-libs'
def githubBranch = 'master'
def credentialsId = ''
def scm = new GitSCMSource(githubRepo)
scm.credentialsId = credentialsId
scm.traits = [new BranchDiscoveryTrait()]
def retriever = new SCMSourceRetriever(scm)
def library = new LibraryConfiguration(libraryName, retriever)
library.defaultVersion = githubBranch
library.implicit = true
library.allowVersionOverride = true
library.includeInChangesets = true
libraries << library
def global_settings = instance.getExtensionList(GlobalLibraries.class)[0]
global_settings.libraries = libraries
global_settings.save()
Интересующие нас настройки задаются с помощью четырех параметров — githubRepo
, libraryName
, githubBranch
и credentialsId
.
Здесь:
githubRepo
— ссылка на репозиторий с общими библиотеками в системе контроля версий (может быть как https, так и git);libraryName
— имя подключаемой общей библиотеки. Именно это имя будет использоваться в пайплайнах (Jenkinsfile
) в формате@Library('jenkins-shared-libs@master') _
;githubBranch
— ветка в git-репозитории с общими библиотеками (Она же “версия”). Также используется в пайплайнах (Jenkinsfile
);credentialsId
— креденшелы для подключения к git-репозиторию. Значение может быть пустым — помните скрипт03-user-service.groovy
из первой части цикла, которым мы настраивали доступ к системе контроля версий?
В зависимости от выбранного инструмента развертывания Jenkins, нужно добиться появления данного скрипта в каталоге ${JENKINS_HOME}/init.groovy.d/
— так он будет выполнен при запуске сервиса.
Источник: https://ealebed.github.io/posts/2018/jenkins-as-a-code-часть-2/