首页 文章

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

提问于
浏览
1

我最近开始使用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)

   }
}

所以目前它有效 . 我的问题是如何在func.groovy共享库中创建一个完整的阶段(如“A”)作为函数,例如:

  • GIT结帐步骤

  • sh编译步骤

  • Artifactory部署步骤

我实际上希望用Jenkins管道和分片库创建一个“构建块”(在我的例子中为“Build”) .

1 回答

  • 4

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

    Jenkinsfile:

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

    Jenkinsfile:

    import org.prj.MyPipeline
    
    MyPipeline.build(this)
    

相关问题