Jenkins:是否可以从其他文件导入管道阶段

问题描述 投票:0回答:1

我有一个用例,其中我有多个管道,但每个管道在每个阶段运行相同的代码,唯一的区别是有些将运行所有阶段,有些将运行很少的阶段。
如果我创建单独的 Jenkinsfile 具有相同的阶段代码,并且如果有一天我更改配置,我将不得不在所有地方进行更改。
那么是否可以在单独的文件中创建

stage
作为共享库,然后将它们导入到特定于管道的 Jenkinsfile 中?
例如,如果我有一个 pipeline-1 运行所有阶段 A、B 和 C
Pipeline-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()
    }
}

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

jenkins jenkins-pipeline jenkins-groovy
1个回答
0
投票

因此,您基本上希望将整个阶段提取到一个单独的文件中,并从共享库中使用它。可以将整个阶段提取到共享库中,但是使用声明性管道会变得非常复杂。另一方面,脚本化管道允许您以非常简单的方式完成此操作。这里有一个非常详细的答案,它详细介绍了如何使用这两种类型的管道来完成您想要的事情。对于脚本化管道,解决方案是创建一个包含所需阶段的类,然后通过该类引用该阶段,如下所示: node { new ScriptedStage(this).execute('Foo', true) }

请参阅前面提到的答案以获取更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.