gpt4 book ai didi

jenkins - 如何从共享库 src 文件运行完整的 Jenkins 脚本化管道阶段

转载 作者:行者123 更新时间:2023-12-02 17:53:42 26 4
gpt4 key购买 nike

我最近开始使用 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”)作为 func.groovy 共享库中的函数,其中包括,例如:

  1. GIT 结帐步骤
  2. sh编译步骤
  3. Artifactory 部署步骤

我实际上希望使用 Jenkins 管道和分片库创建一个“构建 block ”(在我的示例中为“构建”)。

最佳答案

1。使用类实例化

您可以像在 Java 中一样创建一个类。然后在您的 Jenkinsfile 中实例化该类并调用其函数。

src/org/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(..)
}
}
}
}

Jenkins文件:

import org.prj.MyPipeline

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

2。使用静态函数

您还可以使用静态上下文,无需实例化。但是,这需要将调用者上下文移交给管道:

src/org/prj/MyPipeline.groovy:

package org.prj

class MyPipeline {

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

Jenkins文件:

import org.prj.MyPipeline

MyPipeline.build(this)

关于jenkins - 如何从共享库 src 文件运行完整的 Jenkins 脚本化管道阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45952379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com