How can I trigger another job from a jenkins pipeline (jenkinsfile) with GitHub Org Plugin?

前端 未结 5 722
执念已碎
执念已碎 2020-11-28 18:38

How can I trigger build of another job from inside the Jenkinsfile?

I assume that this job is another repository under the same github organization, on

5条回答
  •  心在旅途
    2020-11-28 19:03

    You can use the build job step from Jenkins Pipeline (Minimum Jenkins requirement: 2.130).

    Here's the full API for the build step: https://jenkins.io/doc/pipeline/steps/pipeline-build-step/

    How to use build:

    • job: Name of a downstream job to build. May be another Pipeline job, but more commonly a freestyle or other project.
      • Use a simple name if the job is in the same folder as this upstream Pipeline job;
      • You can instead use relative paths like ../sister-folder/downstream
      • Or you can use absolute paths like /top-level-folder/nested-folder/downstream

    Trigger another job using a branch as a param

    At my company many of our branches include "/". You must replace any instances of "/" with "%2F" (as it appears in the URL of the job).

    In this example we're using relative paths

        stage('Trigger Branch Build') {
            steps {
                script {
                        echo "Triggering job for branch ${env.BRANCH_NAME}"
                        BRANCH_TO_TAG=env.BRANCH_NAME.replace("/","%2F")
                        build job: "../my-relative-job/${BRANCH_TO_TAG}", wait: false
                }
            }
        }
    

    Trigger another job using build number as a param

    build job: 'your-job-name', 
        parameters: [
            string(name: 'passed_build_number_param', value: String.valueOf(BUILD_NUMBER)),
            string(name: 'complex_param', value: 'prefix-' + String.valueOf(BUILD_NUMBER))
        ]
    

    Trigger many jobs in parallel

    Source: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/

    More info on Parallel here: https://jenkins.io/doc/book/pipeline/syntax/#parallel

        stage ('Trigger Builds In Parallel') {
            steps {
                // Freestyle build trigger calls a list of jobs
                // Pipeline build() step only calls one job
                // To run all three jobs in parallel, we use "parallel" step
                // https://jenkins.io/doc/pipeline/examples/#jobs-in-parallel
                parallel (
                    linux: {
                        build job: 'full-build-linux', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
                    },
                    mac: {
                        build job: 'full-build-mac', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
                    },
                    windows: {
                        build job: 'full-build-windows', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
                    },
                    failFast: false)
            }
        }
    

    Or alternatively:

        stage('Build A and B') {
                failFast true
                parallel {
                    stage('Build A') {
                        steps {
                                build job: "/project/A/${env.BRANCH}", wait: true
                        }
                    }
                    stage('Build B') {
                        steps {
                                build job: "/project/B/${env.BRANCH}", wait: true
                        }
                    }
                }
        }
    

提交回复
热议问题