jenkins自動化部署--持續交付

原文鏈接:https://www.cnblogs.com/wangsongbai/p/10129429.html

Jenkins自動化部署——持續交付

感謝之前帶領過我的leader,讓我能夠知道什麼是好的開發方法。

在很早之前就接觸過敏捷開發。什麼是敏捷開發,簡單來說就是讓軟件可靠地,快速地發佈出來的一種開發方法和技巧。

而敏捷開發中有許多的實踐,可能並不是每一種實踐都適合於你的團隊,但是總有一種能幫助你們的團隊快速地將軟件可靠地,高可用地發佈出來。

如果在讀這篇文章之前,還沒有接觸過敏捷開發,那麼推薦一門敏捷開發入門的書籍:《硝煙中的scrum和xp》,這本書是一本敏捷開發的入門入籍,介紹了諸如:產品如何編寫backlog、怎麼準備sprint計劃、如何做回顧、如何做測試、如何管理scrum團隊等基礎的一些敏捷知識。這本書幫助了很多人瞭解了敏捷開發,是一本很經典的敏捷入門引導書。

chapter 1: 爲什麼要使用持續交付

在我們的開發部署工作中,有一些典型的反人類發佈軟件模式:

1.手工部署軟件

無論是自己編寫的系統,還是系統所需的一些軟件:mysql、redis、git等,統統都是用手動部署的方式,每次需要發佈、更新,都要連接到服務器上,手動地部署其新版本(例如:先將本地的war包上傳到服務器的tomcat中,然後服務器上kill -9 xxx,重新啓動tomcat這樣),23333。。且不說這樣部署的人力成本很大,不知道部署的軟件是否有bug。並且還有一定的出錯機率,在互聯網競爭如此激烈的今天,這樣的部署,肯定是不行的。

試想,如果有一種方法,當你本地Push代碼之後,只需要在網頁上點擊一個按鈕,或者點擊按鈕這一步都省略掉,再倒上一杯咖啡,你的系統已經部署到線上環境了,這樣的自動化,不是更人性化嗎

2.開發完成後才向類生產環境部署

很多團隊表示,我們一定要把系統全部coding完成,才向(類)生產環境部署系統,這樣有一個好處,就是大家更加專注於coding。不被打擾。但是也有一個壞處,就是無法及時反饋出系統中的問題,你的boss也無法知道系統究竟開發到什麼程度,boss也無法向客戶/他的boss展示項目的進程。

及時反饋在軟件開發中是非常重要的,反饋得及時,能幫助軟件能快速發現並解決掉軟件中很多典型的問題:

  1. 開發出的功能和boss想要的功能不一樣
  2. 軟件開發中沒被發現的bug
  3. 頁面實現和UI設計不一致等等。。。

那麼有的人就會說,每部署一次都非常麻煩,需要打包、上傳、部署配置、部署系統,而且容易出錯。一旦部署失敗,還要去看日誌,找到bug並且修復後,重複以上的全部操作。

今天我們要講解的jenkins就是解決這個問題的,只需要點擊一個按鈕就可以部署git上的代碼,是不是特別方便。

3.生產環境純手工配置管理

將配置文件、變量都通過手工的方式去部署是非常不科學的,這不僅需要一個部署專家,若是哪天這個專家請假或者離職,那麼你們的團隊便無法部署了。而且手工部署還極其容易出錯,多臺服務器,需要多次重複部署。

自動化是必然的趨勢,那麼典型的解決方案就是使用某個配置管理軟件,或者將配置放在某個具體的腳本中,這樣會使軟件發佈輕鬆很多

chapter 2: jenkins介紹

jenkins是一個開源軟件項目,基於java開發的一款持續集成(Continuous Integration)工具,用於監控持續重複的工作,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。

一切的目的都是快速反饋。

喏,下面就是這貨的圖標

Jenkins自動化部署——持續交付

 

猥瑣中帶着一絲優雅,23333。

jenkins的標語:

“Build great things at any scale”

“以任何規模建造偉大的事情”

Jenkins,之前叫做Hudson,所以如果你在jenkins的很多地方,看到hudson這個單詞,一定要知道他是jenkins的舊名字。

Jenkins是基於Java開發的一種持續集成工具,用於監控秩序重複的工作,包括:

  1. 持續的軟件版本發佈/測試項目。
  2. 監控外部調用執行的工作。

下面是一個官網的簡單圖形介紹:

Jenkins自動化部署——持續交付

 

chapter 3: jenkins安裝和配置

上面介紹了那麼多,估計你也沒看,我們關心的只有軟件的使用方法(23333)。那麼我們下面就進入jenkins的安裝和配置

環境準備:

首先,你的機器上面,需要安裝jdk、git、maven相關的運行環境,我這裏使用的jdk1.8、maven3.3.9、git2.16.2

jenkins安裝:

下載地址https://jenkins.io/download/,僅下載war包。這個下載就不需要截圖了吧。

得到war包後,有兩種運行jenkins的方式

  1. 命令啓動 java -jar 下載的war包名.war --httpPort=9004
  2. 將war包放在tomcat的webapps目錄下,啓動tomcat

第一種方式啓動後,會在/home/xxxxx/.jenkins文件夾下構建jenkins的目錄。

你想知道第一種在哪構建這個目錄?我也不知道,自己試試咯,啓動後日志中有顯示位置

Jenkins自動化部署——持續交付

 

用瀏覽器訪問http://localhost:9004 (tomcat啓動,訪問http://lcoalhost:9004/jenkins),得到以下頁面

Jenkins自動化部署——持續交付

 

然後輸入密碼就可以了。。

密碼,你不知道什麼密碼?圖片中紅色的部分不是已經說了密碼在哪裏了嗎。打開文件,copy,paste就行了。

接下來就到了插件配置頁面,建議翻牆進行安裝所需要的插件,或者現在直接選擇skip plugin installations跳過

Jenkins自動化部署——持續交付

 

設置成功之後,就跳轉到用戶名密碼配置頁面,這個用戶名和密碼用於以後的jenkins登錄

Jenkins自動化部署——持續交付

 

這是你之後用來登錄的用戶名密碼,最好記住哦~

噹噹噹當~~到這裏,你的Jenkins已經配置成功了,成功進入jenkins的主頁了!恭喜恭喜

Jenkins自動化部署——持續交付

 

那麼接下來,我們就要開始搭建自動化部署的pipeline了。

什麼,你說什麼是Pipeline?好吧,簡單講解一下

Jenkins自動化部署——持續交付

 

喏,就是上面這貨,三個模塊,第一個模塊是構建模塊,用來執行單元測試+build項目形成二進制文件,由於我使用的是Springboot,所以得到的是一個jar包。第二個模塊是部署模塊,當第一個模塊構建成功(變綠),纔會觸發第二個模塊,如果第一個模塊單元測試或者運行失敗,當前模塊就會變紅,那麼就不會運行第二個模塊,當然,這個觸發是自己配置的。第三個模塊,就是線上環境了,第二個模塊運行成功後,就開始運行第三個模塊。

當你push了代碼之後,只需要點擊上面的Run那個按鈕,你的系統就已經部署到線上了,是不是很神奇。

你想要搭建這個玩意,首先,你需要給Jenkins安裝幾個插件,點擊這裏安裝插件

Jenkins自動化部署——持續交付

 

進去了之後,根據下圖進行安裝插件哦

你需要安裝的插件有:

Jenkins自動化部署——持續交付

 

  • Build pipeline Plugin:沒有這個,就沒有PipeLine視圖
  • Build Time Out:構建超時插件
  • Deploy to Container Plugin:部署容器插件
  • Email Extension Plugin:發送郵件插件
  • Git
  • JDK Tool Plugin
  • PipeLine
  • Publish over ssh
  • Timestamper
  • Workspace Cleanup Plugin

安裝好以上插件後,進入上圖的installed,勾選上以上的這些插件,使其開啓使用。

配置好上述插件,接下來我們就要來配置JDK,Maven,git環境了

注意:這些環境必須配置。

(這裏有一個小小的插曲,當初我並沒有配置這些環境,以爲Jenkins默認帶有的這些插件環境可以生效,傻傻地運行等待了兩個小時。然而事實證明,並沒有什麼卵用,必須要配置這些東西。)

在上上張圖中,點擊

Jenkins自動化部署——持續交付

 

進行配置

你需要配置以下的東東,首先是JDK

Jenkins自動化部署——持續交付

 

將JDK配置到相應的bin目錄上級,也就是你的$JAVA_HOME位置

然後配置Git

Jenkins自動化部署——持續交付

 

注意:這個git有點日怪,他不是配置到bin目錄上級,需要配置到具體的可執行文件位置!看上圖中的文字Path to git executable。如果換成Java的話,就應該配置$JAVA_HOME/bin/javac 這個級別的,可執行文件~

最後配置Maven

Jenkins自動化部署——持續交付

 

Jenkins自動化部署——持續交付

 

這裏也是配置MAVEN_HOME哦。到bin目錄上級就可以了

在配置maven的setting.xml時,建議加上阿里的mirror,這樣運行時,下載依賴的速度可以快幾倍

在setting.xml中的<mirrors>標籤中添加以下代碼即可

<mirror> 
 <id>nexus-aliyun</id> 
 <mirrorOf>central</mirrorOf> 
 <name>Nexus aliyun</name> 
 <url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>

上述的Maven、JDK、Git軟件安裝就不再贅述。自行百度。

一切配置成功後,最好重啓下jenkins使上面的插件和環境生效,接下來開始構建Pipeline

回到首頁,點擊new Item 先創建個文件夾,方便以後多個項目分組方便

Jenkins自動化部署——持續交付

 

添加文件夾後,你的首頁上就會多出一個文件夾

Jenkins自動化部署——持續交付

 

其中outer是我文件夾的名字,名字隨意就好

點擊outer進入文件夾

再點擊左側的New Item ,然後創建Maven項目

Jenkins自動化部署——持續交付

 

點擊OK後進入配置頁面、這裏有幾個地方需要配置

先配置你的源代碼所在git位置,branch specifier可以選擇你代碼的分支

Jenkins自動化部署——持續交付

 

general中配置,顯示幾天的幾個版本的以前的構建信息,方便查看錯誤日誌

Build Triggers中。勾選Poll SCM中的Schedule,這裏需要配置一個五位數的表達式

分別代表:分鐘,小時,天,月,星期幾

例如配置: 5 * * * * 代表每個小時的第五分鐘構建

0 0 10 * * 代表每個月10號構建

這個表達式有點像Spring task中的schedule表達式,不清楚的可以去百度瞭解一下

Jenkins自動化部署——持續交付

 

配置maven的位置以及運行maven的命令,有機智的小夥伴就發現,爲什麼要使用Maven的package命令,而不是直接spring-boot:run運行呢。呵呵,我試過,運行後會直接阻塞,PipeLine壓根看不到結果是否成功,也沒法結束。所以只能先打包再運行,運行腳本在第二個模塊中

Jenkins自動化部署——持續交付

 

勾選這玩意兒,用於刪除以前的項目

Jenkins自動化部署——持續交付

 

最後重點來了,就是下面這貨。這個等下再講,先配置上就行了。

Jenkins自動化部署——持續交付

 

第一步的Maven Project已經構建成功。接下來回到outer文件夾中,選擇New Item ,創建一個freestyle project

Jenkins自動化部署——持續交付

 

build中填寫:

BUILD_ID=dontKillMe nohup java -jar /Users/xiangnan/.jenkins/workspace/outer/test_project/target/BootRedis-0.0.1-SNAPSHOT.jar &

BUILD_ID=dontKillMe nohup + & 的意思是讓其springboot運行成功後,到後臺去運行,不阻塞當前的pipeline。

Jenkins自動化部署——持續交付

 

當然,這裏的腳本只是一個最簡單的命令運行腳本,你也可以將腳本放在git中,或者放在服務器上,每次構建就拉取新的腳本並且運行。這是一種思路,腳本的使用可以非常靈活,不一定需要直接運行jar包。

到這裏,我們的兩個項目就已經構建成功了。但是到現在還沒有PipeLine的展示

回到outer文件夾中,點擊+按鈕,選擇build Pipeline View,並輸入pipeline的名字

Jenkins自動化部署——持續交付

 

接下來進入pipeline的配置頁面,在這個頁面中,在pipeline flow的upstream項,選擇之前的maven項目,我的是test_project

!

Jenkins自動化部署——持續交付

 

最後點擊OK。大功告成,你將看到如下頁面

Jenkins自動化部署——持續交付

 

這就是我們前文中提到的Build PipeLine。點擊Run即可從git上拉代碼並運行項目到當前機器中了哦。

先運行第一個test_project,當第一個模塊運行單元測試、打包成功後,纔會觸發運行第二個模塊--即部署springboot.jar

那麼是怎麼觸發的呢

我們回到之前沒有講解的一張圖

Jenkins自動化部署——持續交付

 

在途中我們配置了幾個地方,

Projects to build:當項目構建完成,生成war包後,出發哪個項目

Trigger when build is : stable -- 只有當前項目構建成功後,纔開始構建下一個freestyle project

除了stable還有其他的幾個選項,

Jenkins自動化部署——持續交付

 

根據需要進行選擇需要什麼條件去觸發下一個模塊。例如:Failed,當失敗時構建下一個項目

Predefined parameters: 預定義變量,必配

只有配置了預定義變量,才能根據${BUILD_NUMBER} -- 構建號,${GIT_COMMIT}--git提交的版本號,根據這兩個變量去觸發下一個模塊,沒有這個配置,就無法觸發下一個模塊.

總結:

以上。整個Pipeline就部署完成了。但是其實這只是部署的一個入門,提供了一個思路,Jenkins還有很多其他的功能,例如構建失敗時發送郵件,自定義腳本,git代碼Push完成後立即觸發Run等等,Jenkins非常的靈活,功能也非常多,等待你自己去探索。

感謝閱讀此文章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章