Jenkins:可以从其他文件导入流水线阶段吗

hiz5n14c  于 2023-10-17  发布在  Jenkins
关注(0)|答案(1)|浏览(131)

我有一个用例,其中我有多个管道,但每个管道在每个阶段运行相同的代码,唯一的区别是有些会运行所有阶段,有些会运行一些阶段。
如果我创建了单独的Jenkinsfile,其中包含相同的阶段代码,如果有一天我更改了配置,我将不得不更改所有地方。
那么,是否可以在单独的文件中创建stage作为共享库,然后将它们导入到特定于管道的Jenkinsfile中?
例如,如果我有一个流水线1,它运行所有 * 阶段A、B和C*。
管道2仅运行 * 阶段B*。
并且流水线运行 * 阶段A和C*。
我可以创建3个单独的文件:
A.groovy

stage('A') {
    steps {
        //something
    }
}

B.groovy

stage('B') {
    steps {
        //something
    }
}

C.groovy

stage('C') {
    steps {
        //something
    }
}

因此,在Pipeline-1 Jenkinsfile中,我可以用途:

pipeline {
    agent any      
    stages {
        import A
        A.call()
        import B
        B.call()
        import C
        C.call()
    }
}

等等。我知道上面的语法是不正确的,它只是为了解释需要做什么。

pepwfjgg

pepwfjgg1#

因此,您基本上希望将整个舞台提取到一个单独的文件中,并从共享库中使用它。可以将整个阶段提取到共享库中,但使用声明性管道会变得非常复杂。另一方面,脚本管道允许您以非常简单的方式完成此操作。有一个非常详细的答案here,它详细介绍了如何使用这两种类型的管道来完成您想要的任务。在脚本管道的情况下,解决方案是创建一个类,其中包含您想要的阶段,然后通过类引用阶段,如下所示:

node {
    new ScriptedStage(this).execute('Foo', true)
}

参考前面提到的答案以获得更多信息。

相关问题