Как использовать встроенный метод Дженкинса в классе? - PullRequest
0 голосов
/ 07 ноября 2018

Я занимаюсь разработкой общей библиотеки Дженкинса. Справочник как ниже. project - src --- Operations.groovy - vars --- entry.groovy. Сейчас в entry.grooy. Мой код как удар

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 

Я думаю, что "checkout" - это встроенный метод плагина jenkins, и как я могу его правильно использовать? Есть ли правильный способ или руководство, которое может помочь мне правильно использовать встроенный метод Дженкинса?

Большое спасибо.

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете использовать встроенные шаги конвейера 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
        }
    }
}
...