Jenkins:部署JEE工件

隨著持續集成持續交付的出現 ,我們的構建被分為不同的步驟,以創建部署管道。 這些步驟中的一些步驟可以是例如編譯和運行快速測試,運行慢速測試,運行自動驗收測試或發布應用程序等。

部署流程的最后一步意味著將我們的產品(如果是JEE項目,則是戰爭耳朵 )部署到類似生產的環境,用于UAT或在產品發布時部署到生產系統。
在本文中,我們將了解如何配置Jenkins來正確管理Java Enterprise Application的部署。

要做的就是創建應用程序,在這種情況下,在Java中一個非常簡單的Web應用程序的第一件事情(其實只有一個JSP它打印一個Hello World!消息)和mavenize它來創建一個war文件(bar.war)時, 目標已執行。

然后,我們需要創建一個Jenkins作業(稱為bar-web ),該作業負責編譯和運行單元測試。

完成此工作后,將進行其他工作,例如運行集成測試,運行更多測試,靜態代碼分析(即代碼質量)或將工件上傳到工件存儲庫,但此處不會顯示。
最后,最后一步意味著將先前生成的代碼部署到暫存環境(例如,用于運行用戶驗收測試 ),并在關鍵用戶同意后將其部署到生產環境。
因此,讓我們看看如何在Jenkins中創建這些最終步驟。 請注意,在所有這些步驟中必須使用在先前步驟中創建的二進制文件(在本例中為bar-web )。 這是由于兩個原因,第一個原因是您的部署管道應盡可能快地運行,并且顯然在每個步驟中編譯代碼并不是獲得代碼的最佳方法,第二個原因是每次您編譯源代碼時,增加了不被編譯為先前步驟的來源的機會。 為了實現此目標,我們可以遵循兩種策略,第一種是將二進制文件上傳到工件存儲庫(例如NexusArtifactory ),然后在每個作業中從那里獲取。 第二個是使用復制工件 Jenkins插件來獲取上一步生成的二進制文件。

讓我們看看如何為第一種方法配置Jenkins

使用工件存儲庫方法,要求您從存儲庫下載我們要部署的版本,然后將其部署到外部環境; 在我們的案例中,部署到Web服務器。 所有這些步驟都是通過使用maven-cargo-plugin完成的

<build><plugins><plugin><groupId>org.codehaus.cargo<groupId><artifactId>cargo-maven2-plugin<artifactId><version>1.0<version><!-- Container configuration --><container><containerId>tomcat6x<containerId><type>remote<type><container><configuration>          <type>runtime<type><properties><cargo.remote.username>admin<cargo.remote.username><cargo.remote.password><cargo.remote.password><cargo.tomcat.manager.url>http:localhost:8888manager<cargo.tomcat.manager.url><properties><configuration><deployer><deployables><deployable><groupId>com.lordofthejars.bar<groupId><artifactId>bar-web<artifactId><type>war<type><deployable><deployables><deployer><plugin><plugins><build><dependencies><dependency><groupId>com.lordofthejars.bar<groupId><artifactId>bar-web<artifactId><type>war<type><version>${target.version}<version><dependency><dependencies>

然后,我們只需要創建一個名為bar-to-staging的新Jenkins作業即可運行cargo:redeploy Maven目標,而Cargo插件將負責將bar-web部署到Web服務器。

這種方法有一個優點和一個缺點。 主要優點是您不必局限于Jenkins ,可以單獨使用Maven ,也可以使用任何其他支持Maven的 CI 。 主要缺點是依賴于artefacts存儲庫,并且此計劃是一個新問題,部署管道涉及許多步驟,并且在這些步驟之間(通常,如果您正在構建快照版本),可以將新的artefact上傳到具有相同版本的artefacts存儲庫,并在管道執行過程中使用它。 當然,可以通過在人工制品存儲庫中管理權限來避免這種情況。

另一種方法是使用Jenkins插件,稱為copy-artifact-plugin 。 在這種情況下, 詹金斯(Jenkins)充當人工制品存儲庫,因此在下一步中使用在上一步中創建的工件,而無需涉及任何外部存儲庫。 使用這種方法,我們不能使用maven-cargo-plugin ,但是可以將deploy-jenkins-plugincopy-artifacts-plugin結合使用。

因此,讓我們看看如何實現這種方法。

首先是創建一個Jenkins 構建作業bar-web ),該作業將創建war文件。 請注意,定義了兩個構建后操作 ,第一個是Archive the artifacts ,用于存儲生成的文件,因此復制工件插件可以將它們復制到另一個工作空間。 另一個是“ 構建其他項目” ,在這種情況下,該項目調用一個作業,該作業負責將war文件部署到登臺目錄( bar deploy-to-staging )。

接下來是創建欄從部署到分段構建作業,其主要操作是將先前構建作業生成的war文件部署到Tomcat服務器。

對于第二個構建作業,您應該配置復制工件插件以將以前生成的文件復制到當前工作空間,因此在“ 構建”部分的“ 從另一個項目復制工件”部分中,我們設置了要從哪個復制作業復制工件(在本例中) bar-web )以及我們要復制的工件。 最后,在“構建后操作”部分中 ,我們必須配置應將哪個文件部署到Tomcatbar.web ),請記住該文件是以前的構建作業所編譯和打包的,最后設置了Tomcat參數。 執行管道如下所示:

請注意,已添加了第三個構建作業 ,該作業war文件部署到生產服務器。

第二種方法是第一種方法的對立部分,您可以確保在管道的上一步中使用的偽像將在所有步驟中使用,但是您必須遵守Jenkins / Hudson的規定

因此,如果您要在人工制品存儲庫中創建策略,以便只有管道執行程序可以將人工制品上載到存儲庫,則第一種方法更好,但是如果您不使用外部人工制品存儲庫(按原樣使用Jenkins ),則第二種方法是最好的方法是確保先前步驟中包裝的人工制品不會被并行步驟修改。

將文件部署到服務器后,可以毫無問題地執行驗收測試或UAT測試。

我希望現在我們可以安全,更好地解決部署流程的最后步驟。

參考:在One Jar to Rulem All博客中,我們的JCG合作伙伴 Alex Soto 與Jenkins一起部署JEE工件 。


翻譯自: https://www.javacodegeeks.com/2012/09/jenkins-deploying-jee-artifacts.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371346.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

seafile 部署_Seafile開啟webdav及讀寫性能測試

為什么要在seafile搞webdavSeafile 一直是一款可靠的文件同步web應用&#xff0c;經過個人測試&#xff0c;同一臺機器上&#xff0c;seafile在傳輸文件時的速度比nextcloud要快&#xff08;可能也與php的設置有關系&#xff09;&#xff0c;這是seafile的優勢。但是&#xff0…

Python--校園網爬蟲記

查成績&#xff0c;算分數&#xff0c;每年的綜合測評都是個固定的過程&#xff0c;作為軟件開發者&#xff0c;這些過程當然可以交給代碼去做&#xff0c;通過腳本進行網絡請求獲取數據&#xff0c;然后直接進行計算得到基礎分直接填表就好了&#xff0c;查成績再手動計算既容…

Spring–添加SpringMVC –第1部分

歡迎來到本教程的第四部分。 在這一部分中&#xff0c;我們將使用Spring MVC編寫控制器和視圖&#xff0c;并考慮我們的REST模型。 我們必須做的第一件事&#xff0c;就是根據目前的情況制作一個Web應用程序。 我們將web / WEB-INF文件夾添加到我們的項目根目錄。 在WEB-INF內創…

[Linux] 權限與指令間的關系

我們知道權限對于使用者帳號來說是非常重要的&#xff0c;因為他可以限制使用者能不能讀取/創建/刪除/修改文件或目錄&#xff01; 在這一章我們介紹了很多文件系統的管理指令&#xff0c;第五章則介紹了很多文件權限的意義。在這個小節當中&#xff0c; 我們就將這兩者結合起來…

access month函數用法_學會了這7個EXCEL日期函數技巧,老板再讓你加班,你找我!...

日期函數&#xff0c;常用年月日&#xff0c;時分秒&#xff0c;星期&#xff0c;季度&#xff0c;求差值等&#xff0c;學會以下幾個函數&#xff0c;老板再讓你加班&#xff0c;你找我&#xff01;1、記錄當前時間(不隨系統時間變化)NOW()函數與數據有效性結合&#xff0c;記…

css樣式表的選擇器與分類

css 樣式表的作用&#xff1a; 主要用于結構,樣式與行為,CSS主要的作用就是美化網頁的一個語言,它的特點: 1.結構與樣式分離的方式,便于后期維護與改版; 2.樣式定義精確到像素的級別; css樣式表的結構&#xff1a;CSS 稱為層疊樣式表 用于給網頁設置各種樣式 css樣式的語法由3部…

Spring 3.1緩存和@Cacheable

緩存在軟件領域已經存在很長時間了。 它們是那些真正有用的東西之一&#xff0c;一旦您開始使用它們&#xff0c;您會想知道如果沒有它們&#xff0c;您是如何相處的&#xff0c;所以似乎讓Spring的家伙們只是在版本中向Spring核心添加緩存實現有點奇怪。 3.1。 我猜想以前沒有…

pytorchyolov4訓練_使用pytorch-yolov5 訓練自己的數據集-2020.6.15

make yolov5 pytorch train datasets訓練所需環境 python3.5, pytorch1.3, torchvision 0.4.1 , tensorboard 1.14.0 , tensorflow-gpu1.14.0本例制作yolov5數據集 并進行數據訓練從VOC數據集轉為訓練所需的coco數據集代碼有待改進包含文件夾voc2coco/(Annotations/ JPEGImages…

meta 的作用 搜集

Meta標簽中的format-detection屬性及含義 format-detection翻譯成中文的意思是“格式檢測”&#xff0c;顧名思義&#xff0c;它是用來檢測html里的一些格式的&#xff0c;那關于meta的format-detection屬性主要是有以下幾個設置&#xff1a;<meta name"format-detecti…

Web服務安全性和SOA路線圖的人為維度

在大多數非平凡的SOA環境中&#xff0c;很難跟蹤系統之間不斷發展的集成&#xff0c;除非有明確的發布和查找適當信息的方法。 概述IT環境&#xff0c;定義當前或將要連接的內容&#xff0c;是維護環境的先決條件。 缺少這種情況通常會導致“面向意大利面條的環境”的感覺&…

pccad自定義圖框_(PCCAD自定義標題欄詳細方法.doc

PCCAD2011自定義標題欄詳細方法下面以圖3-1為例說明標題欄的自定義過程。圖3-11&#xff0e;新建文件(用New 命令)。2&#xff0e;用繪圖和文字中的相關命令設計出圖3-1所示的圖形。其中在使用中不變的內容&#xff0c;如廠名等均用“文字”命令標出&#xff0c;而需臨時填充的…

ThinkPHP 3.2.x 集成極光推送指北

3.2版本已經過了維護生命周期&#xff0c;官方已經不再維護&#xff0c;請及時更新至5.0版本 —— ThinkPHP 官方倉庫 以上&#xff0c;如果有條件&#xff0c;請關閉這個頁面&#xff0c;然后升級至 ThinkPHP 5&#xff0c;如果由于各種各樣的原因無法升級至 TP 5 &#xff0c…

Java:選擇正確的集合

這是在應用程序中選擇Set &#xff0c; List或Map的正確實現的快速指南。 最好的通用或“主要”實現可能是ArrayList&#xff0c;LinkedHashMap和LinkedHashSet。 它們的整體性能更好&#xff0c;除非您需要其他實現提供的特殊功能&#xff0c;否則應使用它們。 該特殊功能通常…

Java多線程——不變性與安全發布

1、不變性 某個對象在被創建后其狀態就不能被修改&#xff0c;那么這個對象就稱為不可變對象&#xff0c;不可變對象一定是線程安全的。不可變對象很簡單。他們只有一種狀態&#xff0c;并且該狀態由構造函數來控制。 當滿足以下條件時&#xff0c;對象才是不可變的&#xff1a…

中tr不能顯示字符_垃圾文本識別中基本操作指南和錯誤總結,第三部分

創建模型需要用到機器學習的庫&#xff0c;所以我們先下載sklearn庫sklearn庫下載完成后再輸入庫文件&#xff0c;就可以完美運行。然后就是劃分測試集和訓練集&#xff0c;需要注意的是&#xff0c;在從數據處理函數中導入數據時&#xff0c;足足運行了有將近30多秒&#xff0…

mvc后臺post發送json數據

代碼比較簡單&#xff0c;不廢話&#xff0c;直接上代碼&#xff1a; /// <summary>/// 提交json數據&#xff0c;并接收/// </summary>/// <param name"apipath">要請求的服務器地址</param>/// <param name"jsonStr">要提…

(轉載)20分鐘讀懂程序集

轉自&#xff1a;http://www.cnblogs.com/damonlan/p/3221347.html 說到程序集&#xff0c;我剛開始對這個名詞特別的郁悶&#xff01;~。然后 前些天花了些時間 好好讀了一下&#xff0c;現在比較清晰了&#xff0c;把一些書上看到的 記下來&#xff0c;以饗讀者。希望沒浪費你…

大數據胸_喂母乳會導致胸下垂?!你被這個謠言騙了多少年?

很多人認為&#xff0c;給寶寶喂奶會導致胸下垂。有些愛美的媽媽&#xff0c;甚至在寶寶出生6個月后就著急斷奶。那么&#xff0c;喂奶真的會導致胸下垂么&#xff1f;給大家講兩個真實的調查結果哈~2004年的一次針對496名新媽媽的調查結果顯示&#xff0c;有75%的母乳喂養母親…

Spring Shell項目發布

Spring Source昨天發布了Spring Shell 。 Spring Shell是一個交互式Shell&#xff0c;可以使用基于Spring的編程模型輕松地通過命令進行擴展。 它是通過除去OSGi依賴項從Spring Roo項目中提取的&#xff0c;并變成了一個獨立項目。 這使得那些只希望使用交互式外殼功能的人更容…

自制ACL+DHCP實驗(初版)

&#xff08;實驗用gns模擬器&#xff09; ACL 實驗拓撲&#xff1a; 實驗要求&#xff1a; 1.1.1.1→3.3.3.3 不通 11.11.11.11→3.3.3.3 通 2.2.2.2→3.3.3.3 通 實驗步驟&#xff1a; 步驟一&#xff1a;基本配置 R1&#xff1a; R1#conf t R1(config)#int lo0 R1(config-if…