Как запустить полный сценарий конвейера Jenkins из файла src общих библиотек

Недавно я начал с общих библиотек Jenkins в конвейере Jenkins. Я создал класс "func.groov" и поместил его в "src / org / prj / func.groovy":

package org.prj
import jenkins.model.
class func implements Serializable {
 def steps 
 func(steps) {
  this.steps = steps
 }
 def sh(args) {
  steps.sh "echo ${args}"
 }
 def setLBL(CurrentNodeName,newLabelName){
   jenkins.model.Jenkins.instance.slaves.each{ slave ->
     if (slave.getNodeName() == CurrentNodeName){
       slave.setLabelString(newLabelName)
     }
  }
} 

Jenkinsfile (по сценарию) выглядит так:

@Library('prj') import org.prj.func
def utils = new func(steps)
node(lbl)
{
  stage("A"){
     Build_node_lbl = env.NODE_NAME+System.currentTimeMillis()
     utils.setLBL(env.NODE_NAME,Build_node_lbl)

   }
}

так что в настоящее время это работает. Мой вопрос заключается в том, как создать полную стадию (например, "A") как функцию в общей библиотеке libc.groovy, которая будет включать, например:

  1. GIT Checkout шаг
  2. шаг компиляции
  3. Шаг развертывания артефакта

Я на самом деле хочу создать "строительные блоки" (в моем примере это "Build") с библиотеками Jenkins pipe и shard.

1 ответ

Решение

1. С классовой инстанцией

Вы можете создать класс как в Java. Тогда в вашем Jenkinsfile Вы создаете экземпляр класса и вызываете его функцию.

SRC / орг / PRJ / MyPipeline.groovy:

package org.prj

class MyPipeline {

  def steps

  MyPipeline(steps) {this.steps = steps}

  public def build() {
    steps.node('lbl') {
      steps.stage('A') {
        // Do build stuff
        // steps.sh(..)
      }
    }
  }
}

Jenkinsfile:

import org.prj.MyPipeline

def pipeline = new MyPipeline(this)
pipeline.build()

2. Со статическими функциями

Вы также можете работать со статическими контекстами без создания экземпляров. Однако для этого потребуется передать контекст вызывающего в конвейер:

SRC / орг / PRJ / MyPipeline.groovy:

package org.prj

class MyPipeline {

  public static def build(caller) {
    caller.node('lbl') {
      caller.stage('A') {
        // Do build stuff
        caller.sh(..)
      }
    }
  }
}

Jenkinsfile:

import org.prj.MyPipeline

MyPipeline.build(this)
Другие вопросы по тегам