当前位置: 首页 > 知识库问答 >
问题:

如何在一个类中使用Jenkins插件?

温星华
2023-03-14

我对Jenkins/Groovy很陌生,请在这里耐心等待。

我正在管道groovy脚本中使用DSL。DSL实例化了一个试图使用Jenkins插件的定制类。我不断收到错误,好像系统试图将插件作为类的直接成员来访问...?

詹金斯作业:管道脚本

@Library('lib-jenkins-util@branchname') _  // contains dsl.groovy

dsl {
    x = 'value'
}

文件:dsl.groovy

def call(body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()

node('node-name') {

    stage('Stage 1') {
        def f = new Foo()
    }

}

文件: Foo.groovy

class Foo implements Serializable {
    Foo() {
        // fails below
        sh "curl http://our-jenkins-server/xxx/api/json -user username:apitoken -o output.json"
        json = readJSON file: output.json
    }
}

错误:

hudson.remoting.ProxyException:groovy.lang.MissingMethodException:没有方法签名:com.xxx.Foo.sh()适用于参数类型:(org.codehaus.groovy.runtime.GStringImpl)值:[collhttp://our-jenkins-server/xxx/api/json-user用户名:apitoken-o output.json]

有人能帮我理解我缺少什么吗?是否不能从自定义类中直接调用插件?

共有1个答案

阳俊德
2023-03-14

好了,我找到了答案:插件如< code>sh、< code>httpResponse、< code>readJSON等是管道的一部分,所以你必须将管道上下文发送给你的类以便能够使用它。

我还必须将使用Pipeline上下文的调用移动到它们自己的方法中,而不是在构造函数中,以避免导致构建失败的CpsCallableInvocation问题。

文件:dls.groovy

def call(body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()

node('node-name') {
    stage('Stage 1') {
        def f = new Foo(this)  // send pipeline context to class
    }
}

文件: Foo.groovy

class Foo implements Serializable {
    def context

    Foo(context) {
        this.context = context
    }

    def doTheThing() {
        this.context.sh "curl http://our-jenkins-server/xxx/api/json -user username:apitoken -o output.json"
        def json = this.context.readJSON file: output.json
    }
}
 类似资料:
  • 问题内容: 在安装了“版本号插件”的Jenkinsfile中尝试此步骤: 并得到此错误: 在Jenkinsfile中使用此插件的正确方法是什么? 问题答案: 您需要使用它作为步骤。 看一看https://your_jenkins_url.com/pipeline- syntax/ 并检查已剪切生成器中VersionNumber步骤的所有选项。

  • 问题内容: 我对Jenkins和Job DSL插件很陌生。经过一些研究,我发现了如何使用DSL创建作业,现在我正尝试使用DSL删除作业。我知道使用以下代码禁用作业: 运行正常。但是,我找不到在詹金斯删除其他工作的任何方法。 请帮忙! 谢谢! 问题答案: Job Dsl插件的每个实例都跟踪它创建的作业(和视图)。再次运行该实例时,您可以配置它对该实例上次运行时存在但这次不存在的作业(和视图)的作用。

  • BFA插件似乎仍然使用jackson2-api插件中的jackson类,而不是直接依赖maven。导致https://issues.jenkins-ci.org/browse/jenkins-62214在MongoJack内部的导入中使用了错误的jackson版本,导致缺少方法: Jenkins的类路径中Jackson2-api插件的依赖性是否更高?

  • 问题内容: 我正在尝试使用Text Finder插件编写jenkinsfile ,但我不知道它是如何工作的。 这是我的代码: 问题答案: 正如@mghicks已经提到的,并不是每个插件都支持Jenkins管道。在这种情况下,Text Finder插件不支持它。例如,您可以为此编写自己的groovy函数: 例如: 我们正在调用filterLogs函数,并提供参数“ ERROR”(在您的日志中搜索ER

  • 问题内容: 我在詹金斯中使用管道插件。我有,但我想致电以获取值列表。 如何在Jenkinsfile中调用myNumbers()Java函数? 还是我需要有一个单独的Groovy脚本文件,然后将该文件放置在具有Test类的java jar中? 我的Jenkinsfile: 问题答案: 您可以将逻辑编写在Groovy文件中,该文件可以保存在Git存储库,管道共享库或其他地方。 例如,如果您的存储库中有

  • 我使用不同的工具,如处理来创建矢量图。这些图被写成单页或多页pdf。我想使用pdfbox将这些图包含在单个类似报告的pdf中。 我当前的工作流程包括这些PDF作为图像,并带有以下伪代码 虽然这有效,但它失去了矢量文件格式的好处,特别是文件/大小与打印质量。 是否可以使用pdfbox将其他pdf页面作为嵌入对象包含在页面中(未作为单独页面添加)?例如,我可以使用PDStream吗?我更喜欢像pdfl

  • 我是jenkins的新手,我正在尝试使用凭据插件在dsl中使用凭据 样板xml 我已将jenkins中的凭据定义为带有密码的用户名。上述加密值保存在anable中。 我的问题是我应该如何在dsl中调用它们 错误: 22:11:16致命:凭据“PROD”的类型为“Username with password”,其中“org”。詹金西。插件。普通凭据。应为StringCredentials

  • 我正在构建一个定制的Java库。我把我的大部分“重复”代码都保存在那里,比如文件处理、字符串处理等。每次我想使用它们时,我都必须将该类复制并粘贴到我正在进行的其他项目中。有没有办法让这个自定义库类成为“依赖项”?我在用我的智能手机。