groovy 在共享库中不使用DSL生成Jenkins管道

cnh2zyt3  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(191)

我试图编写一个共享库来生成一个完整的管道,但是我很难将我的逻辑与管道DSL混合,所以我想完全绕过DSL,手动“组装”管道。
例如,将

def call() {
    node {
        stage("Hello world") {
            echo "Hello world"
        }
    }
}

我很想做一些

def call() {
    s = new Stage("Hello world")
    s.addStep({echo "Hello world"}) // or maybe s.addStep(new EchoStep("Hello world"))

    n = new Node()
    n.addStage(s)

    return n
}

有没有什么方法可以做到这一点?如果没有,有没有什么好的例子可以说明如何混合“插件时逻辑”(决定创建什么阶段以及它们应该有什么步骤)和“运行时逻辑”(如果文件存在,就做一些事情,如果测试失败,就做一些其他事情,等等)?

px9o7tmv

px9o7tmv1#

你可以用groovy闭包来实现这一点,你可以在google上找到一堆例子,比如https://www.jenkins.io/doc/pipeline/examples/
基本概念是闭包是可运行的,可以作为参数传递。

def helloWorld() {
  return {
    stage("Hello world") {
        echo "Hello world"
    }
  }
}

def runInNode(body){
   node {
      body()
   }
}

def call(){
  runInNode(helloWorld)
}

相关问题