jenkins - 如何在类里面使用 Jenkins 的内置方法?

标签 jenkins groovy jenkins-pipeline

我正在开发一个 Jenkins 共享库。
目录结构如下:

project
- src
--- Operations.groovy
- vars
--- entry.groovy
现在在 entry.groovy 我的代码是:
import Operations;
def call(body) {

   def operation=new Operation();
   podTemplate(xxxxxx) {

     node(nodelabel){
        operation.stage_checkout()
     }
   }
}
在 Operations.groovy 中:
class Operations {

   def stage_checkout(){
      stage('Checkout') {
          checkout scm
      }
   }
}
当我尝试在 Jenkins 中运行它时,出现如下错误:
GitHub has been notified of this commit’s build result
groovy.lang.MissingPropertyException: No such property: scm for class: Operations
Possible solutions: ui
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)
    at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:39)
    at 
我认为“结帐”是 Jenkins 插件的内置方法。是否有任何正确的方法或指南可以帮助我正确使用 Jenkins 内置方法?

最佳答案

您可以通过对工作流脚本的引用来使用内置的 Jenkins 管道步骤。您可以将引用传递给 Operations通过传递 this 通过构造函数类目的。考虑以下示例:

vars/entry.groovy :

import Operations;

def call(body){

   def operation=new Operation(this); // passing a reference to workflow script

   podTemplate(xxxxxx){
     node(nodelabel){
        operation.stage_checkout()
     }
   }
}

src/Operations.groovy :
class Operations {

    private final Script script

    Operations(Script script) {
        this.script = script
    }

    def stage_checkout(){
        script.stage('Checkout') {
            script.checkout script.scm
        }
    }
}

关于jenkins - 如何在类里面使用 Jenkins 的内置方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53188916/

相关文章:

jenkins - 如何使用 jenkinsfile 为 Windows 中的管道作业进行 Nant 构建?

android - Gradle 3.0.0 alpha 变体输出问题

git - 如何在 Jenkins 管道中使用 GitHub 提交消息和提交 ID?

jenkins - 如何使用 Jenkins Pipeline 并选择电子邮件通知的触发器?

git - 并发git pull 到同一个本地存储库

linux - Jenkins (linux) 和 EnvInject on node (Windows) 文件访问

grails - 解析JSON日期

jenkins - 如何测试 Jenkins 插件是否安装在 Pipeline DSL (Groovy)

jenkins - 如何覆盖 "part of app-pipeline"构建名称?

jenkins - Gitlab 到 Jenkins Webhook(带参数)