Gui*_*ume 5 jenkins jenkins-pipeline
我不知道如何定义动态共享库,并将其使用到我的管道中:
myLib=library (identifier: 'lib@master', retriever: modernSCM(
    [$class: 'GitSCMSource',
        remote: 'https://mygit.orga.com/git/ORGA/Jenkins-libs.git',
        credentialsId: 'aaaaaaa-8f3f-4e3c-vvvvvvv-6c77351e7872',
        includes: '*',
        excludes: 'test'
    ]))
pipeline {
  agent {
    node(){
      label("linux&&!master")
    }
  }
  tools {
    jdk "JDK1.8.0_45"
    maven "MVN339"
  }
  stages{
    stage("test lib"){
      steps {
        script {
          myLib.a.b.c.Utils.sayHelloTo("Guillaume")
          log.info("test lib")
        }
      }
    }
  }
在运行时它失败并显示:
java.lang.ClassNotFoundException: Utils
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
有什么问题的想法吗?我在网上找不到有关动态共享库教程的任何信息。
编辑:添加库树:
src
--a
  --b
    --c
      Utils.groovy
Utils.groovy内容:
java.lang.ClassNotFoundException: Utils
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
谢谢你们,纪尧姆
我无法解释您得到的 CNFE,但这段代码肯定存在一些问题。
sayHelloTo方法尚未声明static,但已作为一个方法被调用。script.echo无效,因为我script在这里看不到有效的名称。如果您想将其用作静态函数,请像这样更改该函数
<     def sayHelloTo(String name) {
>     static sayHelloTo(def steps, String name) {
对调用的唯一更改是传递this(应参考管道步骤):
<           myLib.a.b.c.Utils.sayHelloTo("Guillaume")
>           myLib.a.b.c.Utils.sayHelloTo(this, "Guillaume")
如果您想将其保留为实例方法,那么您仍然需要接受步骤:
<     def sayHelloTo(String name) {
>     def sayHelloTo(def steps, String name) {
然而,调用会像这样改变:
<           myLib.a.b.c.Utils.sayHelloTo("Guillaume")
>           myLib.a.b.c.Utils.new().sayHelloTo(this, "Guillaume")
在所有情况下,echo调用都会更改为:
<         script.echo("Hello there $name")
>         steps.echo("Hello there $name")
| 归档时间: | 
 | 
| 查看次数: | 3866 次 | 
| 最近记录: |