簡體   English   中英

如何使用 GitHub Org 插件從 jenkins 管道(jenkinsfile)觸發另一個作業?

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

如何從Jenkinsfile內部觸發另一個作業的Jenkinsfile

我假設這個工作是同一個github 組織下的另一個存儲庫,一個已經擁有自己的 Jenkins 文件的存儲庫。

我也想僅當分支名稱是 master 時才這樣做,因為觸發任何本地分支的下游構建沒有意義。

更新:

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

盡管如此,執行時我收到一個錯誤

未找到名為 some-downtream-job-name 的參數化作業

我確信這份工作存在於 jenkins 中,並且與當前工作在同一組織文件夾下。 這是另一個擁有自己的Jenkinsfile

請注意,此問題特定於GitHub 組織插件,該插件為您的 GitHub 組織的每個存儲庫和分支自動創建和維護作業。

除了上面提到的答案:我想用傳遞給第二個管道的簡單參數開始一項工作,並在http://web.archive.org/web/20160209062101/https://dzone.com/上找到了答案refcardz/持續交付與詹金斯工作流

所以我用:

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

首先,將build步驟包裝在node是浪費執行器槽。 您的上游執行程序將無緣無故地閑置。

其次,從多分支項目中,您可以使用環境變量BRANCH_NAME使邏輯以當前分支為條件。

第三, job參數采用絕對或相對作業名稱。 如果您提供一個沒有任何路徑限定的名稱,那將指代同一文件夾中的另一個作業,在多分支項目的情況下,這意味着同一存儲庫的另一個分支。

因此你想寫的可能是

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

您可以使用Jenkins Pipeline 中build job步驟(最低 Jenkins 要求:2.130)。

這是build步驟的完整 API: https : //jenkins.io/doc/pipeline/steps/pipeline-build-step/

如何使用build

  • job :要構建的下游作業的名稱。 可能是另一個流水線工作,但更常見的是自由泳或其他項目。
    • 如果作業與此上游流水線作業位於同一文件夾中,請使用簡單名稱
    • 您可以改用相對路徑,例如../sister-folder/downstream
    • 或者您可以使用絕對路徑,/top-level-folder/nested-folder/downstream

使用分支作為參數觸發另一個作業

在我公司,我們的許多分支機構都包含“/”。 您必須用“%2F”替換“/”的任何實例(因為它出現在作業的 URL 中)。

在這個例子中,我們使用相對路徑

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

使用內部版本號作為參數觸發另一個作業

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

並行觸發多個作業

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

有關 Parallel 的更多信息,請訪問: 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)
        }
    }

或者:

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

管道中的命令build用於觸發 jenkins 中的其他作業。

github上的例子

該作業必須存在於 Jenkins 中並且可以進行參數化。 至於分支,我猜你可以從 git 中讀取它

為該任務使用構建作業插件以觸​​發 jenkins 文件中的其他作業。 您可以向執行添加各種邏輯,例如並行、節點和代理選項以及用於觸發外部作業的步驟。 我為此提供了一些易於閱讀的食譜示例。

1. 使用條件示例從 jenkins 文件觸發外部作業的示例:

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

2.example 使用條件從 jenkins 文件觸發多個作業示例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM