背景
最近安裝jenkins,參照網(wǎng)上的各種資料進(jìn)行嘗試,折騰了好久,但是查找了這么多資料,相似度在90%以上!!!,相同的安裝過程,測(cè)試了幾臺(tái)機(jī)器,未曾成功,不得不感慨自己能力有限,最終慢慢摸索,形成思路,現(xiàn)分享給大家,希望大家在安裝的時(shí)候少走彎路。
ps:本人很痛恨那種粘貼復(fù)制,毫無思考的博主,本想著拿著解決問題的心態(tài),但結(jié)果還是一樣,不但浪費(fèi)了大家的時(shí)間,還浪費(fèi)了大家的感情,所以,我把我遇到的問題和解決的方式記錄下來和大家分享。
知識(shí)背景
首先需要理解的是,jenkins是幫我們將代碼進(jìn)行統(tǒng)一的編譯打包、還可以放到tomcat容器中進(jìn)行發(fā)布。
意思是我們通過配置,將以前:編譯、打包、上傳、部署到tomcat中的過程交由jenkins,jenkins通過給定的代碼地址url,將代碼拉取到其“宿主服務(wù)器”(這是我個(gè)人的稱呼,在下邊會(huì)用到,就是jenkins的安裝位置),進(jìn)行編譯、打包和發(fā)布到容器中。
因此我們可以注意到的是,在jenkins的宿主服務(wù)器中必須要有可以進(jìn)行:代碼clone(git)、代碼編譯(maven)、代碼運(yùn)行(tomcat)的基本環(huán)境,其他文章上來就是安裝jenkins,忽略了一些基本的配置。
下邊就開始講解各部分的安裝過程,如果已經(jīng)安裝某一步的環(huán)境,則可以以此進(jìn)行下一步。
一、git的安裝
1、安裝依賴
1
|
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)的版本
1
|
wget https: //github.com/git/git/archive/v2.3.0.zip |
3、解壓git
下載之后是這樣的,不要感到奇怪,直接解壓即可
因?yàn)橄螺d的是一個(gè)zip,所以使用命令將其解壓到git目錄下:
1
2
|
#參數(shù)-d 后邊的是解壓到的目錄 unzip v2. 3.0 -d git |
4、編譯安裝git
進(jìn)入git目錄
將其安裝在“/usr/local/git”目錄下,命令如下:
1
2
|
make prefix=/usr/local/git all sudo make prefix=/usr/local/git install |
5、配置git
1
|
sudo vim /etc/profile #編輯profile文件 |
然后而已看到這個(gè)文件已經(jīng)有很多配置了,只需要在最下邊添加git的路徑即可:
1
|
export path=/usr/local/git/bin:$path |
將這段話放在最后邊,然后使用source命令應(yīng)用修改:
1
|
source /etc/profile |
6、檢驗(yàn)git是否安裝成功
1
|
git --version |
二、maven安裝
1、下載和解壓maven
maven的安裝包下載可以根據(jù)需求找到合適的版本,解壓之后,我的位置是:
2、配置maven
編輯:~/.bash_profile文件,根據(jù)注釋相應(yīng)的修改即可
1
2
3
4
5
6
7
8
|
# 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)之后訪問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)色鏈接(最好右鍵在新窗口中打開,放置覆蓋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)擊去
上邊的第一行黃色信息,表示編碼問題,在tomcat–>conf–>server.xml文件中修改即可
4、jenkins系統(tǒng)設(shè)置
點(diǎn)擊:系統(tǒng)設(shè)置這里沒有強(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的目錄(類似于java中bin下的java可執(zhí)行文件位置)
如果填錯(cuò),后期回報(bào)無法找到git等錯(cuò)誤(最下邊,其他問題下的第三個(gè)問題),請(qǐng)大家注意!
(3)ant的配置
由于本次并沒有用到ant,不做配置,大家可以根據(jù)配置進(jìn)行設(shè)置
(4)maven的配置,選擇自己maven的存放位置
(5)jenkins location
這里配置的是ip加端口和一個(gè)路徑名稱,郵箱要進(jìn)行設(shè)定,后期會(huì)發(fā)送jenkins執(zhí)行的結(jié)果到郵件中
(6)郵件通知
這里我配置的qq郵箱,大家根據(jù)情況進(jìn)行設(shè)置相應(yīng)的smtp服務(wù)器,用戶名、密碼分別為自己的qq郵箱何密碼,如果不進(jìn)行設(shè)置,后期jenkins構(gòu)建項(xiàng)目的時(shí)候會(huì)報(bào)錯(cuò),報(bào)錯(cuò)信息很好理解也很好找到是沒有配置郵件的問題。
首先,要保證郵件的smtp和pop是開啟狀態(tài)的,這樣的話才可以通過驗(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)用戶的登錄。
這里,如果是公司內(nèi)網(wǎng)的話,或者最后搭建的jenkins是公司使用,那么最好用戶名和密碼為公司的賬戶密碼,郵件也是公司的郵件,這樣的話方便后期的操作。
至此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名稱是后邊需要用到的,下邊的配置也有用到這個(gè)的,大家可以很好的對(duì)應(yīng)。
2、進(jìn)行項(xiàng)目的配置
(1)源碼管理選擇git,這個(gè)時(shí)候添加url之后,下邊會(huì)報(bào)錯(cuò),顯示讓去認(rèn)證,認(rèn)證即可(其他的安裝中又遇到這個(gè)問題),如果認(rèn)證失敗,請(qǐng)下載認(rèn)證github authentication plugin插件,這個(gè)在插件管理的可選插件中搜索安裝。
我這里的rul是我在gitos上的一個(gè)項(xiàng)目,credentials是我在gitos上的用戶名和密碼認(rèn)證。
(2)構(gòu)建觸發(fā)器,就是什么時(shí)候執(zhí)行jenkins的自動(dòng)化部署
選擇第一個(gè),其他的基本是定時(shí)執(zhí)行什么的,大家可以自行查找,查看如何設(shè)置,根據(jù)需要進(jìn)行配置
(3)post steps
選擇上圖中的,然后下邊 的execute shell如下,腳本的編寫在下邊進(jìn)行了詳細(xì)的說明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#!/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)目編譯通過:
下邊是運(yùn)行腳本的信息:
腳本的分析
在jenkins的服務(wù)器上查看:
可以看到在/root/.jenkins這個(gè)目錄,實(shí)際存放了jenkins拉取git代碼之后編譯好war的位置,到此,大家也許都該明白了,編譯后的位置就在這里啊!然后,接著是部署到宿主服務(wù)器的tomcat容器中,如何將編譯好的war放到tomcat中,這就需要腳本來完成,也是上述過程中配置的過程,下邊對(duì)每一行進(jìn)行分析。
首先我們應(yīng)該明白,將編譯好的war放到tomcat容器中,我們首先要知道這兩個(gè)的位置:編譯后war的位置和目標(biāo)容器的位置,很顯然我們是知道的。
1、腳本文件的頭,這個(gè)沒得說
1
|
#!/bin/bash |
2、環(huán)境變量設(shè)置
1
2
3
4
|
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)程殺了,所以無論腳本中怎么寫了啟動(dòng)tomcat的命令,他是不會(huì)啟動(dòng)的。雖然上述截圖中顯示了tomcat started、server restarted但是訪問項(xiàng)目地址是訪問不了的,這在:其他問題的第二個(gè)說明了這個(gè)問題。
3、其他路徑位置
1
2
3
4
5
|
tomcat_path=/home/xuliugen/dubbo-provider #我的tomcat位置 project=dubbo-provider #我的項(xiàng)目編譯的名稱 war_name=dubbo-provider.war #最后打包的war名稱 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è)人寫腳本的能力有限,所以我是假設(shè)項(xiàng)目已經(jīng)在運(yùn)行的情況下,因此我上來就是先關(guān)閉tomcat,(正確的方式,應(yīng)該判斷端口是否打開,如果本身tomcat未啟動(dòng),我的這種情況,會(huì)在jenkins的console中報(bào)拒絕連接的問題,如下圖)。
另外用到了sleep 3s 這個(gè)可以讓線程休眠一下,這樣的話可以看一下tomcat的日志信息。
下邊的腳本就是刪除原來容器中的文件,然后將編譯好的war移動(dòng)到容器中,解壓。運(yùn)行tomcat。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$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ù)器
上述的開始階段就安裝了這個(gè)插件,下邊就開始發(fā)揮其作用。
在創(chuàng)建的job左側(cè)點(diǎn)擊設(shè)置,其他配置何在遠(yuǎn)程搭建項(xiàng)目是一致的,不同的是在這個(gè)地方:
以前我們?cè)诰幾g之后,將編譯后的通過腳本補(bǔ)助到j(luò)enkins的宿主服務(wù)器,使用插件,就不需要這種方式了。
還有就是的在構(gòu)建之后,將編譯后的文件**/target/dubbo-provider.war
(就是上邊的~/.jenkins/jobs/manendemo/workspace/spring_provider/target目錄)部署到下邊的遠(yuǎn)程tomcat容器中;這里containers的用戶名和密碼是tomcat管理員的賬戶密碼,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)容:
1
2
3
4
5
|
<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)程的訪問,測(cè)試是可以通過的,但是有一個(gè)問題,通過這種方式,只將war復(fù)制到了wenapps下:
因此這種方式的話,我們?cè)L問的時(shí)候必須是ip、端口和項(xiàng)目名,例如:
1
|
http: //115.159.151.247:8030/dubbo-provider/ |
當(dāng)然這種方式 也是在實(shí)際的應(yīng)用中不提倡的,解決方式就是修改tomcat默認(rèn)的訪問路徑即可,設(shè)置tomcat–conf–server.xml文件如下:
在host節(jié)點(diǎn)之間添加:
1
|
<context path= "" docbase= "dubbo-provider" debug= "0" reloadable= "true" /> |
或者在docbase里邊輸入項(xiàng)目的絕對(duì)路徑,例如我的:
1
|
<context path= "" docbase= "/home/xuliugen/dubbo-provider/webapps/dubbo-provider" debug= "0" reloadable= "true" /> |
然后重啟tomcat,這樣的話,http://ip:8030/dubbo-provider/ 和http://ip:8030這兩種方式都可以訪問到該項(xiàng)目。
后期補(bǔ)充:
上邊的是設(shè)置context path,使得默認(rèn)部署的時(shí)候會(huì)在webapps下作為一個(gè)單獨(dú)的容器,其實(shí)可以直接將其設(shè)置為/
,因?yàn)閠omcat默認(rèn)的訪問路徑指向的就是root,所以如果設(shè)置為root的話就不需要在進(jìn)行上邊的設(shè)置了,如下:
自動(dòng)部署war包到root路徑,也就是網(wǎng)站的根目錄時(shí),deploy插件的”context path”要填寫:”/”,而不是”root”或者”/root”,不然自動(dòng)部署會(huì)失敗,有類似以下錯(cuò)誤:
其他問題
1、部署項(xiàng)目的時(shí)候報(bào)錯(cuò)
這個(gè)大家很好理解,是因?yàn)橄螺djar失敗的問題,由于是第一次使用maven,需要第一次下載很多jar到maven倉(cāng)庫(kù)中,由于網(wǎng)絡(luò)的問題下載失敗,大家可以多次構(gòu)建讓他重新下載,或者直接到:https://repo.maven.apache.org/maven2 根據(jù)報(bào)錯(cuò)的jar,在maven2中找到自己缺失的jar,然后在/root/.m2/repository
相應(yīng)的位置添加jar即可。
2、編寫腳本文件啟動(dòng)tomcat但是項(xiàng)目仍然運(yùn)行不起來
就是上邊說道的問題了:
添加:export build_id=dontkillme
,因?yàn)樵搄ob啟動(dòng)完后執(zhí)行下一job,jenkins直接把tomcat進(jìn)程殺了,所以無論腳本中怎么寫了啟動(dòng)tomcat的命令,他是不會(huì)啟動(dòng)的。
3、遇到下邊的問題
這就是在系統(tǒng)設(shè)置的時(shí)候,設(shè)置的git的地址不對(duì),上述已經(jīng)說明了,應(yīng)該是git的可執(zhí)行文件的地址,如果只是git的目錄,是無法找到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ì)大家有所幫助。也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/xlgen157387/article/details/50353317