我可以在Jenkins Declarative管道中“导入”这些阶段

时间:2017-05-31 08:37:06

标签: jenkins jenkins-pipeline

我有几个管道作业,配置非常相似。 它们都有相同的阶段(其中大约有10个阶段)。

我现在正在考虑转移到声明性管道(https://jenkins.io/blog/2016/09/19/blueocean-beta-declarative-pipeline-pipeline-editor/)。

但我不想在每个管道中定义~10个阶段。我想在一个地方定义它们,并以某种方式“导入”它们。

这是否可以使用声明性管道?我看到有库,但似乎我不能使用它们包含舞台定义。

1 个答案:

答案 0 :(得分:1)

您将必须创建一个共享库来实现我将要建议的内容。对于共享库实施,您可以查看以下文章:

Using Building Blocks in Jenkins Declarative Pipeline

Upload file in Jenkins input step to workspace(主要用于图像,这样一来,人们就可以轻松找出问题所在)

现在,如果您想使用一个Jenkinsfile(一种 template ),可以在多个项目(工作)中重用实际上是

一旦您创建了一个带有vars目录的共享库存储库,则只需在vars目录内创建一个Groovy文件(例如commonPipeline.groovy)。

这是一个有效的示例,因为我早些时候在多个作业中使用了它。


$ cat shared-lib/vars/commonPipeline.groovy

// You can create function(s) as shown below, if required
def someFunctionA() {
    // Your code
}

// This is where you will define all the stages that you want
// to run as a whole in multiple projects (jobs)
def call(Map config) {
    pipeline {
        agent {
            node { label 'slaveA || slaveB' }
        }

        environment {
            myvar_Y = 'apple'
            myvar_Z = 'orange'
        }

        stages {
            stage('Checkout') {
                steps {
                    deleteDir()
                    checkout scm
                }
            }

            stage ('Build') {
                steps {
                    script {
                        check_something = someFunctionA()

                        if (check_something) {
                            echo "Build!"
                            # your_build_code
                        } else {
                            error "Something bad happened! Exiting..."
                        }
                    }
                }
            }

            stage ('Test') {
                steps {
                    echo "Running tests..."
                    // your_test_code
                }
            }

            stage ('Deploy') {
                steps {
                    script {
                        sh '''
                            # your_deploy_code
                        '''
                    }
                }
            }
        }
        post {
            failure {
                sh '''
                    # anything_you_need_to_perform_in_failure_step
                ''' 
            }

            success {
                sh '''
                    # anything_you_need_to_perform_in_success_step
                '''
            }
        }
    }
}

有了上述Groovy文件,您现在要做的就是在您的各个Jenkins项目中调用它。由于您的Jenkins项目中可能已经有一个现有的Jenkins文件(如果没有,请创建它),因此您只需用以下内容替换该文件的现有内容:

$ cat Jenkinsfile
// Assuming you have named your shared-library as `my-shared-lib` & `Default version` to `master` branch in 
// `Manage Jenkins` » `Configure System` » `Global Pipeline Libraries` section
@Library('my-shared-lib@master')_

def params = [:]

params=[
    jenkins_var: "${env.JOB_BASE_NAME}",
]

commonPipeline params

注意:如您在上面看到的,我正在调用commonPipeline.groovy文件。因此,您所有庞大的Jenkinsfile文件都将减少为仅五或六行代码,而这几行代码在所有这些项目中也将是 common 。另请注意,我已经在上面使用过jenkins_var。它可以是任何名称。它实际上并没有使用,但是 是管道运行所必需的。一些Groovy专家可以澄清这一部分。

参考:https://www.jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/

相关问题