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

前端 未结 5 692
执念已碎
执念已碎 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 18:57

    First of all, it is a waste of an executor slot to wrap the build step in node. Your upstream executor will just be sitting idle for no reason.

    Second, from a multibranch project, you can use the environment variable BRANCH_NAME to make logic conditional on the current branch.

    Third, the job parameter takes an absolute or relative job name. If you give a name without any path qualification, that would refer to another job in the same folder, which in the case of a multibranch project would mean another branch of the same repository.

    Thus what you meant to write is probably

    if (env.BRANCH_NAME == 'master') {
        build '../other-repo/master'
    }
    
    0 讨论(0)
  • 2020-11-28 19:01

    Use build job plugin for that task in order to trigger other jobs from jenkins file. You can add variety of logic to your execution such as parallel ,node and agents options and steps for triggering external jobs. I gave some easy-to-read cookbook example for that.

    1.example for triggering external job from jenkins file with conditional example:

    if (env.BRANCH_NAME == 'master') {
      build job:'exactJobName' , parameters:[
        string(name: 'keyNameOfParam1',value: 'valueOfParam1')
        booleanParam(name: 'keyNameOfParam2',value:'valueOfParam2')
     ]
    }
    

    2.example triggering multiple jobs from jenkins file with conditionals example:

     def jobs =[
        'job1Title'{
        if (env.BRANCH_NAME == 'master') {
          build job:'exactJobName' , parameters:[
            string(name: 'keyNameOfParam1',value: 'valueNameOfParam1')
            booleanParam(name: 'keyNameOfParam2',value:'valueNameOfParam2')
         ]
        }
    },
        'job2Title'{
        if (env.GIT_COMMIT == 'someCommitHashToPerformAdditionalTest') {
          build job:'exactJobName' , parameters:[
            string(name: 'keyNameOfParam3',value: 'valueOfParam3')
            booleanParam(name: 'keyNameOfParam4',value:'valueNameOfParam4')
            booleanParam(name: 'keyNameOfParam5',value:'valueNameOfParam5')
         ]
        }
    }
    
    0 讨论(0)
  • 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
                        }
                    }
                }
        }
    
    0 讨论(0)
  • 2020-11-28 19:04

    In addition to the above mentioned answers: I wanted to start a job with a simple parameter passed to a second pipeline and found the answer on http://web.archive.org/web/20160209062101/https://dzone.com/refcardz/continuous-delivery-with-jenkins-workflow

    So i used:

    stage ('Starting ART job') {
        build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]]
    }
    
    0 讨论(0)
  • 2020-11-28 19:14

    The command build in pipeline is there to trigger other jobs in jenkins.

    Example on github

    The job must exist in Jenkins and can be parametrized. As for the branch, I guess you can read it from git

    0 讨论(0)
提交回复
热议问题