it-swarm.com.de

Wie kann ich mit GitHub Org Plugin einen anderen Job aus einer Jenkins-Pipeline (jenkinsfile) auslösen?

Wie kann ich den Build eines anderen Jobs in Jenkinsfile auslösen?

Ich gehe davon aus, dass dieser Job ein weiteres Repository unter derselben Github-Organisation ist, das bereits über eine eigene Jenkins-Datei verfügt.

Ich möchte dies auch nur tun, wenn der Filialname master ist, da es keinen Sinn macht, Downstream-Builds von lokalen Filialen auszulösen.

Aktualisieren:

stage 'test-downstream'
node {
     def job = build job: 'some-downtream-job-name'
}

Trotzdem erhalte ich bei der Ausführung einen Fehler

Es wurde kein parametrisierter Job mit dem Namen some-downtream-job-name gefunden

Ich bin sicher, dass dieser Job in Jenkins vorhanden ist und sich unter demselben Organisationsordner befindet wie der aktuelle. Es ist ein weiterer Job, der sein eigenes Jenkinsfile hat.

Bitte beachten Sie, dass diese Frage spezifisch für das GitHub Organization Plugin ist, das Jobs für jedes Repository und jeden Zweig von Ihrer GitHub Organization automatisch erstellt und verwaltet.

108
sorin

Zuallererst ist es eine Verschwendung eines Executor-Slots, den Schritt build in node einzuschließen. Ihr Upstream-Executor wird ohne Grund nur untätig sitzen.

Zweitens können Sie in einem Mehrbranchenprojekt die Umgebungsvariable BRANCH_NAME verwenden, um die Logik von der aktuellen Verzweigung abhängig zu machen.

Drittens erhält der Parameter job einen absoluten oder relativen Jobnamen. Wenn Sie einen Namen ohne Pfadangabe angeben, verweist dies auf einen anderen Job im selben Ordner, was im Fall eines Projekts mit mehreren Zweigen einen anderen Zweig desselben Repositorys bedeuten würde.

Also was du schreiben wolltest ist wahrscheinlich

if (env.BRANCH_NAME == 'master') {
    build '../other-repo/master'
}
113
Jesse Glick

Zusätzlich zu den oben genannten Antworten: Ich wollte einen Job mit einem einfachen Parameter starten, der an eine zweite Pipeline übergeben wurde, und fand die Antwort unter https://dzone.com/refcardz/continuous-delivery-with-jenkins- Workflow .

Also habe ich benutzt:

stage ('Starting ART job') {
    build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]]
}
95
FrankIJ

Der Befehl build in der Pipeline ist dazu da, andere Jobs in Jenkins auszulösen.

Beispiel auf Github

Der Job muss in Jenkins existieren und kann parametrisiert werden. Was den Zweig angeht, ich denke, Sie können lesen Sie es aus git

20
Flo

Sie können den Schritt build job aus Jenkins-Pipeline (Mindestanforderung für Jenkins: 2.130) verwenden.

Hier ist die vollständige API für den Schritt build: https://jenkins.io/doc/pipeline/steps/pipeline-build-step/

Wie benutzt man build:

  • job: Name eines zu erstellenden Downstream-Jobs. Kann ein anderer Pipeline-Job sein, aber häufiger ein Freestyle- oder ein anderes Projekt.
    • Verwenden Sie einfacher Name, wenn sich der Job im gleichen Ordner wie dieser Upstream-Pipeline-Job befindet;
    • Sie können stattdessen relative Pfade wie ../sister-folder/downstream verwenden.
    • Oder Sie können absolute Pfade wie /top-level-folder/nested-folder/downstream verwenden.

Lösen Sie einen anderen Job aus, indem Sie einen Zweig als Parameter verwenden

In meiner Firma sind viele unserer Niederlassungen "/". Sie müssen alle Instanzen von "/" durch "% 2F" ersetzen (wie in der URL des Jobs angegeben).

In diesem Beispiel verwenden wir relative Pfade

    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
            }
        }
    }

Lösen Sie einen anderen Job mit der Build-Nummer als Parameter aus

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))
    ]

Lösen Sie mehrere Jobs gleichzeitig aus

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

Weitere Informationen zu Parallel finden Sie hier: 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)
        }
    }

Oder alternativ:

    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
                    }
                }
            }
    }
3
Katie

Sie können Ihrer Ausführung eine Reihe von Logikoptionen hinzufügen, z. B. Parallel-, Knoten- und Agentenoptionen sowie Schritte zum Auslösen externer Jobs. Ich habe dafür ein einfach zu lesendes Kochbuchbeispiel gegeben.

1.Beispiel für das Auslösen eines externen Jobs aus einer Jenkins-Datei mit bedingtem Beispiel:

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

2.Beispiel für das Auslösen mehrerer Jobs aus der Jenkins-Datei mit Bedingungsbeispiel:

 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')
     ]
    }
}
2
avivamg