感謝以前帶領過個人leader,讓我可以知道什麼是好的開發方法。java
在很早以前就接觸過敏捷開發。什麼是敏捷開發,簡單來講就是讓軟件可靠地,快速地發佈出來的一種開發方法和技巧。mysql
而敏捷開發中有許多的實踐,可能並非每一種實踐都適合於你的團隊,可是總有一種能幫助大家的團隊快速地將軟件可靠地,高可用地發佈出來。git
若是在讀這篇文章以前,尚未接觸過敏捷開發,那麼推薦一門敏捷開發入門的書籍:《硝煙中的scrum和xp》,這本書是一本敏捷開發的入門入籍,介紹了諸如:產品如何編寫backlog、怎麼準備sprint計劃、如何作回顧、如何作測試、如何管理scrum團隊等基礎的一些敏捷知識。這本書幫助了不少人瞭解了敏捷開發,是一本很經典的敏捷入門引導書。web
在咱們的開發部署工做中,有一些典型的反人類發佈軟件模式:redis
不管是本身編寫的系統,仍是系統所需的一些軟件:mysql、redis、git等,通通都是用手動部署的方式,每次須要發佈、更新,都要鏈接到服務器上,手動地部署其新版本(例如:先將本地的war包上傳到服務器的tomcat中,而後服務器上kill -9 xxx,從新啓動tomcat這樣),23333。。且不說這樣部署的人力成本很大,不知道部署的軟件是否有bug。而且還有必定的出錯機率,在互聯網競爭如此激烈的今天,這樣的部署,確定是不行的。spring
試想,若是有一種方法,當你本地Push代碼以後,只須要在網頁上點擊一個按鈕,或者點擊按鈕這一步都省略掉,再倒上一杯咖啡,你的系統已經部署到線上環境了,這樣的自動化,不是更人性化嗎sql
不少團隊表示,咱們必定要把系統所有coding完成,才向(類)生產環境部署系統,這樣有一個好處,就是你們更加專一於coding。不被打擾。可是也有一個壞處,就是沒法及時反饋出系統中的問題,你的boss也沒法知道系統究竟開發到什麼程度,boss也沒法向客戶/他的boss展現項目的進程。瀏覽器
及時反饋在軟件開發中是很是重要的,反饋得及時,能幫助軟件能快速發現並解決掉軟件中不少典型的問題:tomcat
那麼有的人就會說,每部署一次都很是麻煩,須要打包、上傳、部署配置、部署系統,並且容易出錯。一旦部署失敗,還要去看日誌,找到bug而且修復後,重複以上的所有操做。springboot
今天咱們要講解的jenkins就是解決這個問題的,只須要點擊一個按鈕就能夠部署git上的代碼,是否是特別方便。
將配置文件、變量都經過手工的方式去部署是很是不科學的,這不只須要一個部署專家,如果哪天這個專家請假或者離職,那麼大家的團隊便沒法部署了。並且手工部署還極其容易出錯,多臺服務器,須要屢次重複部署。
自動化是必然的趨勢,那麼典型的解決方案就是使用某個配置管理軟件,或者將配置放在某個具體的腳本中,這樣會使軟件發佈輕鬆不少
jenkins是一個開源軟件項目,基於java開發的一款持續集成(Continuous Integration)工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。
一切的目的都是快速反饋。
喏,下面就是這貨的圖標
猥瑣中帶着一絲優雅,23333。
jenkins的標語:
「Build great things at any scale」
「以任何規模建造偉大的事情」
Jenkins,以前叫作Hudson,因此若是你在jenkins的不少地方,看到hudson這個單詞,必定要知道他是jenkins的舊名字。
Jenkins是基於Java開發的一種持續集成工具,用於監控秩序重複的工做,包括:
下面是一個官網的簡單圖形介紹:
上面介紹了那麼多,估計你也沒看,咱們關心的只有軟件的使用方法(23333)。那麼咱們下面就進入jenkins的安裝和配置
首先,你的機器上面,須要安裝jdk、git、maven相關的運行環境,我這裏使用的jdk1.八、maven3.3.九、git2.16.2
jenkins安裝:
下載地址https://jenkins.io/download/,僅下載war包。這個下載就不須要截圖了吧。
獲得war包後,有兩種運行jenkins的方式
第一種方式啓動後,會在/home/xxxxx/.jenkins文件夾下構建jenkins的目錄。
你想知道第一種在哪構建這個目錄?我也不知道,本身試試咯,啓動後日志中有顯示位置
用瀏覽器訪問http://localhost:9004 (tomcat啓動,訪問http://lcoalhost:9004/jenkins),獲得如下頁面
而後輸入密碼就能夠了。。
密碼,你不知道什麼密碼?圖片中紅色的部分不是已經說了密碼在哪裏了嗎。打開文件,copy,paste就好了。
接下來就到了插件配置頁面,建議FQ進行安裝所須要的插件,或者如今直接選擇skip plugin installations跳過
設置成功以後,就跳轉到用戶名密碼配置頁面,這個用戶名和密碼用於之後的jenkins登陸
這是你以後用來登陸的用戶名密碼,最好記住哦~
噹噹噹當~~到這裏,你的Jenkins已經配置成功了,成功進入jenkins的主頁了!恭喜恭喜
那麼接下來,咱們就要開始搭建自動化部署的pipeline了。
什麼,你說什麼是Pipeline?好吧,簡單講解一下
喏,就是上面這貨,三個模塊,第一個模塊是構建模塊,用來執行單元測試+build項目造成二進制文件,因爲我使用的是Springboot,因此獲得的是一個jar包。第二個模塊是部署模塊,當第一個模塊構建成功(變綠),纔會觸發第二個模塊,若是第一個模塊單元測試或者運行失敗,當前模塊就會變紅,那麼就不會運行第二個模塊,固然,這個觸發是本身配置的。第三個模塊,就是線上環境了,第二個模塊運行成功後,就開始運行第三個模塊。
當你push了代碼以後,只須要點擊上面的Run那個按鈕,你的系統就已經部署到線上了,是否是很神奇。
你想要搭建這個玩意,首先,你須要給Jenkins安裝幾個插件,點擊這裏安裝插件
進去了以後,根據下圖進行安裝插件哦
你須要安裝的插件有:
安裝好以上插件後,進入上圖的installed,勾選上以上的這些插件,使其開啓使用。
配置好上述插件,接下來咱們就要來配置JDK,Maven,git環境了
注意:這些環境必須配置。
(這裏有一個小小的插曲,當初我並無配置這些環境,覺得Jenkins默認帶有的這些插件環境能夠生效,傻傻地運行等待了兩個小時。然而事實證實,並無什麼卵用,必需要配置這些東西。)
在上上張圖中,點擊
進行配置
你須要配置如下的東東,首先是JDK
將JDK配置到相應的bin目錄上級,也就是你的$JAVA_HOME位置
而後配置Git
注意:這個git有點日怪,他不是配置到bin目錄上級,須要配置到具體的可執行文件位置!看上圖中的文字Path to git executable。若是換成Java的話,就應該配置$JAVA_HOME/bin/javac 這個級別的,可執行文件~
最後配置Maven
這裏也是配置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 先建立個文件夾,方便之後多個項目分組方便
添加文件夾後,你的首頁上就會多出一個文件夾
其中outer是我文件夾的名字,名字隨意就好
點擊outer進入文件夾
再點擊左側的New Item ,而後建立Maven項目
點擊OK後進入配置頁面、這裏有幾個地方須要配置
先配置你的源代碼所在git位置,branch specifier能夠選擇你代碼的分支
general中配置,顯示幾天的幾個版本的之前的構建信息,方便查看錯誤日誌
Build Triggers中。勾選Poll SCM中的Schedule,這裏須要配置一個五位數的表達式
分別表明:分鐘,小時,天,月,星期幾
例如配置: 5 * * * * 表明每一個小時的第五分鐘構建
0 0 10 * * 表明每月10號構建
這個表達式有點像Spring task中的schedule表達式,不清楚的能夠去百度瞭解一下
配置maven的位置以及運行maven的命令,有機智的小夥伴就發現,爲何要使用Maven的package命令,而不是直接spring-boot:run運行呢。呵呵,我試過,運行後會直接阻塞,PipeLine壓根看不到結果是否成功,也無法結束。因此只能先打包再運行,運行腳本在第二個模塊中
勾選這玩意兒,用於刪除之前的項目
最後重點來了,就是下面這貨。這個等下再講,先配置上就好了。
第一步的Maven Project已經構建成功。接下來回到outer文件夾中,選擇New Item ,建立一個freestyle project
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。
固然,這裏的腳本只是一個最簡單的命令運行腳本,你也能夠將腳本放在git中,或者放在服務器上,每次構建就拉取新的腳本而且運行。這是一種思路,腳本的使用能夠很是靈活,不必定須要直接運行jar包。
到這裏,咱們的兩個項目就已經構建成功了。可是到如今尚未PipeLine的展現
回到outer文件夾中,點擊+按鈕,選擇build Pipeline View,並輸入pipeline的名字
接下來進入pipeline的配置頁面,在這個頁面中,在pipeline flow的upstream項,選擇以前的maven項目,個人是test_project
!
最後點擊OK。大功告成,你將看到以下頁面
這就是咱們前文中提到的Build PipeLine。點擊Run便可從git上拉代碼並運行項目到當前機器中了哦。
先運行第一個test_project,當第一個模塊運行單元測試、打包成功後,纔會觸發運行第二個模塊--即部署springboot.jar
那麼是怎麼觸發的呢
咱們回到以前沒有講解的一張圖
在途中咱們配置了幾個地方,
Projects to build:當項目構建完成,生成war包後,出發哪一個項目
Trigger when build is : stable -- 只有當前項目構建成功後,纔開始構建下一個freestyle project
除了stable還有其餘的幾個選項,
根據須要進行選擇須要什麼條件去觸發下一個模塊。例如:Failed,當失敗時構建下一個項目
Predefined parameters: 預約義變量,必配
只有配置了預約義變量,才能根據${BUILD_NUMBER} -- 構建號,${GIT_COMMIT}--git提交的版本號,根據這兩個變量去觸發下一個模塊,沒有這個配置,就沒法觸發下一個模塊.
以上。整個Pipeline就部署完成了。可是其實這只是部署的一個入門,提供了一個思路,Jenkins還有不少其餘的功能,例如構建失敗時發送郵件,自定義腳本,git代碼Push完成後當即觸發Run等等,Jenkins很是的靈活,功能也很是多,等待你本身去探索。
感謝閱讀此文章。