Как запустить полный сценарий конвейера 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, которая будет включать, например:
- GIT Checkout шаг
- шаг компиляции
- Шаг развертывания артефакта
Я на самом деле хочу создать "строительные блоки" (в моем примере это "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)