我希望能夠讓Jenkins通過API對特定提交進行構建。使用Jenkins API構建特定提交
到目前爲止,我能找到的最好方法是使用「api-build」分支,並在那裏強制推送所需的提交,然後以典型的方式觸發構建。如果沒有更好的東西,我會感到驚訝,但到目前爲止我還沒有找到它。什麼是「正確」的方式來做到這一點(如果有的話)?
我希望能夠讓Jenkins通過API對特定提交進行構建。使用Jenkins API構建特定提交
到目前爲止,我能找到的最好方法是使用「api-build」分支,並在那裏強制推送所需的提交,然後以典型的方式觸發構建。如果沒有更好的東西,我會感到驚訝,但到目前爲止我還沒有找到它。什麼是「正確」的方式來做到這一點(如果有的話)?
您可以使用git掛鉤與一起Jenkins遠程構建來完成此操作。
我使用post-receive hook這種類型的東西。
在代碼中的鉤(這是一個shell腳本,但你可以把它包裹別的東西,如的Python腳本),您可以檢查最後一次提交(保持合併在心中,在這如果您不得不返回最後一次非合併提交來查找實際的最後提交),以查看它是否是要在其上觸發構建的提交類型(即包含特定子目錄中的更改)。
的變更可通過標準GIT中命令行工具來獲得,然後正則表達式用於查看是否變更集包含感興趣的任何路徑。
一旦它確定了構建應該被觸發,你可以掏出來捲曲打必要的URL來觸發詹金斯遠程打造(遠程觸發建立需要在工作中啓用,以及可選,令牌集合)。
有關遠程更多信息構建,請參見:響應https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API
編輯從OP評論:
如果使用後收到掛鉤,我相信它會工作,不管什麼分支或承諾(雖然我個人只做大師記住)。它特定於* git r * epo *,因爲後接收掛鉤代碼位於該回購協議內部。您可以通過鉤子代碼來控制,如何根據已更改的內容確定是否要觸發構建。該鉤子代碼將在每個git push下運行。
編輯迴應跟進評論從OP:
我不相信,當沒有變化,這將觸發,如混帳其實不會在這種情況下,一個推動。如果您想要在完全沒有任何更改時觸發構建,則可以使用前面提到的通過API的 - 無論通過curl命令if 遠程構建已在作業中啓用。
在告訴詹金斯建設什麼樣的,即由構建完成的條件>執行shell命令,在那裏你可以指定生成操作,比如運行一個特定的shell腳本,或螞蟻命令等
我不認爲你會想通過鉤子創造新的工作(offhand,我不認爲這實際上是你可以通過API做的事情 - 它適用於現有的工作,IIRC)。
編輯一些額外的信息:
在指定分支建立在其上的條件,在這個時候,我不甚至可以通過一個git鉤任意指定,想。但是,您可以指定多個分支以在Jenkins作業的SCM配置部分中構建。因此,如果你想在每次提交時創建一組分支,那麼你可以在該部分中定義多個分支,然後它將建立在每個分支上(儘管當給定的構建被觸發時,大概只有一個分支會有這個提交)。
它可能是更實際的克隆上詹金斯的工作,每一個分支,它會建立公正的分支,然後將git的鉤可以針對剛剛基礎上提交的分支工作了一把,而不是跨越一大堆分支,其中大多數分支不適用。
雖然不會讓你隨心所欲的分支機構,這將是一個方式做出來了一把,說,主,開發,測試,或類似的規定(或者也許是少數發佈版本)。
如果您確實需要任意分支,您可以使用作業DSL插件(https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin),這應該允許對作業創建進行非常具體的控制。這可以通過調用另一個腳本從git鉤子中完成(DSL使用Groovy)。
我自己並沒有嘗試過這個插件,但它聽起來很有希望。它還有助於使用模板,然後可以指定模板,這聽起來可能對您的案例有好處,分支可能會有所不同,但其他大部分內容會相當靜態。
我需要能夠觸發任意分支上的構建,並且可能是任意提交(儘管通常是最近的)。我見過的配置僅限於在硬編碼分支上構建最新的提交。你知道有沒有辦法解決這個問題? –
添加到答案。 – khampson
「每一個git推送」 - 這是否包括不包含更改的推送?另外,你如何告訴詹金斯*要構建什麼?我確實想到了一個原始問題的另一種方式 - 我可以使用可以控制作業配置的API,但這看起來還是有點怪異的。也許正確的答案是每次創建一個新的工作與後接收掛鉤? –