'Include' a shared library pipeline in other pipelines in the same shared library

20 views
Skip to first unread message

Kaliyug Antagonist

unread,
Sep 30, 2019, 3:35:30 AM9/30/19
to Jenkins Users

I have several microservices which use the same pipeline from a shared library which is named jenkins-shared-pipelines . The Jenkinsfile for a microservice is as follows:

@Library(['jenkins-shared-pipelines']) _

gradleProjectPrPipeline([buildAgent: 'oc-docker-jdk11', disableIntegrationTestStage: true])

In jenkins-shared-pipelines/vars, the gradleProjectBranchWrapper has the following stages:

/**
 * gradleProjectPrPipeline is a generic pipeline
 * @param pipelineProperties map used to pass parameters
 * @return
 */
void call(Map pipelineProperties = [:]) {
            .
            .
            .

    pipeline {
        agent {
            node {
                label "${pipelineProperties.buildAgent}"
            }
        }

        options {
            skipDefaultCheckout true
            timeout(time: 1, unit: 'HOURS')
            buildDiscarder(logRotator(
                    numToKeepStr: '5',
                    daysToKeepStr: '7',
                    artifactNumToKeepStr: '1',
                    artifactDaysToKeepStr: '7'
            ))
        }

        stages {
            stage('Clone') {                
                steps {
                    //clone step
                }
            }
            stage('Compile') {                
                steps {
                    script {
                       /*Some custom logic*/
                    }
                    runGradleTask([task: 'assemble',
                                   rawArgs: defaultGradleArgs + " -Pcurrent_version=${releaseTag}"
                    ])
                }
            }
            stage('Tests') {
                parallel {
                    stage('Unit tests') {                        
                        steps {
                            //Unit tests
                        }
                    }
                    stage('Integration tests') {                        
                        steps {
                            //Integration tests
                        }
                    }
                }
            }
            stage('Sonar scan') {                
                steps {
                    //Sonar scanning
                }
            }            
        }

        post {

            unsuccessful {
                script {
                    bitbucketHandler.notifyBuildFail([
                        displayName: pipelineName,
                        displayMessage: "Build ${env.BUILD_ID} failed at ${env.BUILD_TIMESTAMP}."
                    ])
                }
            }
            success {
                script {
                    bitbucketHandler.notifyBuildSuccess([
                        displayName: pipelineName,
                        displayMessage: "Build ${env.BUILD_ID} completed at ${env.BUILD_TIMESTAMP}."
                    ])
                }
            }
        }
    }
}

Now, there will be several more pipelines in jenkins-shared-pipelines(under the same vars directory) e.g: awsPipeline, azurePipeline and so on which will also incorporate the deployment stages. These pipelines will require all the stages in the above gradleProjectBranchWrapper and will also add a few of their own stages. Currently, we simply copy-paste these stages in the new pipelines, then, we invoke these new pipelines from the microservices, so for example:

@Library(['jenkins-shared-pipelines']) _

awsPipeline([buildAgent: 'oc-docker-jdk11', disableIntegrationTestStage: true])

I was wondering if there is a way to include the gradleProjectBranchWrapper in the pipelines like awsPipeline, azurePipeline and so on. Note: There is a post block in the gradleProjectBranchWrapper, the other pipelines may have their own post blocks

Message has been deleted

Kaliyug Antagonist

unread,
Sep 30, 2019, 4:42:18 AM9/30/19
to Jenkins Users

Note:

  • The workspace(where the clone stag checks out the code and later stages operate) will be used by awsPipeline etc. In other words, the variables and results from the gradleProjectBranchWrapper should be accessible to the awsPipeline etc.
  • There is a post block in the gradleProjectBranchWrapper, the other pipelines may have their own post blocks

ZillaYT

unread,
Oct 3, 2019, 1:31:25 PM10/3/19
to Jenkins Users
Reply all
Reply to author
Forward
0 new messages