如何从共享库 src 文件 运行 一个完整的 Jenkins 脚本管道阶段
how to run a complete Jenkins scripted pipeline stage from shared libraries src file
我最近开始在 Jenkins 管道中使用 Jenkins 共享库。
我创建了一个 "func.groov" class 并将其放在 "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 共享库中的一个函数,其中将包括,例如:
- GIT 结帐步骤
- sh编译步骤
- Artifactory 部署步骤
我实际上想用 Jenkins 管道和分片库创建一个 "building blocks"(在我的例子中是一个 "Build")。
1。用Class实例化
您可以像在 Java 中那样创建 class。然后在你的 Jenkinsfile
中实例化 class 并调用它的函数。
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(..)
}
}
}
}
詹金斯文件:
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(..)
}
}
}
}
詹金斯文件:
import org.prj.MyPipeline
MyPipeline.build(this)
我最近开始在 Jenkins 管道中使用 Jenkins 共享库。 我创建了一个 "func.groov" class 并将其放在 "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 共享库中的一个函数,其中将包括,例如:
- GIT 结帐步骤
- sh编译步骤
- Artifactory 部署步骤
我实际上想用 Jenkins 管道和分片库创建一个 "building blocks"(在我的例子中是一个 "Build")。
1。用Class实例化
您可以像在 Java 中那样创建 class。然后在你的 Jenkinsfile
中实例化 class 并调用它的函数。
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(..)
}
}
}
}
詹金斯文件:
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(..)
}
}
}
}
詹金斯文件:
import org.prj.MyPipeline
MyPipeline.build(this)