2017-03-20 162 views
1

我正在學習詹金斯。有人能告訴我,如果我的理解是正確的嗎?詹金斯構建和部署

構建應用程序:

  • 我承諾我的代碼,並把我支到我的遠程倉庫。
  • Jenkins看到我的提交併觸發了構建(可能使用maven安裝)。
  • 詹金斯運行所有測試,如果全部通過,則會創建戰爭/耳朵。這種人爲現象被推向聯繫。

要部署到環境:

  • 一個部署腳本在我的分支包含步驟來部署應用程序,比方說,Tomcat的。 Jenkins去Nexus,檢索最新的artefact(上面構建),並將這個應用程序部署到Tomcat。
  • 部署文件中的其他步驟根據需要關閉並重新啓動Tomcat,可能進行測試以確保應用程序已啓動並準備好爲請求提供服務。

我是否正確地說,部署不需要構建最新的人造物,它使用推到Nexus的最後一個,還是每個部署都構建的新部件?

+0

快速解釋 - 你創建一個PR - > Jenkins運行所有測試 - >合併PR按鈕可用於審閱者如果構建成功 - > PR獲取合併 - >快照獲取生成nexus->現在你測試快照在UATE或者如果功能測試良好的話,可以預先生成 - >然後將釋放切換到聯結。 – Shek

+0

取決於您的案例,也許您正在使用Maven或Gradle構建您的項目。這些工具已經有部署在nexus上的任務,可以使用/ target路徑上生成的實際工件將工件部署到生產環境中。 – CleitonCardoso

+0

新構建僅在新的成功PR合併時生成。 – Shek

回答

1

這一切都是根據你如何在Jenkins和/或git上建立你的構建。

Jenkins可以配置爲監視您的存儲庫(簡稱repo),並在檢測到更改時啓動構建。

Jenkins可以配置爲運行構建。您提供了Maven命令行參數;詹金斯只是編排你給它的命令。

您提供Jenkins的一些步驟將是shell代碼。這就是你如何運行定製shell腳本,比如說訪問Nexus。事情不會自行發生;如果您告訴Jenkins部署工件,比如說使用Maven,那麼Jenkins將按照您的要求調用部署指令。

應用程序部署譴責啓動,重新啓動或關閉服務器(Tomcat)的責任非常不規範。當然,這可以通過Jenkins來完成,但它的應用程序部署應該具有更高的「薪酬等級」。把事情簡單化;如果您的Jenkins版本正在管理用於測試和部署的應用程序,請將其重點放在應用程序上,而不要放在服務器上。

詹金斯是神奇的,但它不是一個心靈讀者。除非你告訴它,它不會做你說的任何事情。也就是說,你所描述的過程是合理的,無論你用什麼工具來制定它。詹金斯當然可以做這些事情,如果你相應地設置它。

+0

我的項目中有一個deploy.sh文件。這包含構建和部署代碼的步驟。我猜詹金斯讀這個文件。但是Maven在哪裏進入它? – TheCoder

+0

您可以執行maven,gradle,ant任務或/並且您可以運行執行大量任務的shell腳本。你的deploy.sh可以完全獨立於maven。 – 7663233

+0

詹金斯是Maven意識到與正確的插件。我不會將所有內容都塞進一個'deploy.sh'腳本中。讓詹金斯爲你處理一些樣板。 –

0

總的來說,你是對的。

詹金斯可以量身定製基本上做任何事情(在合理範圍內)。有很多東西可以配置。 作業可以通過手動輪詢存儲庫來啓動,通過鉤子和計時器。例如,許多工作場所不再採用舊的輪詢策略,而是使用新的git-hooks。Jenkins可以執行啓動/停止應用程序服務器的shell腳本,但正如前面的海報所寫,最好讓Jenkins簡單一些,專注於擅長什麼,運行測試工作,構建東西,部署東西。讓其他人處理服務器。

+0

讓其他人處理服務器 - 誰? – TheCoder

+1

你知道,有時你寫東西,你意識到這看起來很奇怪。添加您的評論讓我更深入地瞭解我們的構建系統。唉,我們的Jenkins工作停止我們的服務部署工件,然後再次啓動服務。所以我在這裏做了180分鐘:)所以謝謝你的問題:) – 7663233