Jenkins在Java web項目CI/CD中的簡單應用

Jenkins

Jenkins is a self-contained, open source automation server which can be used to automate all sorts of tasks related to building, testing, and delivering or deploying software.
  • 主要介紹使用Jenkins來達到持續集成持續交付/持續部署(CICD)的一些方案和選擇,不涉及Jenkins的深刻研究。
  • 實現CI/CD的方式有不少種,本文介紹的只是我這幾天一些粗略的摸索,僅供你們參考。

1、安裝

  • Jenkins的安裝方式有不少選擇,這裏不作詳細討論,我此次採用了比較熟悉的部署WAR包的方式,將其部署到tomcat上來運行。

圖片

  • 部署完成以後訪問相應地址便可,這是會提示新建用戶,你們按照指引一步一步完成便可,不作贅述。

2、新建任務

  • Jenkins部署完成以後,接下來便要進入正題了,新建一項任務,已達到CICD的目的。
  • 首頁左側菜單按選擇新建任務-》輸入任務名稱-》構建一個自由風格的軟件項目-》肯定(這裏我已經建立過一個名爲test的項目了)

圖片
圖片

  • 點擊肯定後進入了該項目的配置頁面,先總覽全部的配置項,共有六項:General,源碼管理,構建觸發器,構建環境,構建,構建後操做.從字面意思上不難理解。html

    • General,一些通用的信息,本次不作重點;
    • 源碼管理,構建的來源,git,svn,亦或是其餘一些源碼管理服務;
    • 構建觸發器,以何種規則自動觸發源碼的構建(持續構建),若該項不作任何配置,則只能手動觸發;
    • 構建環境,本次也未作關鍵性修改;
    • 構建,以何種方式構建,maven, gradle, 亦或是其餘;
    • 構建後操做,成功構建以後的一些操做,持續交付/持續部署的操做主要放到這一塊。

圖片

接下來分別較少這幾項配置,以及用到的插件,已完成CI/CD的目標。git

1. General

  • 本次並無作一些關鍵的修改

圖片

2. 源碼管理

  • 只說明git的一些相關配置,其餘的源碼管理服務同理

圖片

  • Repository URL: git上的源碼地址
  • Credentials: 用戶名/密碼
  • Branch Specifier:指定須要構建的分支
  • 上邊這些作完後其實基本上已經能夠了,之因此修改Advanced clone behaiours,是防止第一次構建時拉取源碼超時,默認超時時間爲10minutes,屢次構建失敗後,我把此處修改成了20minutes,若是依舊超時,可延長此處時間,或檢查網絡(點擊Additional Behaviours旁邊的add,選擇Advanced clone behaiours)github

    • Shallow clone,Shallow clone depth:淺拷貝,節省拷貝時間和磁盤空間

3. 構建觸發器

  • 實現觸發構建的方式主要有定時觸發、web hook觸發,這些觸發方式能夠單獨使用,也能夠組合使用。

3.1 定時觸發

圖片

  • 定時構建部署,可控制頻率

3.2 Gitlab Hook插件

  web hook觸發主要介紹gitlab hook插件,接下來咱們先保存已經完成的配置,回到首頁,下載所需插件。
圖片shell

  可選插件中搜索gitlab,勾選列表中的GitLab Plugin和Gitlab Hook Plugin, 選擇直接安裝。待安裝完成後回到首頁,點擊右邊剛剛咱們建立的任務,而後點擊配置回到咱們以前的配置頁面。
圖片tomcat

  此時發現構建觸發器中多了個選項:Build when a change is pushed to GitLab. GitLab CI Service URL: http://172.16.192.142:9081/jenkins/project/test,若是仍然沒有,嘗試重啓Jenkins以後查看。
圖片安全

  圖中紅框上邊爲Gitlab Web Hook處須要添加的URL,若Jenkins設置了不容許匿名用戶執行構建操做,則須要在Gitlab安全令牌處添加第二個紅圈處的Secret token。bash

  • Gitlab處須要增長的配置(設置-》集成,注意登陸帳戶須要有相應權限)

圖片

  • 隨時提交,隨時構建,快速相應開發人員的操做,但須要開發人員提交代碼的時候確保提交可用,屢次commit一次push,除非緊急須要儘可能在午休時間,早上上班前,晚上下班後push代碼
  • 參考資料:Gitlab利用Webhook實現Push代碼後的jenkins自動構建

4. 構建環境

5. 構建

  • 構建部分主要採用了maven構建,確保部署Jenkins的機器已經配置好了maven環境,maven的配置不作贅述。

圖片

6. 構建後操做

  • 使用maven構建打包完成後,與pom.xml同級的target目錄下會生成一個war包(取決於pom.xml中的配置,對pom.xml的配置不作描述),接下來咱們要作的就是將生成的war包部署到中間件或容器中,下面主要介紹兩個插件,能夠根據實際狀況有選擇的使用,使用以前首先須要參考以前介紹的步驟下載相應插件。

6.1 Deploy to Container插件

  • 達到效果:構建前需保證目標中間件正常啓動,每次Jenkins構建時會把指定的war包自動部署到指定的服務器上的context path中,若是目標服務已存在,首先undeploy目標服務,再把新的war包redeloy上去,已完成自動部署的功能。
  • 僅支持GlassFish,JBoss,Tomcat

圖片

  1. 增長構建後操做步驟中選擇Deploy war/ear to a container
  2. WAR/EAR files中填上所須要部署的程序包,支持**/*.war的形式
  3. Context path配置程序相對於中間件環境的發佈路徑
  4. 本文中Containers我選擇了Tomcat 7.x,Credentials須要在tomcat裏配置上,Tomcat URL即環境的基礎地址服務器

    • 在tomcat中添加受權用戶:修改conf/tomcat-users.xml
    <role rolename="manager-script"/>
    <user username="caozeal" password="******" roles="manager-script"/>
![圖片](https://github.com/caozeal/pictureStorage/blob/master/201803/Jenkins1.jpg?raw=true)
  1. 只是作上邊這些配置的話,你會發現Jenkins的自動部署僅支持第一次,已有舊版應用運行時,自動部署會報undeploy失敗,緣由是在應用運行時,tomcat會對應用的資源進行鎖定,致使沒法覆蓋更新,這時需修改tomcat的另外一項配置:conf/context.xml(詳情可查看Tomcat中antiResourceLocking和antiJARLocking的做用
<Context antiJARLocking="true" antiResourceLocking="true">

圖片

6.2 Publish Over SSH插件

  • 經過SSH操做目標服務,從而傳輸文件,執行命令已達到目的
  • 更靈活,支持各類中間件服務器
  • 首先在系統設置中配置上所需鏈接的遠程服務器,配置上相關配置,其中Remote Directory是訪問服務器的基礎路徑,以後步驟能用到

圖片

  • 而後回到任務配置繼續配置構建後操做一塊

圖片

    • Remote directory 遠程服務器文件夾,空即爲默認的上邊步驟配置的路徑,若是此處不爲空,即爲相對路徑
    • Remove prefix 去除前置路徑
    • Exec command 執行腳本,此處的腳本比較簡單,調用目標中間件的中止與啓動
    • 須要注意的是執行腳本的時候有個坑,讀取不到系統的環境變量,緣由是此處執行腳本的方式爲non-interactive + non-login shell,不會讀取/etc/profile中的配置,此處的解決方案是採用bash執行命令,因爲bash恆執行BASH_ENV中的變量,所以須要把/etc/profie賦值到BASH_ENV中,詳細解決思路參考連接網絡

    3、其餘

    • 至此已經完成了從開發人員push代碼到應用構建、部署等相關操做的基本自動流程,具體細節部分還須要繼續深刻研究探索
    • 遺留問題:

      • Jenkins構建的時候控制檯亂碼

      • 自動構建部署的時候,Jenkins調用命令啓動StartTAS.sh的時候會一直監聽啓動日誌,直到超時才斷開連接,這時候因超時而致使本次構建爲黃燈,即不穩定的構建
    相關文章
    相關標籤/搜索