最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java利用jenkins做項目的自動化部署

 更新時間:2018年06月27日 10:28:49   作者:小賣鋪的老爺爺  
這篇文章主要介紹了Java利用jenkins做項目的自動化部署,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近領導要求上海本地的項目需要使用進jenkins實現(xiàn)自動化部署,以便可以直接將項目移交給運維的同學,減輕開發(fā)的工作量。記錄下這次爬坑的過程。

一、前言

Jenkins是基于Java開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復的工作,功能包括:

1、持續(xù)的軟件版本發(fā)布/測試項目。

2、監(jiān)控外部調用執(zhí)行的工作。

上面是我從百科上down下來的,老實說沒看懂,這是個什么玩意?。科鋵嵰晕椰F(xiàn)在的理解和應用,最多的便是部署了,其他功能待研究╮(╯_╰)╭擼主目前在上海一個不知名國企打工,我們現(xiàn)在項目的發(fā)布流程是:

1、本地或打包服務器利用maven打成war包

2、遠程或者SSH連上項目服務器

3、停掉tomcat,刪除舊包和緩存,將新打的包放進去

4、重啟tomcat。完成看似步驟簡單,其實占用了大量開發(fā)的的時間。

然后使用jenkins后:

1、點擊立即構建,完成。什么?就點擊個按鈕就完成了,沒錯,就是個按鈕。其實在你點擊按鈕后jenkins已經幫你把上述該走的流程后臺跑了一遍了,本次就介紹下怎么讓它后臺跑。

二、安裝構建

本次介紹基于windows,可安裝在開發(fā)電腦或者windows server服務器

1、下載jenkins  

jenkins提供多種安裝方式

1.1jenkins.msi安裝 就像我們平時安裝軟件一樣,點點點。下載地址:https://jenkins.io/download/

1.2jenkins.war 包 既然是war包,不用說大家都知道怎么啟動了,扔到tomcat就行了。下載地址:http://updates.jenkins-ci.org/download/war/

2、啟動jenkins

我個人是比較推薦1.1的安裝方式的,1.2我在使用的時候經常遇到內存溢出的問題,當然內存溢出是可以調整的,但是多出了多余的工作量不是嘛。

采用1.1的安裝方式,安裝完成后我們會在windows的服務里面看到jenkins服務的。如下圖,啟動關閉重啟直接點服務就行了。

采用1.2的的方式下載war包的話,其實有兩種啟動方式。

第一種,放到tomcat容器,

第二種,cmd進入安裝目錄,java -jar jenkins.war

3、安裝jenkins

安裝方式1.1和1.2 的流程是一樣的

jenkins默認8080端口,可以修改,方法百度。

進入http://localhost:8080/。紅色字體路徑有密碼,將密碼填上,然后下一步。

選擇插件,建議選擇官方建議插件,避免很多麻煩。

等待安裝中ing......

安裝好后看到下圖,用戶名密碼登陸用的,全名是用來顯示的。繼續(xù)下一步。

因為我要部署的是maven項目,jenkins默認的插件中是沒有maven的,首先需要安裝下。

點擊下圖插件直接安裝就行了,maven integration plugins

安裝熱部署插件Deploy to container Plugin

4、配置jenkins

我們需要配下maven的setting文件,jdk以及maven地址,setting文件一定要配,不要用它默認的,擼主因為這個沒配,出問題糾結好久。

最后Apply然后Save就行了,記得別忘了應用保存,不然白配了。

接著我們來新建一個項目,先輸入項目名,選擇maven項目,OK

選擇源碼管理,因為我們是企業(yè)項目,不是開源,使用的SVN,選擇Subversion配置SVN

URL是你SVN地址,Credentials是賬戶密碼

然后到Pre Steps,這個東西是打包前需要什么操作,比如我們現(xiàn)在的項目需要拷貝log4j.xml文件等等,根據(jù)環(huán)境可以寫windows或者Shell腳本

沒有操作的話,就不用配了。

貼出我的腳本給大家參考,相關部分我用XXX替代

@echo off

rem 設置變量

:: APP.XXX app.XXX代碼的本地跟目錄
set APP.XXX="D:\svn\svn.173.X.X.X\app.XXX\"

::home.omm的log4j.xml 變量START
:: HOME_OMM_LOG4J_GOALS_PATH 存放home.omm的log4j.xml的路徑
set HOME_OMM_LOG4J_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\home.omm\src\main\resources"

::HOME_OMM_LOG4J home.omm的log4j.xml測試環(huán)境的路徑
set HOME_OMM_LOG4J="D:\svn\svn.173.X.X.X\app.XXX\config\home.omm\sh_test\resources"
::home.omm的log4j.xml 變量END

::home.weixin的變量START
:: HOME_WEIXIN_LOG4J_GOALS_PATH 存放home.weixin的log4j.xml的路徑
set HOME_WEIXIN_LOG4J_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\home.weixin\src\main\resources"

::HOME_WEIXIN_LOG4J home.weixin的log4j.xml測試環(huán)境的路徑
set HOME_WEIXIN_LOG4J="D:\svn\svn.173.X.X.X\app.XXX\config\home.weixin\sh_test\resources"

:: HOME_WEIXIN_CONFIG.JS_GOALS_PATH 存放home.weixin的config.js的路徑
set HOME_WEIXIN_CONFIG.JS_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\home.weixin\src\main\webapp\module\js"

::HOME_WEIXIN_CONFIG.JS home.omm的log4j.xml測試環(huán)境的路徑
set HOME_WEIXIN_CONFIG.JS="D:\svn\svn.173.X.X.X\app.XXX\config\home.weixin\sh_test\webapp\module\js"
::home.weixin的變量END

::service的變量START
:: SERVICE_LOG4J_GOALS_PATH 存放service的log4j.xml的路徑
set SERVICE_LOG4J_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\service\src\main\resources"

::SERVICE_LOG4J service的log4j.xml測試環(huán)境的路徑
set SERVICE_LOG4J="D:\svn\svn.173.X.X.X\app.XXX\config\service\sh_test\resources"

:: SERVICE_APPLICATION_RESOURCES_ALL_GOALS_PATH 存放application-resources-all.xml的路徑
set SERVICE_APPLICATION_RESOURCES_ALL_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\service\src\main\resources\config\spring"

:: SERVICE_APPLICATION_RESOURCES_ALL application-resources-all.xml測試環(huán)境的路徑
set SERVICE_APPLICATION_RESOURCES_ALL="D:\svn\svn.173.X.X.X\app.XXX\config\service\sh_test\resources\config\spring"
::service的變量END


::service.refresh的變量START
:: SERVICE_REFRESH_LOG4J_GOALS_PATH 存放service.refresh的log4j.xml的路徑
set SERVICE_REFRESH_LOG4J_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\service.refresh\src\main\resources"

::SERVICE_REFRESH_LOG4J service的log4j.xml測試環(huán)境的路徑
set SERVICE_REFRESH_LOG4J="D:\svn\svn.173.X.X.X\app.XXX\config\service.refresh\sh_test\resources"

:: SERVICE_REFRESH_APPLICATION_RESOURCES_ALL_GOALS_PATH 存放application-resources-all.xml的路徑
set SERVICE_REFRESH_APPLICATION_RESOURCES_ALL_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\service.refresh\src\main\resources\config\spring"

:: SERVICE_REFRESH_APPLICATION_RESOURCES_ALL application-resources-all.xml測試環(huán)境的路徑
set SERVICE_REFRESH_APPLICATION_RESOURCES_ALL="D:\svn\svn.173.X.X.X\app.XXX\config\service.refresh\sh_test\resources\config\spring"
::service.refresh的變量END



::判斷home.omm的log4j.xml文件是否存在
if exist %HOME_OMM_LOG4J_GOALS_PATH%\log4j.xml (del %HOME_OMM_LOG4J_GOALS_PATH%\log4j.xml)
cd %HOME_OMM_LOG4J_GOALS_PATH%
copy %HOME_OMM_LOG4J%\log4j.xml log4j.xml


::判斷home.weixin的log4j.xml文件是否存在
if exist %HOME_WEIXIN_LOG4J_GOALS_PATH%\log4j.xml (del %HOME_WEIXIN_LOG4J_GOALS_PATH%\log4j.xml)
cd %HOME_WEIXIN_LOG4J_GOALS_PATH%
copy %HOME_WEIXIN_LOG4J%\log4j.xml log4j.xml

::判斷home.weixin的config.js文件是否存在
if exist %HOME_WEIXIN_CONFIG.JS_GOALS_PATH%\config.js (del %HOME_WEIXIN_CONFIG.JS_GOALS_PATH%\config.js)
cd %HOME_WEIXIN_CONFIG.JS_GOALS_PATH%
copy %HOME_WEIXIN_CONFIG.JS%\config.js config.js


::判斷service的log4j.xml文件是否存在
if exist %SERVICE_LOG4J_GOALS_PATH%\log4j.xml (del %SERVICE_LOG4J_GOALS_PATH%\log4j.xml)
cd %SERVICE_LOG4J_GOALS_PATH%
copy %SERVICE_LOG4J%\log4j.xml log4j.xml

::判斷service的application-resources-all.xml文件是否存在
if exist %SERVICE_APPLICATION_RESOURCES_ALL_GOALS_PATH%\application-resources-all.xml (del %SERVICE_APPLICATION_RESOURCES_ALL_GOALS_PATH%\application-resources-all.xml)
cd %SERVICE_APPLICATION_RESOURCES_ALL_GOALS_PATH%
copy %SERVICE_APPLICATION_RESOURCES_ALL%\application-resources-all.xml application-resources-all.xml


::判斷service.refresh的log4j.xml文件是否存在
if exist %SERVICE_REFRESH_LOG4J_GOALS_PATH%\log4j.xml (del %SERVICE_REFRESH_LOG4J_GOALS_PATH%\log4j.xml)
cd %SERVICE_REFRESH_LOG4J_GOALS_PATH%
copy %SERVICE_REFRESH_LOG4J%\log4j.xml log4j.xml

::判斷service.refresh的application-resources-all.xml文件是否存在
if exist %SERVICE_REFRESH_APPLICATION_RESOURCES_ALL_GOALS_PATH%\application-resources-all.xml (del %SERVICE_REFRESH_APPLICATION_RESOURCES_ALL_GOALS_PATH%\application-resources-all.xml)
cd %SERVICE_REFRESH_APPLICATION_RESOURCES_ALL_GOALS_PATH%
copy %SERVICE_REFRESH_APPLICATION_RESOURCES_ALL%\application-resources-all.xml application-resources-all.xml

exit

Build編譯了,指定pom位置,以及mvn命令,對了高級里面還可以配置workspace,不配默認在jenkins安裝目錄中

構建后操作,就是包打好了放在哪。選擇下圖

本次構建后操作,使用的是tomcat的熱部署,熱部署可以參考我之前的文章:Tomcat7的熱部署

WAR/EAR:war包的地址

Context:是部署后的包名

UserName/Password是指熱部署tomcat的賬號/密碼

URL:tomcat的界面,如:http://172.16.101.71:8180/

5、開始構建

講了那么多,終于到了最后了,一個按鈕的操作終于到了,返回jenkins首頁就可以看到我們的項目了。

構建后點擊左下角構建執(zhí)行狀態(tài)中可以看到我們的項目在構建中。點擊項目名進入

選擇Console就能看到我們構建過程中打印出來的日志或者錯誤信息了。

三、存在的問題

jenkins角色問題,既然是發(fā)布就涉及到生產環(huán)境,不能所有用戶都有部署生產環(huán)境的權限吧,如果誰不小心點了下。那后果.....不敢相信。

解決:安裝Role-based Authorization Strategy插件,其余步驟參考:http://www.cnblogs.com/zz0412/p/jenkins_jj_14.html 不在詳述。

tomcat熱部署的問題,deploy幾次之后出現(xiàn)內存上漲溢出,停止運行或者報錯的問題,網上查了下是熱部署本身的問題,正在尋求解決辦法ing.....。

解決:tomcat熱部署本身存在問題,生產環(huán)境一般不會采用熱部署的方式。目前我這邊測試環(huán)境因為使用的是windows server 2008系統(tǒng),所以采用的是熱部署的方式,問題依舊存在,但是我看過一個帖子是說可以使用Windows 批處理命令的方式解決,就是bat命令,不過我還未深入研究過。生產環(huán)境Linux系統(tǒng),目前我使用Publish Over SSH 插件,具體步驟是配置中加入下圖步驟。

1、在系統(tǒng)管理-》系統(tǒng)設置里找到Publish over SSH然后輸入:

2、配置Post Steps

這里還是接著上面的項目,這個配置得安裝了上面的插件后才會顯示!

Transfer SetSource files:表示要上傳的本地的war包及路徑,可到工作空間去看

Remove prefix:表示要上傳時要去除的文件夾,即只上傳war包

remote driectory:即表示執(zhí)行時的路徑,相當于把war包上傳到這里了

exec commad:要執(zhí)行的命令

如圖,會將war包放到home/admin文件夾,接著我會執(zhí)行我寫的Shell命令。主要涉及,停止tomcat,備份原war包,刪除webapp下原war包,將home/admin下的新war包拷進來,啟動tomcat,然后就完成了。這樣就避免了熱部署內存溢出導致服務器崩潰的問題了。

腳本參考:

#!/bin/sh 
#defined  
TOMCAT_HOME="/usr/java/tomcat/apache-tomcat-7.0.67/" 
ID=`ps -ef | grep java | grep tomcat|awk '{print $2}'` 
echo $ID  
echo "kill tomcat" 
kill -9 $ID 
echo "remover war file" 
cd "$TOMCAT_HOME"/webapps 
rm -rf JavaWeb-0.0.1-SNAPSHOT 
rm -rf JavaWeb-0.0.1-SNAPSHOT.war 
echo "copy war to webapp" 
cd /home/lin 
cp JavaWeb-0.0.1-SNAPSHOT.war "$TOMCAT_HOME"/webapps 
cd "$TOMCAT_HOME"/bin 
echo "start tomcat" 
./startup.sh

Deploy插件問題,上文中使用的Deploy to container Plugin插件來實現(xiàn)熱部署,但是deploy插件限制一個工程只能部署一個war包,我的項目是,一個工程前后端分離的兩個war,總不能新建兩個項目構建兩次吧, ̄へ ̄。

解決:熱部署盡量不要使用,測試環(huán)境暫時使用的話,我目前是,新建兩個工程,每次只編譯一個war包。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot集成JWT實現(xiàn)登陸驗證的方法詳解

    SpringBoot集成JWT實現(xiàn)登陸驗證的方法詳解

    JSON?Web?Token(JWT)是一個開放的標準(RFC?7519),它定義了一個緊湊且自包含的方式,用于在各方之間以JSON對象安全地傳輸信息。本文將利用SpringBoot集成JWT實現(xiàn)登陸驗證,感興趣的可以了解一下
    2022-05-05
  • SpringBoot項目實用功能之實現(xiàn)自定義參數(shù)解析器

    SpringBoot項目實用功能之實現(xiàn)自定義參數(shù)解析器

    這篇文章主要介紹了SpringBoot項目實用功能之實現(xiàn)自定義參數(shù)解析器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 淺析java消息摘要與數(shù)字簽名

    淺析java消息摘要與數(shù)字簽名

    這篇文章給大家分析了關于java消息摘要與數(shù)字簽名的相關知識點內容,有興趣的朋友們可以學習下。
    2018-08-08
  • Netty序列化深入理解與使用

    Netty序列化深入理解與使用

    序列化 (Serialization)是將對象的狀態(tài)信息轉換為可以存儲或傳輸?shù)男问降倪^程。在序列化期間,對象將其當前狀態(tài)寫入到臨時或持久性存儲區(qū)。以后,可以通過從存儲區(qū)中讀取或反序列化對象的狀態(tài),重新創(chuàng)建該對象
    2022-08-08
  • Java實現(xiàn)洗牌發(fā)牌的方法

    Java實現(xiàn)洗牌發(fā)牌的方法

    這篇文章主要介紹了Java實現(xiàn)洗牌發(fā)牌的方法,涉及java針對數(shù)組的遍歷與排序操作相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Java中的WeakHashMap詳解

    Java中的WeakHashMap詳解

    這篇文章主要介紹了Java中的WeakHashMap詳解,WeakHashMap可能平時使用的頻率并不高,但是你可能聽過WeakHashMap會進行自動回收吧,下面就對其原理進行分析,需要的朋友可以參考下
    2023-09-09
  • SpringBoot如何切換成其它的嵌入式Servlet容器(Jetty和Undertow)

    SpringBoot如何切換成其它的嵌入式Servlet容器(Jetty和Undertow)

    這篇文章主要介紹了SpringBoot如何切換成其它的嵌入式Servlet容器(Jetty和Undertow),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java計時新姿勢StopWatch的使用方法詳解

    Java計時新姿勢StopWatch的使用方法詳解

    這篇文章主要給大家介紹了關于Java計時新姿勢StopWatch的相關資料,以及java 中使用StopWatch來計算時間差的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • SpringBoot接收前端參數(shù)的幾種常用方式

    SpringBoot接收前端參數(shù)的幾種常用方式

    在Spring Boot開發(fā)中接收參數(shù)是非常常見且重要的一部分,依賴于請求的不同場景,Spring Boot提供了多種方式來處理和接收參數(shù),這篇文章主要給大家介紹了關于SpringBoot接收前端參數(shù)的幾種常用方式,需要的朋友可以參考下
    2024-07-07
  • Spring Boot+Shiro實現(xiàn)一個Http請求的Basic認證

    Spring Boot+Shiro實現(xiàn)一個Http請求的Basic認證

    本文向向大家仔細的介紹了如何使用Shiro實現(xiàn)一個Http請求的Basic認證,有此需求的朋友可以參考下本文
    2021-06-06

最新評論

静宁县| 获嘉县| 衡水市| 岑巩县| 渝中区| 乌审旗| 江西省| 南溪县| 弥渡县| 永吉县| 沭阳县| 集安市| 洪洞县| 江源县| 乐安县| 元谋县| 伊吾县| 布尔津县| 丰县| 闸北区| 龙胜| 左贡县| 定日县| 驻马店市| 佛山市| 彰武县| 皋兰县| 文昌市| 册亨县| 庆元县| 安塞县| 永春县| 准格尔旗| 玛曲县| 茶陵县| 蒙城县| 全椒县| 弥渡县| 宝应县| 邵东县| 墨玉县|