首先須要理解的是,Jenkins是幫咱們將代碼進行統一的編譯打包、還能夠放到tomcat容器中進行發佈。java
意思是咱們經過配置,將之前:編譯、打包、上傳、部署到Tomcat中的過程交由Jenkins,Jenkins經過給定的代碼地址URL(git或者svn上代碼路徑,開發只須要將本地代碼提交到這個目錄下)將代碼拉取到其「宿主服務器」(這是我我的的稱呼,在下邊會用到,就是Jenkins的安裝位置),進行編譯、打包和發佈到容器中。git
所以咱們能夠注意到的是,在Jenkins的宿主服務器中必需要有能夠進行:代碼clone(Git)、代碼編譯(Maven)、代碼運行(Tomcat)的基本環境,其餘文章上來就是安裝jenkins,忽略了一些基本的配置。github
下邊就開始講解各部分的安裝過程,若是已經安裝某一步的環境,則能夠以此進行下一步。web
一、安裝依賴spring
sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
注意:perl-ExtUtils-MakeMaker 也是這些安裝列表中的一員,不要由於顯示的換行形成你們認爲是兩條執行命令。shell
二、下載Gitapache
選擇一個目錄,存放下載的git,例如個人是:/home/xuliugen/tmp,你們能夠根據需求到官網下載相應的版本vim
wget https://github.com/git/git/archive/v2.3.0.zip
三、解壓gittomcat
下載以後是這樣的,不要感到奇怪,直接解壓便可ruby
由於下載的是一個zip,因此使用命令將其解壓到git目錄下:
#參數-d 後邊的是解壓到的目錄 unzip v2.3.0 -d git
四、編譯安裝git
進入git目錄
將其安裝在「/usr/local/git」目錄下,命令以下:
make prefix=/usr/local/git all sudo make prefix=/usr/local/git install
五、配置Git
sudo vim /etc/profile #編輯profile文件
而後而已看到這個文件已經有不少配置了,只須要在最下邊添加git的路徑便可:
export PATH=/usr/local/git/bin:$PATH
將這段話放在最後邊,而後使用source命令應用修改:
source /etc/profile
六、檢驗Git是否安裝成功
git --version
一、下載和解壓Maven
Maven的安裝包下載能夠根據需求找到合適的版本,解壓以後,個人位置是:
二、配置Maven
編輯:~/.bash_profile文件,根據註釋相應的修改便可
# 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所在的目錄,注意這個目錄下應該有bin文件夾,bin下應該有java等命令 export JAVA_HOME=/usr/lib/jvm/jre-1.7.0
而後運行:source ~/.bash_profile 應用修改
三、查看Maven是否安裝成功
使用:mvn -version 便可查看結果
Jenkins的安裝很簡單,直接將war放到容器中進行運行便可
一、將jenkins放到Tomcat中並解壓,啓動Tomcat,成功啓動以後訪問ip和端口以下:
啓動成功以後,進入的界面如上,表示啓動成功。
二、安裝插件
在進行配置以前,因爲使用的是Git拉去代碼的方式,因此要首先安裝插件
找到:插件管理 在「可選插件」界面使用ctrl+f 搜索:Deploy to container Plugin 插件(這個是支持將代碼部署到tomcat容器的)
勾選,點擊下邊的按鈕:直接安裝,這個可能時間較久,等待便可。
安裝完以後,若是勾選了:安裝完成後重啓jenkins 那麼會重啓jenkins。
而後安裝:GIT plugin,何上邊的步驟同樣,若是使用上述的方式,因爲網絡的緣由,可能會安裝失敗,這就須要咱們使用另外一種方式進行安裝。
使用一樣的方式在「可選插件」中搜索GIT plugin,找到以後點擊藍色連接(最好右鍵在新窗口中打開,放置覆蓋jenkins界面)
會跳轉到Git Plugin的插件信息地址:
能夠看到Plugin ID爲:git,而後在:http://updates.jenkins-ci.org/download/plugins/ 這地地方搜索(ctrl+f)便可找到,點進去,選擇一個版本進行下載:
點進去下載的是一個hpi文件
而後一樣的在:系統管理–管理插件–高級Tab中,下拉能夠看到上傳插件,而後選擇文件上傳剛纔下載的hpi文件,便可,上傳完以後,會自動安裝。上述安裝Deploy to container Plugin的方式也能夠採用這種方式。
都安裝完以後,在已安裝Tab中能夠看到剛安裝的插件:
三、進行配置
看到上圖中的左側有一個:系統管理 點擊去
上邊的第一行黃色信息,表示編碼問題,在Tomcat–>conf–>server.xml文件中修改便可
四、Jenkins系統設置
點擊:系統設置這裏沒有強調的都設置爲默認便可。
(注意:版本2.60.2是在:系統設置–>Global Tool Configuration下)
(1)JDK,別名是任意的,選擇本身jdk的位置,jenkins推薦使用sun jdk而不是openjdk
(2)Git 的配置
注意這裏的git位置,是可執行文件的地址,便是git–bin–下的可執行文件 git的目錄(相似於java中bin下的java可執行文件位置)
若是填錯,後期回報沒法找到git等錯誤(最下邊,其餘問題下的第三個問題),請你們注意!
(3)Ant的配置
因爲本次並無用到Ant,不作配置,你們能夠根據配置進行設置
(4)Maven的配置,選擇本身maven的存放位置
(5)Jenkins Location
這裏配置的是ip加端口和一個路徑名稱,郵箱要進行設定,後期會發送jenkins執行的結果到郵件中
(6)郵件通知
這裏我配置的QQ郵箱,你們根據狀況進行設置相應的smtp服務器,用戶名、密碼分別爲本身的QQ郵箱何密碼,若是不進行設置,後期jenkins構建項目的時候會報錯,報錯信息很好理解也很好找到是沒有配置郵件的問題。
首先,要保證郵件的smtp和pop是開啓狀態的,這樣的話才能夠經過驗證:
最後點擊下邊的應用、保存便可
五、Configure Global Security
而後回到系統管理,看到Configure Global Security 點擊進去,根據下邊進行配置便可
點擊應用 保存以後,而後在屏幕的右上角,有一個登陸-註冊 ,點擊註冊便可實現用戶的登陸。
這裏,若是是公司內網的話,或者最後搭建的jenkins是公司使用,那麼最好用戶名和密碼爲公司的帳戶密碼,郵件也是公司的郵件,這樣的話方便後期的操做。
至此Jenkins的基本配置完成。
一、建立項目
點擊登陸以後,會看到下邊的界面中:My Views
點擊進去
點擊:建立一個新任務
選擇maven項目,點擊OK,這裏的Item名稱是後邊須要用到的,下邊的配置也有用到這個的,你們能夠很好的對應。
二、進行項目的配置
(1)源碼管理選擇Git,這個時候添加url以後,下邊會報錯,顯示讓去認證,認證便可(其餘的安裝中又遇到這個問題),若是認證失敗,請下載認證Github Authentication plugin插件,這個在插件管理的可選插件中搜索安裝。
我這裏的rul是我在gitos上的一個項目,credentials是我在gitos上的用戶名和密碼認證。
(2)構建觸發器,就是何時執行jenkins的自動化部署
選擇第一個,其餘的基本是定時執行什麼的,你們能夠自行查找,查看如何設置,根據須要進行配置
(3)Post Steps
選擇上圖中的,而後下邊 的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的位置和目標容器的位置,很顯然咱們是知道的。
一、腳本文件的頭,這個沒得說
#!/bin/bash
二、環境變量設置
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可是訪問項目地址是訪問不了的,這在:其餘問題的第二個說明了這個問題。
三、其餘路徑位置
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的位置,進行設置。
四、耳熟能詳的執行命令
下邊就是咱們在使用原始方式,部署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是何Jenkins的宿主服務器是在一塊兒的,這很顯然不符合咱們常規的公司及其部署的方案,一般是將編譯以後的代碼在運行到其餘的Tomcat服務器中的,下邊有兩種方式,將編譯以後的項目部署到遠程服務器中。
一、使用腳本的方式部署到遠程服務器
二、使用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這兩種方式均可以訪問到該項目。
後期補充:
上邊的是設置Context Path,使得默認部署的時候會在webapps下做爲一個單獨的容器,其實能夠直接將其設置爲/
,由於Tomcat默認的訪問路徑指向的就是ROOT,因此若是設置爲ROOT的話就不須要在進行上邊的設置了,以下:
自動部署war包到ROOT路徑,也就是網站的根目錄時,deploy插件的」Context path」要填寫:」/」,而不是」ROOT」或者」/ROOT」,否則自動部署會失敗,有相似如下錯誤:
一、部署項目的時候報錯
這個你們很好理解,是由於下載jar失敗的問題,因爲是第一次使用Maven,須要第一次下載不少jar到Maven倉庫中,因爲網絡的問題下載失敗,你們能夠屢次構建讓他從新下載,或者直接到:https://repo.maven.apache.org/maven2 根據報錯的jar,在maven2中找到本身缺失的jar,而後在/root/.m2/repository
相應的位置添加jar便可。
二、編寫腳本文件啓動tomcat可是項目仍然運行不起來
就是上邊說道的問題了:
添加:export BUILD_ID=dontKillMe
,由於該job啓動完後執行下一job,jenkins直接把tomcat進程殺了,因此不管腳本中怎麼寫了啓動tomcat的命令,他是不會啓動的。
三、遇到下邊的問題
這就是在系統設置的時候,設置的git的地址不對,上述已經說明了,應該是git的可執行文件的地址,若是隻是git的目錄,是沒法找到git這個可執行文件的,以下:
能夠看出使用的是這個:/usr/local/git/bin/git 進行git倉庫的配置何代碼的拉取,所以這設置git的目錄,jenkins默認是不會找bin目錄下的git可執行文件的。
至此,Jenkins的部署完成,但願對你們有所幫助。