как запустить vars / script.groovy из общей библиотеки Jenkins - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь получить информацию из скрипта groovy, расположенного в vars, который вызывается из класса Jenkins в общей библиотеке, но выдает ошибку.информация:

  • Нужен - файл глобальной конфигурации.аналогично Управление Jenkins -> Настройка системы -> Переменные среды

  • Цель - чтобы иметь возможность получать глобальные значения внутри разделяемой библиотеки без отправкипараметры из Jenkinsfile.

  • Мое решение - я пытался использовать "vars / script.groovy", который работает для Jenkinsfile, но не внутри общей библиотеки.

структура файла

.
├── src
│   └── org
│       └── jenkins
│            └──shared_library.groovy 
│── vars
│      └── globals.groovy
│
│── jenkinsfile.groovy

vars / globals.groovy

def my_global() {
return 'my_global_name'
}

класс shared_library

package src.org.jenkins

class shared_library implements Serializable {
private steps

shared_library(steps) {
    this.steps = steps
}

def some_func(){
  println globals.my_global
}

jenkinsfile

@Library 'shared_library'
import org.jenkins.shared_library

my_shared_library = new shared_library(steps)

node(){
  stage('my_first_stage'){
    println globals.my_global
  }
  stage('my_second_stage'){
    println shared_library.some_func()
  }
}

, поэтому я вижу значение для первого отпечатка в конвейере, но для второго я получаю:

Нет такого свойства: глобальные переменные для класса: src.org.jenkins.shared_library

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

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

def some_func(){
    println steps.globals.my_global()
}

Принимая ваш пример, который станет

класс shared_library

package src.org.jenkins

class shared_library implements Serializable {
private steps

shared_library(steps) {
    this.steps = steps
}

def some_func(){
  println steps.globals.my_global()
}

Редактировать: Только что видел, что у твоего Jenkinsfile тоже есть опечатка.Необходимо использовать объект совместно используемой библиотеки вместо класса в my_second_stage:

Jenkinsfile

@Library('shared_library')
import org.jenkins.shared_library

my_shared_library = new shared_library(steps)

node(){
  stage('my_first_stage'){
    println globals.my_global()
  }
  stage('my_second_stage'){
    println my_shared_library.some_func()
  }
}
0 голосов
/ 06 июня 2018

Если вам удобно определять значение в файлах .properties или .json, вы можете использовать папку 'resource'

sharedlibrary / resource / global.properties

В вашем сценарии конвейера или var/script.groovy

Используйте метод libraryResource

globalPropertyContent = libraryResource 'global.properties'

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

globalPropertyContent.PROJECT_NAME
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...