2016-03-30 36 views
2

我使用github組織插件來管理github的jenkins作業,但我發現Jenkins API不報告這些構建。如何以編程方式觸發通過Github組織管理的特定jenkins構建?

實際上,API將整個組織列爲單個作業。

如何使用API​​構建特定的存儲庫和分支?

需要明確的是,我在尋找一些Groovy代碼到Jenkinsfile

#!groovy 

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

現在裏面添加,問題是,詹金斯是看到整個組織作爲一個單一的工作!

如果我使用Jenkins API檢索作業,它將只返回組織,而不是所有的存儲庫和作業。

我懷疑這是因爲這個插件的實現方式,我想我需要給一些額外的參數來指定我想在組織內構建哪個存儲庫和分支....構建一個組織不會使很有道理。

+1

你能否澄清一下,你用這個[github上組織文件夾,插件(https://github.com/jenkinsci/github-organization-folder-plugin),並希望手動觸發其中的一個由Jenkinsfile創建的作業?另外,如果您嘗試通過[url](https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API)通過已創建作業的作業名稱觸發它,您是否嘗試過?然後你只需要找出與Jenkinsfile Pipeline的工作命名約定。 –

+0

可悲的是我嘗試使用'acme/job/foo/job/master'作爲工作名稱,但得到了'沒有參數化的工作,名爲acme/job/foo/job/master found',這告訴我可能它並沒有將這些作爲真實工作。 – sorin

+1

檢查'http:// 上的內容:/api/xml' –

回答

4

這個問題很模糊,但我猜測在這個上下文中的「API」意味着REST API來觸發構建。您可以使用例如

curl -X POST -u user:apitoken http://jenkins/job/yourorg/job/yourrepo/job/master/build 
+0

雖然這不是很理想,但如果我無法找到一個常規,它可能會工作。當Jenkinsfile執行應該已經可以訪問Jenkins api時,我仍然不希望從這裏處理API令牌問題。 – sorin

+0

那麼也許你是在問一些完全不同的東西,而這僅僅是一個重複的東西:http://stackoverflow.com/questions/36306883/how-can-i-trigger-another-job-from-a-jenkins-pipeline- jenkinsfile –

0

以下代碼通過System Groovy構建步驟觸發作業。請注意,系統groovy總是在master上運行,因此從前面的構建步驟傳遞信息可能會非常棘手。

import jenkins.model.* 
import hudson.model.* 
import java.util.concurrent.* 

def run_job(job_name) { 
    def currentBuild = Thread.currentThread().executable 
    def jenkins = jenkins.model.Jenkins.getInstance(); 

    def job = jenkins.getItemByFullName(job_name); 
    if (job == null) 
     throw new hudson.AbortException("Cannot find job:" + job_name); 

    def params =[ 
    new StringParameterValue('PARAMETER1', "invoke 1 param1"), 
    new StringParameterValue('PARAMETER2', ",invoke 1 param2") 
    ] 

    def paramsAction = new ParametersAction(params) 
    def cause = new hudson.model.Cause.UpstreamCause(currentBuild) 
    def causeAction = new hudson.model.CauseAction(cause)  

    def future_build = job.scheduleBuild2(0,causeAction,paramsAction); 
    def running_build = future_build.waitForStart() 
    return running_build 
} 

run_job("runner1") 
相關問題