Jenkins -在共享库中为使用共享库的所有管线设置选项

6yt4nkrj  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(154)

我有一堆存储库,它们使用(部分)相同的Jenkins共享库来运行测试、Docker构建等。到目前为止,共享库大大降低了这些存储库的维护成本。
然而,事实证明,基本上所有管道都使用相同的选项集,例如:

@Library("myExample.jenkins.shared.library") _
import org.myExample.Constants

pipeline {
    options {
        disableConcurrentBuilds()
        parallelsAlwaysFailFast()
    }

    agent {
        label 'my-label'
    }

    stages {
        stage {
            runThisFromSharedLibrary(withParameter: "foo")
            runThatFromSharedLibrary(withAnotherParameter: "bar")
            ...

...

换句话说,我需要在我创建的任何新的特定管道中复制和粘贴相同的选项片段。另外,这意味着当我决定更改选项集时,我需要单独编辑每个Jenkinsfile(以及我们内部使用的任何同行评审过程)。
我非常希望以某种方式消除这种维护开销。我如何将选项设置委托给一个共享库,或者同时为所有管道配置所需的选项?

ssgvzors

ssgvzors1#

有两个选项对您帮助最大:

*在主/代理级别使用全局变量。

1.请转到Jenkins--〉管理Jenkins--〉配置系统--〉全局属性。
1.选中环境变量框,然后为变量添加名称和值;
那么你将能够在你的Jenkins管道中正常使用它,如下代码片段所示。

*将整个管道 Package 在共享库内的函数中
Jenkinsfile将如下所示:

@Library('shared-library') _
customServicePipeline(agent: 'staging',
        timeout: 3,
        server:'DEV')

共享库函数

// customServicePipeline.groovy  

def call(Map pipelineParams = [:]) {
    pipeline {
        agent { label "${pipelineParams.agent}" }
        tools {
            maven 'Maven-3.8.6'
            jdk 'JDK 17'
        }
        options {
            timeout(time: "${pipelineParams.timeout}", unit: 'MINUTES')
        }
        stages {
            stage('Prep') {
                steps {
                  echo 'prep started'
                  pingServer(pipelineParams.get("server"))
                }
            }
        }
    }
}

相关问题