2011-04-28 77 views
109

有人請向我解釋文物在構建過程中的想法嗎?在Jenkins存檔文物

我有工作空間目錄,我檢查了編譯和運行我的ant腳本等的代碼。最後,在我的情況下,我得到一個準備好安裝的jar文件。這被認爲是神器嗎?

我應該在哪裏告訴我的構建腳本放置jar文件?在工作區目錄中?我的jar文件得到一個唯一的文件名取決於像BUILD_ID等變量,我怎麼能告訴詹金斯選擇哪個jar文件?

編輯: 好了,所以我試圖做這樣的事情:

enter image description here

的路徑並不在我的工作空間存在,因爲構建腳本應該來創建它,當然, .jar.properties文件不存在,因爲它們尚未生成。爲什麼它會給我一個錯誤呢?似乎我錯過了一些東西。

此外,詹金斯是否刪除每個構建後的工件(不歸檔的文物,我知道我可以告訴它刪除這些)?否則它會很快堵塞硬盤。

+11

你得到的錯誤是最有可能不是一個問題 - 如果構建過程是成功的,它應該被創建。保存並嘗試一下,在設置管道時有一些破損的構建是完全正常的。 :) – 2011-04-28 16:28:39

+3

不要被這個警告嚇倒,如果一個構件在構建之後生成,它將被你的配置歸檔(雖然在配置頁面有一個警告)。 – 2012-02-04 08:11:20

回答

56

您的理解是正確的,Jenkins意義上的工件是構建的結果 - 構建過程的預期輸出。

一個常見的約定是將構建結果放入build,targetbin目錄中。

Jenkins存檔器可以使用球體(target/*.jar)輕鬆拾取正確的文件,即使每個版本都有唯一的名稱。

+0

@安德雷謝謝,還有,詹金斯是否刪除每個構建後的工件(不是存檔的工件,我知道我可以告訴它刪除那些)?還是我有責任做到這一點myslef? – Michael 2011-04-28 16:33:42

+6

@michael:您必須自己清理工作區,在每次構建之前清除至少目標目錄是確保最終不會產生早期構建結果的良好實踐。 – 2011-04-28 16:44:02

+0

@Michael你可以添加一個'clean'構建步驟。例如。使用Maven - 'sh'mvn clean package'' – Snowcrash 2017-02-27 11:43:07

9

工件可以是您的構建過程的任何結果。重要的是,它建立在哪個客戶端上並不重要,它將從工作區轉移回主(服務器),並通過指向構建的鏈接存儲在那裏。優點是它通過這種方式進行版本化,即使所有構建客戶端都處於脫機狀態,您也只需在主服務器上設置備份,並且所有工件均可通過Web界面訪問。

可以將正則表達式定義爲工件名稱。在我的情況下,我在構建過程中將所有想存儲的文件壓縮到一個具有常量名稱的文件中。

+1

「可以將正則表達式定義爲工件名稱,在我的情況下,我壓縮了所有文件」您能解釋一下嗎?這聽起來正是我想要的? – 2014-06-18 10:59:37

7

另外,詹金斯每次構建後刪除工件? (未歸檔的文物,我知道我可以告訴它刪除那些)

沒有,哈得遜/詹金斯不,本身,清除積聚後的工作區。在構建過程中,您可能會執行一些操作,從您離開的位置擦除,覆蓋或移動構建工件。在作業配置中有一個選項,在高級項目選項中(必須展開),稱爲「構建之前的清理工作區」,它將在新構建開始時擦除工作區。

0

在Jenkins 2.60.3中,有一種方法可以刪除構建工件(而不是存檔工件),以節省構建機器上的硬盤驅動器空間。在常規部分中,選擇「放棄舊版本」,並選擇策略「日誌旋轉」,然後進入其高級選項。根據天數或構建數量,將出現另外兩個與保留作業構建工件相關的選項。

對我而言,這些設置對於「最大編號與工件保持一致」輸入1,然後使用生成後操作對工件進行歸檔。這樣,所有構建中的所有構件都將被存檔,構建的所有信息都將被保存,但只有最後一個構建纔會保留其自己的構件。

Discard old builds options