搭建jenkins
使用Jenkins配置Git+Maven的自動化構建
實現背景:Jenkins通過給定的代碼地址URL,將代碼拉取到其“宿主服務器”(就是Jenkins的安裝位置),進行編譯、打包和發布到容器中。在Jenkins的宿主服務器中必須要有可以進行:代碼clone(Git)、代碼編譯(Maven)、代碼運行(Tomcat)的基本環境
一、 安裝Git
1、安裝依賴
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
2、下載Git
選擇一個目錄,存放下載的git,例如我的是:/home/test/,大家可以根據需求到官網下載相應的版本
wget https://github.com/git/git/archive/v2.3.0.zip
3、解壓Git
因為下載的是一個zip,所以使用命令將其解壓到git目錄下:
unzip v2.3.0 -d git
4、編譯安裝Git
將其安裝在“/usr/local/git”目錄下,命令如下
make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install
5、配置環境變量
vim /etc/profile
export
PATH=
/usr/local/git/bin:$PATH
source /etc/profile
6、檢查是否安裝成功
git
--version
此處使用源碼安裝,也可以使用yum安裝:yum –y install git
二、 JDK、Maven安裝
1、 下載和解壓Maven
tar xf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9 /usr/local/maven
2、 安裝JDK
tar xf jdk-8u111-linux-x64.tar.gz
mv jdk1.8.0_111/ /usr/local/java
3、配置環境變量
vim /etc/profile
JAVA_HOME=/usr/local/java
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
export JENKINS_HOME=/home/test/tomcat/webapps/jenkins
JRE_HOME=/usr/local/java/jre
JAVA_BIN=/usr/local/java/bin
JRE_BIN=$JRE_HOME/bin
PATH=$PATH:$JAVA_BIN:$JRE_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JRE_HOME JRE_BIN JAVA_BIN PATH CLASSPATH
source /etc/profile
4、檢查是否安裝成功
java –version
mvn –version
三、 部署Jenkins
1、 將jenkins的war包放到Tomcat中並啟動Tomcat,成功啟動之後訪問ip和端口如下:
2、 安裝插件
系統管理à管理插件à可選插件à過濾
Deploy to container Plugin
Maven Integration plugin
SSH plugin
Windows Slaves Plugin
Email Extension Plugin
Subversion Plug-in
GIT plugin
3、 Jenjins系統設置
1) 系統管理àGlobal Tool Configuration
4、Jenkins Location
這裏配置的是ip加端口和一個路徑名稱,郵箱要進行設定,後期會發送jenkins執行的結果到郵件中
5、郵件通知
這裏我配置的QQ郵箱,大家根據情況進行設置相應的smtp服務器,用戶名、密碼分別為自己的QQ郵箱何密碼,如果不進行設置,後期jenkins構建項目的時候會報錯,報錯信息很好理解也很好找到是沒有配置郵件的問題。
首先,要保證郵件的smtp和pop是開啟狀態的,這樣的話才可以通過驗證:
最後點擊下邊的應用、保存即可
5、Configure Global Security
然後回到系統管理,看到Configure Global Security 點擊進去,根據下邊進行配置即可
點擊應用 保存之後,然後在屏幕的右上角,有一個登錄-註冊 ,點擊註冊即可實現用戶的登錄。
這裏,如果是公司內網的話,或者最後搭建的jenkins是公司使用,那麽最好用戶名和密碼為公司的賬戶密碼,郵件也是公司的郵件,這樣的話方便後期的操作。
至此Jenkins的基本配置完成。
創建Job
1、創建項目
點擊登錄之後,會看到下邊的界面中:My Views
點擊進去
點擊:創建一個新任務
選擇maven項目,點擊OK,這裏的Item名稱是後邊需要用到的,下邊的配置也有用到這個的,大家可以很好的對應。
2、進行項目的配置
(1)源碼管理選擇Git,這個時候添加url之後,下邊會報錯,顯示讓去認證,認證即可(其他的安裝中又遇到這個問題),如果認證失敗,請下載認證Github Authentication plugin插件,這個在插件管理的可選插件中搜索安裝。
我這裏的rul是我在gitos上的一個項目,credentials是我在gitlab上的用戶名和密碼認證。
(2)構建觸發器,就是什麽時候執行jenkins的自動化部署
選擇第一個,其他的基本是定時執行什麽的,大家可以自行查找,查看如何設置,根據需要進行配置
(3)Post Steps
Goals and options後填 clean package install -DskipTests
選擇上圖中的,然後下邊 的Execute shell如下,腳本的編寫在下邊進行了詳細的說明:
#!/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)郵件通知
至此基本設置完畢,點擊應用、保存
(5)立即構建
點擊左上角的立即構建
然後看到下邊的Build History 點擊藍色的進去,會進入Console
下邊是進行jar的下載,會下載到宿主服務器的maven倉庫中:
下邊的信息表示項目編譯通過:
下邊是運行腳本的信息:
腳本的分析
在Jenkins的服務器上查看:
可以看到在/root/.jenkins這個目錄,實際存放了Jenkins拉取Git代碼之後編譯好war的位置,到此,大家也許都該明白了,編譯後的位置就在這裏啊!然後,接著是部署到宿主服務器的Tomcat容器中,如何將編譯好的war放到tomcat中,這就需要腳本來完成,也是上述過程中配置的過程,下邊對每一行進行分析。
首先我們應該明白,將編譯好的war放到tomcat容器中,我們首先要知道這兩個的位置:編譯後war的位置和目標容器的位置,很顯然我們是知道的。
1、腳本文件的頭,這個沒得說
#!/bin/bash
2、環境變量設置
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
上邊的各個位置,大家也許都知道,CATALINA_HOME和CATALINA_BASE的位置就是Tomcat容器的位置,這裏根據需求我將Tomcat容器的名字改為dubbo-provider了,如果改成/home/xuliugen/tomcat是不是更好理解。
export BUILD_ID=dontKillMe這一句很重要,因為該job啟動完後執行下一job,jenkins直接把tomcat進程殺了,所以無論腳本中怎麽寫了啟動tomcat的命令,他是不會啟動的。雖然上述截圖中顯示了Tomcat started、server restarted但是訪問項目地址是訪問不了的,這在:其他問題的第二個說明了這個問題。
3、其他路徑位置
tomcat_path=/home/xuliugen/dubbo-provider
#我的Tomcat位置
project=dubbo-provider
#我的項目編譯的名稱
war_name=dubbo-provider
.war#最後打包的war名稱
war_path=http://
132.153.131.237/:
8022/jenkins/job/ManenDemo/ws/targetserver_port=
8082#宿主服務器的ip何端口
file_path=~/
.jenkins/jobs/ManenDemo/workspace/spring_provider/target
#編譯好的war包存放地址
這個:war_path 其實也就是Jenkins的宿主服務器位置IP,端口為jenkins運行的端口,大家只需要將ip地址端口ManenDemo換成自己的即可;
file_path:就是Jenkins幫我們編譯好的項目war的位置,上圖中大家也可以看到,並且大家不可以完全按照上邊的路徑,要找到自己宿主服務器上實際war的位置,進行設置。
4、耳熟能詳的執行命令
下邊就是我們在使用原始方式,部署war的命令,大家很簡單的可以理解,其中:
註意:個人寫腳本的能力有限,所以我是假設項目已經在運行的情況下,因此我上來就是先關閉Tomcat,(正確的方式,應該判斷端口是否打開,如果本身tomcat未啟動,我的這種情況,會在Jenkins的Console中報拒絕連接的問題,如下圖)。
另外用到了sleep 3s 這個可以讓線程休眠一下,這樣的話可以看一下tomcat的日誌信息。
下邊的腳本就是刪除原來容器中的文件,然後將編譯好的war移動到容器中,解壓。運行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"
將項目布署到遠程Tomcat
上述創建項目,可以看出是在本地進行執行的,也就是進行編譯後執行的Tomcat是何Jenkins的宿主服務器是在一起的,這很顯然不符合我們常規的公司及其部署的方案,通常是將編譯之後的代碼在運行到其他的Tomcat服務器中的,下邊有兩種方式,將編譯之後的項目部署到遠程服務器中。
1、使用腳本的方式部署到遠程服務器
采用ansible工具實現:
1)、首先在jenkins服務器上安裝ansible,安裝方式見ansible安裝文檔。
2)、在服務器上準備了兩個腳本:一個是停tomcat腳本,一個是啟動tomcat腳本;
3)、在ansible的hosts文件(一般放在/etc/ansible/),添加tomcat端的主機ip、ssh端口、用戶、密碼。
點擊:創建一個新任務
選擇maven項目,點擊OK,這裏的Item名稱是後邊需要用到的,下邊的配置也有用到這個的,大家可以很好的對應。
2、進行項目的配置
(1)源碼管理選擇Git,這個時候添加url之後,下邊會報錯,顯示讓去認證,認證即可(其他的安裝中又遇到這個問題),如果認證失敗,請下載認證Github Authentication plugin插件,這個在插件管理的可選插件中搜索安裝。
我這裏的rul是我在gitos上的一個項目,credentials是我在gitlab上的用戶名和密碼認證。
(2)構建觸發器,就是什麽時候執行jenkins的自動化部署
選擇第一個,其他的基本是定時執行什麽的,大家可以自行查找,查看如何設置,根據需要進行配置
(3)Post Steps
Goals and options後填 clean package install -DskipTests
選擇上圖中的,然後下邊 的Execute shell如下,腳本的編寫在下邊進行了詳細的說明:
將ansible命令文件裏面的內容根據自己的需要粘貼到上圖中的command處。
然後先點Apply—再點保存。
保存完成後執行立即構建。
2、使用Deploy to container Plugin
插件部署到遠程服務器
上述的開始階段就安裝了這個插件,下邊就開始發揮其作用。
在創建的Job左側點擊設置,其他配置何在遠程搭建項目是一致的,不同的是在這個地方:
以前我們在編譯之後,將編譯後的通過腳本補助到Jenkins的宿主服務器,使用插件,就不需要這種方式了。
還有就是的在構建之後,將編譯後的文件**/target/dubbo-provider.war
(就是上邊的~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target目錄)部署到下邊的遠程Tomcat容器中;這裏Containers的用戶名和密碼是Tomcat管理員的賬戶密碼,Tomcat URL 就是你需要進行部署的遠程Tomcat服務器的ip和端口。
這裏需要進行設置的是遠程Tomcat的管理員信息,修改遠程Tomcat容器下的conf–tomcat-users.xml文件,在內添加下邊的內容:
<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"/>
即可實現遠程的訪問,測試是可以通過的,但是有一個問題,通過這種方式,只將war復制到了wenapps下:
因此這種方式的話,我們訪問的時候必須是ip、端口和項目名,例如:
http:
//115.159.151.247:8030/dubbo-provider/
當然這種方式 也是在實際的應用中不提倡的,解決方式就是修改Tomcat默認的訪問路徑即可,設置Tomcat–conf–server.xml文件如下:
在Host節點之間添加:
<Context path=
""docBase=
"dubbo-provider"debug
=
"0"reloadable=
"true"/>
或者在docBase裏邊輸入項目的絕對路徑,例如我的:
<Context path=
""docBase=
"/home/xuliugen/dubbo-provider/webapps/dubbo-provider"debug
=
"0"reloadable=
"true"/>
然後重啟Tomcat,這樣的話,http://ip:8030/dubbo-provider/ 和http://ip:8030這兩種方式都可以訪問到該項目。
其他問題
1、部署項目的時候報錯
這個大家很好理解,是因為下載jar失敗的問題,由於是第一次使用Maven,需要第一次下載很多jar到Maven倉庫中,由於網絡的問題下載失敗,大家可以多次構建讓他重新下載,或者直接到:https://repo.maven.apache.org/maven2 根據報錯的jar,在maven2中找到自己缺失的jar,然後在/root/.m2/repository
相應的位置添加jar即可。
2、編寫腳本文件啟動tomcat但是項目仍然運行不起來
就是上邊說道的問題了:
添加:export BUILD_ID=dontKillMe
,因為該job啟動完後執行下一job,jenkins直接把tomcat進程殺了,所以無論腳本中怎麽寫了啟動tomcat的命令,他是不會啟動的。
3、遇到下邊的問題
這就是在系統設置的時候,設置的git的地址不對,上述已經說明了,應該是git的可執行文件的地址,如果只是git的目錄,是無法找到git這個可執行文件的,如下:
可以看出使用的是這個:/usr/local/git/bin/git 進行git倉庫的配置何代碼的拉取,因此這設置git的目錄,jenkins默認是不會找bin目錄下的git可執行文件的。
搭建jenkins