背景
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了黟縣免費(fèi)建站歡迎大家使用!
最近安裝Jenkins,參照網(wǎng)上的各種資料進(jìn)行嘗試,折騰了好久,但是查找了這么多資料,相似度在90%以上!??!,相同的安裝過(guò)程,測(cè)試了幾臺(tái)機(jī)器,未曾成功,不得不感慨自己能力有限,最終慢慢摸索,形成思路,現(xiàn)分享給大家,希望大家在安裝的時(shí)候少走彎路。
PS:本人很痛恨那種粘貼復(fù)制,毫無(wú)思考的博主,本想著拿著解決問(wèn)題的心態(tài),但結(jié)果還是一樣,不但浪費(fèi)了大家的時(shí)間,還浪費(fèi)了大家的感情,所以,我把我遇到的問(wèn)題和解決的方式記錄下來(lái)和大家分享。
知識(shí)背景
首先需要理解的是,Jenkins是幫我們將代碼進(jìn)行統(tǒng)一的編譯打包、還可以放到tomcat容器中進(jìn)行發(fā)布。
意思是我們通過(guò)配置,將以前:編譯、打包、上傳、部署到Tomcat中的過(guò)程交由Jenkins,Jenkins通過(guò)給定的代碼地址URL,將代碼拉取到其“宿主服務(wù)器”(這是我個(gè)人的稱(chēng)呼,在下邊會(huì)用到,就是Jenkins的安裝位置),進(jìn)行編譯、打包和發(fā)布到容器中。
因此我們可以注意到的是,在Jenkins的宿主服務(wù)器中必須要有可以進(jìn)行:代碼clone(Git)、代碼編譯(Maven)、代碼運(yùn)行(Tomcat)的基本環(huán)境,其他文章上來(lái)就是安裝jenkins,忽略了一些基本的配置。
下邊就開(kāi)始講解各部分的安裝過(guò)程,如果已經(jīng)安裝某一步的環(huán)境,則可以以此進(jìn)行下一步。
一、Git的安裝
1、安裝依賴(lài)
sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
注意:perl-ExtUtils-MakeMaker 也是這些安裝列表中的一員,不要因?yàn)轱@示的換行造成大家認(rèn)為是兩條執(zhí)行命令。
2、下載Git
選擇一個(gè)目錄,存放下載的git,例如我的是:/home/xuliugen/tmp,大家可以根據(jù)需求到官網(wǎng)下載相應(yīng)的版本
wget https://github.com/git/git/archive/v2.3.0.zip
3、解壓git
下載之后是這樣的,不要感到奇怪,直接解壓即可
因?yàn)橄螺d的是一個(gè)zip,所以使用命令將其解壓到git目錄下:
#參數(shù)-d 后邊的是解壓到的目錄 unzip v2.3.0 -d git
4、編譯安裝git
進(jìn)入git目錄
將其安裝在“/usr/local/git”目錄下,命令如下:
make prefix=/usr/local/git all sudo make prefix=/usr/local/git install
5、配置Git
sudo vim /etc/profile #編輯profile文件
然后而已看到這個(gè)文件已經(jīng)有很多配置了,只需要在最下邊添加git的路徑即可:
export PATH=/usr/local/git/bin:$PATH
將這段話放在最后邊,然后使用source命令應(yīng)用修改:
source /etc/profile
6、檢驗(yàn)Git是否安裝成功
git --version
二、Maven安裝
1、下載和解壓Maven
Maven的安裝包下載可以根據(jù)需求找到合適的版本,解壓之后,我的位置是:
2、配置Maven
編輯:~/.bash_profile文件,根據(jù)注釋相應(yīng)的修改即可
# maven所在的目錄 export M2_HOME=/home/xuliugen/software/maven/apache-maven-3.3.3 # maven bin所在的目錄 export M2=$M2_HOME/bin # 將maven bin加到PATH變量中 export PATH=$M2:$PATH # 配置JAVA_HOME所在的目錄,注意這個(gè)目錄下應(yīng)該有bin文件夾,bin下應(yīng)該有java等命令 export JAVA_HOME=/usr/lib/jvm/jre-1.7.0
然后運(yùn)行:source ~/.bash_profile 應(yīng)用修改
3、查看Maven是否安裝成功
使用:mvn -version 即可查看結(jié)果
三、Jenkins的部署
Jenkins的安裝很簡(jiǎn)單,直接將war放到容器中進(jìn)行運(yùn)行即可
1、將jenkins放到Tomcat中并解壓,啟動(dòng)Tomcat,成功啟動(dòng)之后訪問(wèn)ip和端口如下:
啟動(dòng)成功之后,進(jìn)入的界面如上,表示啟動(dòng)成功。
2、安裝插件
在進(jìn)行配置之前,由于使用的是Git拉去代碼的方式,所以要首先安裝插件
找到:插件管理 在“可選插件”界面使用ctrl+f 搜索:Deploy to container Plugin 插件(這個(gè)是支持將代碼部署到tomcat容器的)
勾選,點(diǎn)擊下邊的按鈕:直接安裝,這個(gè)可能時(shí)間較久,等待即可。
安裝完之后,如果勾選了:安裝完成后重啟jenkins 那么會(huì)重啟jenkins。
然后安裝:GIT plugin,何上邊的步驟一樣,如果使用上述的方式,由于網(wǎng)絡(luò)的原因,可能會(huì)安裝失敗,這就需要我們使用另一種方式進(jìn)行安裝。
使用同樣的方式在“可選插件”中搜索GIT plugin,找到之后點(diǎn)擊藍(lán)色鏈接(最好右鍵在新窗口中打開(kāi),放置覆蓋jenkins界面)
會(huì)跳轉(zhuǎn)到Git Plugin的插件信息地址:
可以看到Plugin ID為:git,然后在:http://updates.jenkins-ci.org/download/plugins/ 這地地方搜索(ctrl+f)即可找到,點(diǎn)進(jìn)去,選擇一個(gè)版本進(jìn)行下載:
點(diǎn)進(jìn)去下載的是一個(gè)hpi文件
然后同樣的在:系統(tǒng)管理–管理插件–高級(jí)Tab中,下拉可以看到上傳插件,然后選擇文件上傳剛才下載的hpi文件,即可,上傳完之后,會(huì)自動(dòng)安裝。上述安裝Deploy to container Plugin的方式也可以采用這種方式。
都安裝完之后,在已安裝Tab中可以看到剛安裝的插件:
3、進(jìn)行配置
看到上圖中的左側(cè)有一個(gè):系統(tǒng)管理 點(diǎn)擊去
上邊的第一行黃色信息,表示編碼問(wèn)題,在Tomcat–>conf–>server.xml文件中修改即可
4、Jenkins系統(tǒng)設(shè)置
點(diǎn)擊:系統(tǒng)設(shè)置這里沒(méi)有強(qiáng)調(diào)的都設(shè)置為默認(rèn)即可。
(注意:版本2.60.2是在:系統(tǒng)設(shè)置–>Global Tool Configuration下)
(1)JDK,別名是任意的,選擇自己jdk的位置,jenkins推薦使用sun jdk而不是openjdk
(2)Git 的配置
注意這里的git位置,是可執(zhí)行文件的地址,即是git–bin–下的可執(zhí)行文件 git的目錄(類(lèi)似于java中bin下的java可執(zhí)行文件位置)
如果填錯(cuò),后期回報(bào)無(wú)法找到git等錯(cuò)誤(最下邊,其他問(wèn)題下的第三個(gè)問(wèn)題),請(qǐng)大家注意!
(3)Ant的配置
由于本次并沒(méi)有用到Ant,不做配置,大家可以根據(jù)配置進(jìn)行設(shè)置
(4)Maven的配置,選擇自己maven的存放位置
(5)Jenkins Location
這里配置的是ip加端口和一個(gè)路徑名稱(chēng),郵箱要進(jìn)行設(shè)定,后期會(huì)發(fā)送jenkins執(zhí)行的結(jié)果到郵件中
(6)郵件通知
這里我配置的QQ郵箱,大家根據(jù)情況進(jìn)行設(shè)置相應(yīng)的smtp服務(wù)器,用戶(hù)名、密碼分別為自己的QQ郵箱何密碼,如果不進(jìn)行設(shè)置,后期jenkins構(gòu)建項(xiàng)目的時(shí)候會(huì)報(bào)錯(cuò),報(bào)錯(cuò)信息很好理解也很好找到是沒(méi)有配置郵件的問(wèn)題。
首先,要保證郵件的smtp和pop是開(kāi)啟狀態(tài)的,這樣的話才可以通過(guò)驗(yàn)證:
最后點(diǎn)擊下邊的應(yīng)用、保存即可
5、Configure Global Security
然后回到系統(tǒng)管理,看到Configure Global Security 點(diǎn)擊進(jìn)去,根據(jù)下邊進(jìn)行配置即可
點(diǎn)擊應(yīng)用 保存之后,然后在屏幕的右上角,有一個(gè)登錄-注冊(cè) ,點(diǎn)擊注冊(cè)即可實(shí)現(xiàn)用戶(hù)的登錄。
這里,如果是公司內(nèi)網(wǎng)的話,或者最后搭建的jenkins是公司使用,那么最好用戶(hù)名和密碼為公司的賬戶(hù)密碼,郵件也是公司的郵件,這樣的話方便后期的操作。
至此Jenkins的基本配置完成。
創(chuàng)建Job
1、創(chuàng)建項(xiàng)目
點(diǎn)擊登錄之后,會(huì)看到下邊的界面中:My Views
點(diǎn)擊進(jìn)去
點(diǎn)擊:創(chuàng)建一個(gè)新任務(wù)
選擇maven項(xiàng)目,點(diǎn)擊OK,這里的Item名稱(chēng)是后邊需要用到的,下邊的配置也有用到這個(gè)的,大家可以很好的對(duì)應(yīng)。
2、進(jìn)行項(xiàng)目的配置
(1)源碼管理選擇Git,這個(gè)時(shí)候添加url之后,下邊會(huì)報(bào)錯(cuò),顯示讓去認(rèn)證,認(rèn)證即可(其他的安裝中又遇到這個(gè)問(wèn)題),如果認(rèn)證失敗,請(qǐng)下載認(rèn)證Github Authentication plugin插件,這個(gè)在插件管理的可選插件中搜索安裝。
我這里的rul是我在gitos上的一個(gè)項(xiàng)目,credentials是我在gitos上的用戶(hù)名和密碼認(rèn)證。
(2)構(gòu)建觸發(fā)器,就是什么時(shí)候執(zhí)行jenkins的自動(dòng)化部署
選擇第一個(gè),其他的基本是定時(shí)執(zhí)行什么的,大家可以自行查找,查看如何設(shè)置,根據(jù)需要進(jìn)行配置
(3)Post Steps
選擇上圖中的,然后下邊 的Execute shell如下,腳本的編寫(xiě)在下邊進(jìn)行了詳細(xì)的說(shuō)明:
#!/bin/bash #copy file and restart tomcat export JAVA_HOME=/data/home/server/jdk export CATALINA_HOME=/home/xuliugen/dubbo-provider export CATALINA_BASE=/home/xuliugen/dubbo-provider export BUILD_ID=dontKillMe tomcat_path=/home/xuliugen/dubbo-provider project=dubbo-provider war_name=dubbo-provider.war war_path=http://132.153.131.237/:8022/jenkins/job/ManenDemo/ws/targetserver_port=8082 file_path=~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target $tomcat_path/bin/shutdown.sh sleep 3s echo "rm -rf ${tomcat_path}/webapps/ROOT/*" rm -rf ${tomcat_path}/webapps/ROOT/* cd $file_path cp ${war_name} ${tomcat_path}/webapps/ROOT/ cd $tomcat_path/webapps/ROOT/ unzip ${war_name} rm -rf ${war_name} sleep 5s #$tomcat_path/bin/startup.sh cd $tomcat_path/bin/ ./startup.sh echo "server restarted"
(4)郵件通知
至此基本設(shè)置完畢,點(diǎn)擊應(yīng)用、保存
(5)立即構(gòu)建
點(diǎn)擊左上角的立即構(gòu)建
然后看到下邊的Build History 點(diǎn)擊藍(lán)色的進(jìn)去,會(huì)進(jìn)入Console
下邊是進(jìn)行jar的下載,會(huì)下載到宿主服務(wù)器的maven倉(cāng)庫(kù)中:
下邊的信息表示項(xiàng)目編譯通過(guò):
下邊是運(yùn)行腳本的信息:
腳本的分析
在Jenkins的服務(wù)器上查看:
可以看到在/root/.jenkins這個(gè)目錄,實(shí)際存放了Jenkins拉取Git代碼之后編譯好war的位置,到此,大家也許都該明白了,編譯后的位置就在這里?。∪缓?,接著是部署到宿主服務(wù)器的Tomcat容器中,如何將編譯好的war放到tomcat中,這就需要腳本來(lái)完成,也是上述過(guò)程中配置的過(guò)程,下邊對(duì)每一行進(jìn)行分析。
首先我們應(yīng)該明白,將編譯好的war放到tomcat容器中,我們首先要知道這兩個(gè)的位置:編譯后war的位置和目標(biāo)容器的位置,很顯然我們是知道的。
1、腳本文件的頭,這個(gè)沒(méi)得說(shuō)
#!/bin/bash
2、環(huán)境變量設(shè)置
export JAVA_HOME=/data/home/server/jdk export CATALINA_HOME=/home/xuliugen/dubbo-provider export CATALINA_BASE=/home/xuliugen/dubbo-provider export BUILD_ID=dontKillMe
上邊的各個(gè)位置,大家也許都知道,CATALINA_HOME和CATALINA_BASE的位置就是Tomcat容器的位置,這里根據(jù)需求我將Tomcat容器的名字改為dubbo-provider了,如果改成/home/xuliugen/tomcat是不是更好理解。
export BUILD_ID=dontKillMe這一句很重要,因?yàn)樵搄ob啟動(dòng)完后執(zhí)行下一job,jenkins直接把tomcat進(jìn)程殺了,所以無(wú)論腳本中怎么寫(xiě)了啟動(dòng)tomcat的命令,他是不會(huì)啟動(dòng)的。雖然上述截圖中顯示了Tomcat started、server restarted但是訪問(wèn)項(xiàng)目地址是訪問(wèn)不了的,這在:其他問(wèn)題的第二個(gè)說(shuō)明了這個(gè)問(wèn)題。
3、其他路徑位置
tomcat_path=/home/xuliugen/dubbo-provider #我的Tomcat位置 project=dubbo-provider #我的項(xiàng)目編譯的名稱(chēng) war_name=dubbo-provider.war #最后打包的war名稱(chēng) war_path=http://132.153.131.237/:8022/jenkins/job/ManenDemo/ws/targetserver_port=8082 #宿主服務(wù)器的ip何端口 file_path=~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target #編譯好的war包存放地址
這個(gè):war_path 其實(shí)也就是Jenkins的宿主服務(wù)器位置IP,端口為jenkins運(yùn)行的端口,大家只需要將ip地址端口ManenDemo換成自己的即可;
file_path:就是Jenkins幫我們編譯好的項(xiàng)目war的位置,上圖中大家也可以看到,并且大家不可以完全按照上邊的路徑,要找到自己宿主服務(wù)器上實(shí)際war的位置,進(jìn)行設(shè)置。
4、耳熟能詳?shù)膱?zhí)行命令
下邊就是我們?cè)谑褂迷挤绞剑渴饂ar的命令,大家很簡(jiǎn)單的可以理解,其中:
注意:個(gè)人寫(xiě)腳本的能力有限,所以我是假設(shè)項(xiàng)目已經(jīng)在運(yùn)行的情況下,因此我上來(lái)就是先關(guān)閉Tomcat,(正確的方式,應(yīng)該判斷端口是否打開(kāi),如果本身tomcat未啟動(dòng),我的這種情況,會(huì)在Jenkins的Console中報(bào)拒絕連接的問(wèn)題,如下圖)。
另外用到了sleep 3s 這個(gè)可以讓線程休眠一下,這樣的話可以看一下tomcat的日志信息。
下邊的腳本就是刪除原來(lái)容器中的文件,然后將編譯好的war移動(dòng)到容器中,解壓。運(yùn)行tomcat。
$tomcat_path/bin/shutdown.sh sleep 3s echo "rm -rf ${tomcat_path}/webapps/ROOT/*" rm -rf ${tomcat_path}/webapps/ROOT/* cd $file_path cp ${war_name} ${tomcat_path}/webapps/ROOT/ cd $tomcat_path/webapps/ROOT/ unzip ${war_name} rm -rf ${war_name} sleep 5s cd $tomcat_path/bin/ ./startup.sh echo "server restarted"
將項(xiàng)目布署到遠(yuǎn)程Tomcat
上述創(chuàng)建項(xiàng)目,可以看出是在本地進(jìn)行執(zhí)行的,也就是進(jìn)行編譯后執(zhí)行的Tomcat是何Jenkins的宿主服務(wù)器是在一起的,這很顯然不符合我們常規(guī)的公司及其部署的方案,通常是將編譯之后的代碼在運(yùn)行到其他的Tomcat服務(wù)器中的,下邊有兩種方式,將編譯之后的項(xiàng)目部署到遠(yuǎn)程服務(wù)器中。
1、使用腳本的方式部署到遠(yuǎn)程服務(wù)器
2、使用Deploy to container Plugin
插件部署到遠(yuǎn)程服務(wù)器
上述的開(kāi)始階段就安裝了這個(gè)插件,下邊就開(kāi)始發(fā)揮其作用。
在創(chuàng)建的Job左側(cè)點(diǎn)擊設(shè)置,其他配置何在遠(yuǎn)程搭建項(xiàng)目是一致的,不同的是在這個(gè)地方:
以前我們?cè)诰幾g之后,將編譯后的通過(guò)腳本補(bǔ)助到Jenkins的宿主服務(wù)器,使用插件,就不需要這種方式了。
還有就是的在構(gòu)建之后,將編譯后的文件**/target/dubbo-provider.war
(就是上邊的~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target目錄)部署到下邊的遠(yuǎn)程Tomcat容器中;這里Containers的用戶(hù)名和密碼是Tomcat管理員的賬戶(hù)密碼,Tomcat URL 就是你需要進(jìn)行部署的遠(yuǎn)程Tomcat服務(wù)器的ip和端口。
這里需要進(jìn)行設(shè)置的是遠(yuǎn)程Tomcat的管理員信息,修改遠(yuǎn)程Tomcat容器下的conf–tomcat-users.xml文件,在內(nèi)添加下邊的內(nèi)容:
<role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="admin"/> <user username="admin" password="admin" roles="admin,manager,manager-script,manager-gui"/>
即可實(shí)現(xiàn)遠(yuǎn)程的訪問(wèn),測(cè)試是可以通過(guò)的,但是有一個(gè)問(wèn)題,通過(guò)這種方式,只將war復(fù)制到了wenapps下:
因此這種方式的話,我們?cè)L問(wèn)的時(shí)候必須是ip、端口和項(xiàng)目名,例如:
http://115.159.151.247:8030/dubbo-provider/
當(dāng)然這種方式 也是在實(shí)際的應(yīng)用中不提倡的,解決方式就是修改Tomcat默認(rèn)的訪問(wèn)路徑即可,設(shè)置Tomcat–conf–server.xml文件如下:
在Host節(jié)點(diǎn)之間添加:
<Context path="" docBase="dubbo-provider" debug="0" reloadable="true" />
或者在docBase里邊輸入項(xiàng)目的絕對(duì)路徑,例如我的:
<Context path="" docBase="/home/xuliugen/dubbo-provider/webapps/dubbo-provider" debug="0" reloadable="true" />
然后重啟Tomcat,這樣的話,http://ip:8030/dubbo-provider/ 和http://ip:8030這兩種方式都可以訪問(wèn)到該項(xiàng)目。
后期補(bǔ)充:
上邊的是設(shè)置Context Path,使得默認(rèn)部署的時(shí)候會(huì)在webapps下作為一個(gè)單獨(dú)的容器,其實(shí)可以直接將其設(shè)置為/
,因?yàn)門(mén)omcat默認(rèn)的訪問(wèn)路徑指向的就是ROOT,所以如果設(shè)置為ROOT的話就不需要在進(jìn)行上邊的設(shè)置了,如下:
自動(dòng)部署war包到ROOT路徑,也就是網(wǎng)站的根目錄時(shí),deploy插件的”Context path”要填寫(xiě):”/”,而不是”ROOT”或者”/ROOT”,不然自動(dòng)部署會(huì)失敗,有類(lèi)似以下錯(cuò)誤:
其他問(wèn)題
1、部署項(xiàng)目的時(shí)候報(bào)錯(cuò)
這個(gè)大家很好理解,是因?yàn)橄螺djar失敗的問(wèn)題,由于是第一次使用Maven,需要第一次下載很多jar到Maven倉(cāng)庫(kù)中,由于網(wǎng)絡(luò)的問(wèn)題下載失敗,大家可以多次構(gòu)建讓他重新下載,或者直接到:https://repo.maven.apache.org/maven2 根據(jù)報(bào)錯(cuò)的jar,在maven2中找到自己缺失的jar,然后在/root/.m2/repository
相應(yīng)的位置添加jar即可。
2、編寫(xiě)腳本文件啟動(dòng)tomcat但是項(xiàng)目仍然運(yùn)行不起來(lái)
就是上邊說(shuō)道的問(wèn)題了:
添加:export BUILD_ID=dontKillMe
,因?yàn)樵搄ob啟動(dòng)完后執(zhí)行下一job,jenkins直接把tomcat進(jìn)程殺了,所以無(wú)論腳本中怎么寫(xiě)了啟動(dòng)tomcat的命令,他是不會(huì)啟動(dòng)的。
3、遇到下邊的問(wèn)題
這就是在系統(tǒng)設(shè)置的時(shí)候,設(shè)置的git的地址不對(duì),上述已經(jīng)說(shuō)明了,應(yīng)該是git的可執(zhí)行文件的地址,如果只是git的目錄,是無(wú)法找到git這個(gè)可執(zhí)行文件的,如下:
可以看出使用的是這個(gè):/usr/local/git/bin/git 進(jìn)行g(shù)it倉(cāng)庫(kù)的配置何代碼的拉取,因此這設(shè)置git的目錄,jenkins默認(rèn)是不會(huì)找bin目錄下的git可執(zhí)行文件的。
至此,Jenkins的部署完成,希望對(duì)大家有所幫助。也希望大家多多支持創(chuàng)新互聯(lián)。
網(wǎng)站名稱(chēng):使用Jenkins配置Git+Maven的自動(dòng)化構(gòu)建的方法
標(biāo)題網(wǎng)址:http://bm7419.com/article10/jdddgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、服務(wù)器托管、Google、企業(yè)建站、商城網(wǎng)站、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)