1. 程式人生 > >Jenkins + maven + git 實現持續整合

Jenkins + maven + git 實現持續整合

前言

小編最近開發的專案 採用的是 : 前後臺分離,後臺只需要提供rest 風格 返回具有規則的json 資料即可,考慮到開發人員不能面對面的碰介面,想到用 jenkins 去 搭建一個 可 熱部署的 架構,這樣前臺只需要接收到通知 外網對介面即可,後臺這塊也只需要通過簡單的命令去部署,對開發帶來了便捷。

Jenkins其實就是一個工具,這個工具的作用就是呼叫各種其他的工具來達成你的目的。
Jenkins 是一個開源專案,提供了一種易於使用的持續整合系統,使開發者從繁雜的整合中解脫出來,專注於更為重要的業務邏輯實現上。同時 Jenkins 能實施監控整合中存在的錯誤,提供詳細的日誌檔案和提醒功能,還能用圖表的形式形象地展示專案構建的趨勢和穩定性。Jenkins可以做到持續編譯和釋出軟體專案,這使得開發者很容易把他們的改動整合到專案中,還讓使用者能更加便利的獲取編譯和測試版本;

一、什麼是持續整合(Continuous Integration)?
持續整合(CI)是一種軟體開發實踐,它倡導團隊開發成員協同工作,有需要的時候就對程式碼進行整合,不必要等到軟體開發後期才開始整合。通常,每次的整合都是通過自動化的構建來驗證,包括自動編譯、釋出和測試,從而儘快地發現整合錯誤,讓團隊能夠更快的開發內聚的軟體。
三、持續整合系統的組成
一個自動構建過程,包括自動編譯、分發、部署和測試等。
一個程式碼儲存庫,即需要版本控制軟體來保障程式碼的可維護性,同時作為構建過程的素材庫。
一個持續整合伺服器。本文中介紹的 Jenkins 就是一個配置簡單和使用方便的持續整合伺服器

地址http://mirrors.jenkins-ci.org/下載適合的Jenkins版本。


把得到的war包直接扔到tomcat下,啟動tomcat,Jenkins就安裝完畢
Global Tool Configuration配置環境
配置JDK、配置GIT、配置MAVEN
建立MAVEN專案
安裝MAVEN外掛:Maven Integration plugin
自動部署外掛:
Deploy to container Plugin

安裝和配置

下載 : 通用java包(.war)

到war 所在的目錄下,執行: java -jar jenkins.war 或者 放到 web 容器裡,tomcat jetty 都行。啟動容器

訪問地址 : http://localhost:8080/jenkins/

開啟後,回事一個安裝頁面,按照頁面提示順次安裝外掛即可, 之後會提示一個 註冊帳號密碼的頁面,註冊完成之後點選 註冊&完成 就到了我們的主頁面,後續的jdk maven 配置就是在這裡進行。

如果你想刪除jenkins 的話,你只需要去 root/ 找到隱藏檔案 .jenkins 資料夾刪除就行了,然後從啟linux 伺服器,想要重新安裝繼續上面的步驟。

這裡寫圖片描述

如果上面這個操作你沒有進行,伺服器關閉了,那麼當你在啟動服務時他會直接讓你輸入帳號密碼,預設:admin 密碼需要你去上圖中的紅色 磁碟路徑去vim 開啟,貼上複製即可。

這裡寫圖片描述

選擇 : 系統管理 --> 外掛管理 --> 安裝如下外掛 :

  1. 安裝MAVEN外掛:Maven Integration plugin
  2. 自動部署外掛: Deploy to container Plugin

**/以上那些是 小編 寫著玩的,踩了很多坑,寫不下了 如今終於搞出來了/

部署完成

根據上面的操作,部署一個jenkins 還是沒有問題,我們先不急著繼續操作,小編就是太著急,配置走了很多坑,還急著寫部落格,利用jenkins 我們配置持續整合,那麼你就要選擇了 :

jenkins + Svn + maven + tomcat
jenkins + Git+ maven + tomcat

不急著開啟上面的連結就看,最好你有一個全域性的認識在開始搞,小編最後成功了,藉助了三篇博文加一個視訊,結合著操作的。

重要 :

jenkins 持續整合 ,什麼是持續整合?,哦 , 原來它 把 git maven jdk tomcat 都 整合到了它自己身上,說白了,就是配置進去,當然這是你自己安裝的要配置,你也可以用 它 提供的功能去安裝,我這裡面是自己配置的。所以搞jenkins 希望你玩的透 git maven ,他倆都不懂,你也不會理解 jenkins 是怎麼運作的,當然你可以照葫蘆畫瓢,一樣能用 。只是不懂原理而已。

上面說到了配置,怎麼配置 ? 在哪裡配置?配置什麼? 都是通過 jenkins 的外掛, 我們 需要去 系統管理–》外掛管理–》 已安裝裡面看看是否有 :

  1. Maven Integration plugin
  2. Deploy to container Plugin
  3. Git Plugin

沒有的話,就去可安裝的 tab 裡面去搜索安裝就行了,等待一會,下載很慢。

上面也說到了,我是在自己的伺服器安裝的maven git jdk 所以,我要在頁面配置 他們三個的地址, 就是 你linux 環境變數中 : /etc/profile 裡面的配置 :

系統配置–》全域性工具配置–》 如下圖 :

這裡寫圖片描述

需要說明的是 : 配置的 git 目錄 要指向 git 安裝目錄中bin/git 啟動項 。

用yum 配置git 也行,命令 :yum install -y git 。 下載完了,上圖中git 路徑配置成:/usr/bin/git 即可。

在伺服器安裝git , maven jdk 等,就不說了,可以參考上面 的 哪兩個博文。

說明 :

進行到了這一步,我建議各位看官先不要著急動手, 再來說道說道, git 用來幹什麼的?maven 用來幹什麼的? jdk ? tomcat?

我們需求就一個 : 利用jenkins 完成部署, 好聽點叫 “自動化部署” 。

所以 : jenkins 要 從git 拉取專案, 要用 maven 去 下載jar包, 要用maven 去 打jar 或者war 包, 要配置tomcat webapps 路徑 去把 打包好的war 傳承傳輸到 webapps 裡面,還要控制命令刪除老版本,重啟tomcat(還涉及到讀寫許可權)。我一通亂搞出現了沒有許可權的異常之後,我就 又安裝了個ssh 外掛到 jenkins 裡面,配置了 tomcat所在伺服器的 ssh 登入資訊,單純的講,這個外掛應該可有可無。

繼續搞起 :

建立一個maven 專案,點選首頁的 構建item :

這裡寫圖片描述

原始碼管理

這裡寫圖片描述

構建觸發器

這裡寫圖片描述

構建Email 通知,其他的看你需求了,我沒有配置 。

構建完以上 所有操作,可以儲存了,然後點選 :

這裡寫圖片描述

點選 : 立即構建,會在 圖中左下角 有一個載入的過程,可以點選載入處有一個 select 選項,點選控制檯 可以看到載入 日誌資訊 :

這裡寫圖片描述

Maven 控制檯日誌 :

這裡寫圖片描述

Jenkins 控制檯日誌 :

這裡寫圖片描述

到了這裡如果 你的日誌 最後是 SUCCESS 的話,那麼要恭喜你了,你 的專案用jenkins 構建完了,可以繼續配置tomcat 資訊,讓專案釋出到遠端的tomcat 中,如果沒有,根據日誌異常資訊解決你 構建的問題,

**部署到遠端tomcat **

我們點選 該專案的 左側tab 裡面的配置 ,滑倒最下面 :

這裡寫圖片描述

配置 : 構建後操作如上圖。 說明的是 : 你要給tomcat 配置角色和許可權 :
這裡需要進行設定的是遠端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"/>

// 採坑 : 我用的是 tomcat 8 .45.x 配置還是 403 配置的使用者名稱沒有寫許可權,配置了 jenkins 的ssh , 一頓搜尋,最後換成了 tomcat 8.0.x 版本, 配置上面的角色和許可權,好用 ,mmp 。(跟 ssh 外掛無關) , 第二點: 你的tomcat 要處於 啟動狀態。 
// 異常資訊
Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username you provided is not allowed to use the text-based Tomcat Manager (error 403)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:704)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:876)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:889)
	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:173)
	... 17 more
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://47.95.200.10:80//manager/text/list
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:571)
	... 20 more 

配置完成之後,儲存,繼續回到上一面選擇 “立即構建” ,控制檯最後的結果要是有 :

部署到tomcat成功日誌

這裡寫圖片描述

Deploying /root/.jenkins/workspace/znf4/znf4-web-boss/target/znf4-web-boss.war to container Tomcat 8.x Remote with context znf4-web-boss
  Redeploying [/root/.jenkins/workspace/znf4/znf4-web-boss/target/znf4-web-boss.war]
  Undeploying [/root/.jenkins/workspace/znf4/znf4-web-boss/target/znf4-web-boss.war]
  Deploying [/root/.jenkins/workspace/znf4/znf4-web-boss/target/znf4-web-boss.war]
Finished: SUCCESS

提示 :Finished: SUCCESS 去你 tomcat 安裝目錄下的webapps 看看是否有 maven打包好的 挖人 跟 解壓縮之後 資料夾。去瀏覽器測試你的專案把。

所謂的自動化部署,持續整合 你們都理解了把?? 有定時任務當然可以自動化, 整個流程,都是jenkins 去 協調 git maven jdk , tomcat 我們只需要把指令告訴 jenkins 即可, jenkins 當然也就是所謂的 “持續整合”。

追加 : 配置郵件服務

話不多說,直接粘貼出來配置 :

1). 肯定要先安裝外掛,雖然有預設,但是我用的2.9版本的jenkins 系統設定中有 相關配置,但是在專案的構建後操作裡面並沒有預設郵件外掛的配置 。

系統配置–》外掛管理 去下載外掛: Email Extension Plugin

系統配置–》系統配置 --》找到 Extended E-mail Notification:

部分一

這裡寫圖片描述

部分二

這裡寫圖片描述

Default Subject	: 構建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

Default Content : 
//文字
$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次構建日誌</title>
</head>

<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
    offset="0">
    <table width="95%" cellpadding="0" cellspacing="0"
        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
        <tr>
            <td>
                <h2>
                    <font>Hi C M L , 以下是${PROJECT_NAME}專案在Jenkins異常情況郵件通知</br>
                             (本郵件是程式自動下發的,請勿回覆!)</font>
                </h2>
            </td>
        </tr>
        <tr>
            <td>
                <br />
                <b><font color="#0B610B">構建資訊</font></b>
               <hr size="2" width="100%" align="center" />
             </td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>專案名稱 : ${PROJECT_NAME}</li>
                    <li>構建編號 : ${BUILD_NUMBER}</li>
                    <li>構建狀態 : ${BUILD_STATUS}</li>
                    <li>觸發原因 :${CAUSE}</li>
                    <li>構建日誌 : <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                    <li>工作目錄 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
                   
                </ul>
            </td>
        </tr>
 <tr>
        <tr>
            <td><b><font color="#0B610B">構建日誌:</font></b>
            <hr size="2" width="100%" align="center" /></td>
        </tr>
        <tr>
            <td><textarea cols="140" rows="30" readonly="readonly"
                    style="font-family: Courier New">${BUILD_LOG}</textarea>
            </td>
        </tr>
        <tr>
              <td><b><font color="#0B610B">變更集:</font></b>
              變更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
        </tr>

    </table>
</body>
</html>


配置上面那基礎即可, 要是想測試的話,可以用 預設外掛進行測試 :

這裡寫圖片描述

測試沒問題的話,證明你上面配置 Extended E-mail Notification 基本設定也沒問題,最後一件事去 專案裡面配置上我們剛才系統裡面配置的。

找到:專案–》配置–》構建後操作 --選擇新增構建後的操作步驟 :

這裡寫圖片描述

配置如下 :

接收列表配置接收人, cc: 開頭,多個人之間 用 ,號隔開。除了這個列表所有資訊都是預設資訊,
這裡寫圖片描述

需要配置的第二部分 :
這裡寫圖片描述

注意事項:

  1. 設定傳送端的郵箱要開啟 smtp 等服務(一共那麼幾個,全都開開就完了),設定的密碼不是你郵箱登入的密碼,是開啟服務後,會給你一個授權碼。
  2. qq 郵箱作為 郵件的傳送端,個人測試,預設的jenkins 外掛測試好用,但是在專案裡面也沒有設定 預設外掛的選項,所以 用預設測一下,配置的資訊有沒有錯誤可以,除了預設就是我上面用到的外掛,可以配置,但是我配置的是我qq 郵箱傳送到我的qq 郵箱,構建之後,提示傳送成功,郵件根本沒收到。 網上一頓查,說要用企業郵箱,我換成了我 騰訊企業郵箱(當然也需要開啟服務,拿到授權碼,自行百度),企業郵箱給 私人qq 郵箱發簡訊,成功。