Jenkins pipeline template

后端 未结 2 860
余生分开走
余生分开走 2020-12-01 18:24

We have several Java projects. Each project has its own delivery pipeline.

All pipelines have the following steps in common (simplified):

  • Build project
2条回答
  •  长情又很酷
    2020-12-01 18:58

    An approach that works well for us is to put parts of the pipeline (those that all projects have in common) or even the whole pipeline into a Jenkins shared library.

    Example

    The following script (template.groovy) is defined as global variable in a Jenkins shared library. The method creates a new declarative pipeline (it also works for scripted pipeline syntax). All project specific properties are provided via the templateParams map.

    /**
     * Defines a pipeline template (as a sample with one job parameter 
     * that should be common for all pipelines)
     */
    def createMyStandardDeclarativePipeline(Map templateParams) {   
    
        pipeline {
            agent any
            parameters {
                string(name: 'myInput', description: 'Some pipeline parameters')
            }
            stages {
                stage('Stage one') {
                    steps {
                        script {
                            echo "Parameter from template creation: " + templateParams.someParam
                        }
                    }
                }
                stage('Stage two') {
                    steps {
                        script {
                            echo "Job input parameter: " + params.myInput
                        }
                    }
                }
            }
        }
    }
    

    Using this global variable, the following line creates a pipeline from our template:

    template.createMyStandardDeclarativePipeline(someParam: 'myParam')
    

    Conclusion

    This concept makes it easy to define pipeline templates and reuse them in several projects.

    Applied on the example given in the question, you can create a delivery pipeline for a project with a simple one-liner:

    template.createStandardDeliveryPipeline(serviceName: 'myService', 
                                            testEnv: '192.168.99.104', 
                                            productionEnv: '192.168.99.105')
    

    Update (30-09-2017): Declaring a pipeline block in a shared library is now officially supported with Declarative Pipelines version 1.2 . See: https://jenkins.io/doc/book/pipeline/shared-libraries/#defining-declarative-pipelines


    Update (06-10-2017): An extended example can now be found here: https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/

提交回复
热议问题