Общая библиотека конвейера Jenkins не может вызвать метод в каталоге src - PullRequest
0 голосов
/ 29 августа 2018

Я хочу вызвать метод каталога src из каталога vars, который работает в IDE. Но, похоже, не работает в Дженкинс.

1.проектная структура

├── src
│   └── foo
│       └── DemoClass.groovy
└── vars
    └── varDemo.groovy

2. Содержимое DemoClass.groovy

#!groovy
package foo

class DemoClass {
    def testDemoMethod() {
        println("src DemoClass testDemoMethod")
    }
}

3.Содержание varDemo.groovy

#!groovy

import foo.DemoClass

def testVarsDemo() {
    println("vars varDemo.groovy testVarsDemo")
}

def testVarsInvokeDemoMethod() {
    println("vars varDemo.groovy testVarsInvokeDemoMethod")
    def demoClass = new DemoClass()
    demoClass.testDemoMethod()
    println("end vars varDemo.groovy testVarsInvokeDemoMethod")
}

4. Трубопровод Дженкинса

@Library('tools') _
varDemo.testVarsDemo()
varDemo.testVarsInvokeDemoMethod()

5. Выполнить результат в конвейере

 > git checkout -f b6176268be99abe300d514e1703ff8a08e3ef8da
Commit message: "test"
 > git rev-list --no-walk c1a50961228ca071d43134854548841a056e16c9 # timeout=10
[Pipeline] echo
vars varDemo.groovy testVarsDemo
[Pipeline] echo
vars varDemo.groovy testVarsInvokeDemoMethod
[Pipeline] echo
end vars varDemo.groovy testVarsInvokeDemoMethod
[Pipeline] End of Pipeline

Кажется, demoClass.testDemoMethod() не работает. Почему не может вызвать demoClass.testDemoMethod()? Что мне делать, если я хочу вызвать метод в каталоге src? Спасибо!

1 Ответ

0 голосов
/ 29 августа 2018

Не переопределяя ваши разделы кода локально, вот некоторые различия, которые я замечаю между вашим и моим работающим.

JENKINSFILE

  1. У меня нет пробела перед подчеркиванием в строке @Library
  2. Сразу после строки @Library я импортирую класс разделяемой библиотеки, который реализует методы, которые я хочу вызвать. В вашем случае это будет import foo.DemoClass
  3. Мой вызов моего метода имеет вид (new DemoClass(config, this)).testVarsInvokeDemoMethod()

ОБЪЕДИНЕННЫЕ БИБЛИОТЕЧНЫЕ КЛАССЫ

  1. У меня нет #!groovy ни в одном из моих классных занятий.
  2. Мой класс общедоступен и реализует Serializable

Надеюсь, одно из этих различий является источником того, почему его не вызывают.

...