使用Azure Devops持續(xù)集成部署SpringBoot項目

-----很詳細的Az Devops部署java項目的文章

提示:
此文是本人打著想玩一玩devops的想法,來記錄的曹阔,用的是最直接簡單的方法來實現(xiàn)持續(xù)部署的,適合個人玩玩demo炼吴,內(nèi)容不一定適合實際生產(chǎn)峻仇,大家就當逛逛就行


好吧,切入正題,先簡單講講Azure Devops是什么:
簡介:

  • Azure Devops是MS Azure下的產(chǎn)品,提供devops自動集成和部署的服務平臺:
    是MS Azure下的產(chǎn)品,提供devops服務的平臺
    -----近年來devops的理念越來越被更多的人所提及, 敏捷開發(fā)模型下的CI連續(xù)集成, CD持續(xù)部署的概念也逐漸走向自動化, 而促成這些自動化的工具和服務又有許多種弓颈,如Jenkins篮洁,ElectricFlow和Azure Devops涩维,它們都是為了解決自動集成部署的難題的服務,我們今天要講的主角就是Azure Devops.

正式進入主題:
那么要完成使用Azure Devops自動集成部署一個Springboot項目我們需要那些準備工作呢?

第1步:
1.因為我們需要有自動部署連接的云服務器, 當然先要有一臺可遠程連接的云服務器啦,這里我選擇了騰訊的學生體驗服務器袁波,(當然你也可以使用阿里的)瓦阐,在使用微信掃碼支付0.01元實名認證后蜗侈,我免費獲取了一個體驗服務器,注意這里的root用戶的ip和密碼睡蟋,我們在后面需要使用到

2.給你的云服務器安裝JDK,并配置好環(huán)境變量,
因為我買的云服務器莫得安裝JDK,所以我們需要安裝jdk,(如果你已經(jīng)安裝jdk,可以跳過這步)這里你可以選擇手動ssh連接你的云服務器安裝.

第2步: 需要有一個Azure Devops的賬號,這個賬號使用你的微軟賬戶登錄/郵箱注冊都行, 且是免費的.

注冊登陸后, 你需要創(chuàng)建一個組織和項目(例如我的組織190...項目名azure-devops,且是public的):

到此我們的準備工作已經(jīng)做好
第3步:
在本地新建一個以maven管理的Springboot Start Web項目,并在Controller層寫一個測試連接的Http api接口,在本地運行成功后, 提交到github倉庫
附:我的倉庫地址我的項目github:

第4步(使用Azure Devops的Pipelines構(gòu)建CI管道)
回到我們在第2步的頁面
點擊進入azure-devops項目, 選擇pipelines新建一個管道
(注意: 對于新的Azure DevOps帳戶踏幻,這里會自動帶你進入使用YAML構(gòu)建管道體驗,我們要提前在 點擊右上角頭像|Preview features|New YAML pipeline creation experience關(guān)閉這個選項)

選中g(shù)ithub,隨便取一個連接的名字,點擊驗證

驗證完你的github賬戶后,就可以選擇我們剛push到GitHub的springboot項目加入自動CI集成的管道:

點擊繼續(xù)后,我們找到Maven的編譯構(gòu)建模板任務組,點擊應用

可以看見中間的3個任務就是maven模板的任務,分別是在代理主機上根據(jù)pom測試構(gòu)建項目,復制構(gòu)建好的項目,上傳構(gòu)建的項目drop到CI管道,右邊是選擇代理的主機系統(tǒng),和pom文件位置

點擊Triggers配置我們的CI管道會根據(jù)github的提交自動集成測試,并且保存任務排隊

點擊左邊欄的Builds可以看到我們正在排隊運行的集成任務

點進我們的build任務中,等待云端代理主機運行任務后,可以看到我們所有的集成測試build工作已經(jīng)在代理主機上運行完成

點擊Maven項可以查看日志,提示構(gòu)建成功

點擊Copy Files項查看日志,可以看到我們項目的jar包在代理主機上已經(jīng)復制移動到某工作目錄

點擊Publish Artifac項查看我們在代理主機工作目錄中的項目文件已經(jīng)上傳到我們的CI管道目錄下


到此我們的Springboot項目已經(jīng)通過CI管道自動集成了,接下來就是準備發(fā)布Releases工作了:

1.配置devops的連接服務通過ssh連接到我們的云服務器

其中host name是云服務器的公網(wǎng)ip,密碼是云服務器的初始root賬戶密碼
image.png

準備工作好了后

回到Devops點擊右邊的Releases,選擇New一個發(fā)布管道,選擇一個空的Empty job工作

選擇我們要發(fā)布的項目,選擇我們從CI管道build的項目,點擊添加

設(shè)置我們的發(fā)布管道的觸發(fā)條件是自動

給部署的第一Stage1的工作臺更名為copyJAR,并點擊3進入設(shè)置任務

進入后給工作添加任務,選擇添加ssh復制文件任務

點擊編輯任務,其中SSH service connection填我們在前面配置的連接云服務的ssh連接名,Source folder選擇到..../target這一級,因為target下存放的是我們的jar包文件, **表示該目錄下的所有文件, 最后目標目錄選擇/tmp, 這樣jar包文件就可以發(fā)送到云服務器主機的/tmp下(注意目標目錄最好是所有人可操作權(quán)限(文件是綠色的),以免出現(xiàn)無權(quán)操作報錯)

再點擊Tasks左邊的選項pipeline回到工作臺,并再新建一個工作命名為RunSpringboot

進入RunSpringboot添加任務,步驟和上個工作一樣,這里我們添加ssh遠程執(zhí)行命令

添加遠程運行jar包的命令來運行我們的項目(注意由于ssh遠程直接運行命令可能會讀取不到云主機的環(huán)境變量配置,導致提示java命令未找到,所以這里寫成全路徑來執(zhí)行jar文件), 我們的第一條命令:
kill -9 $(netstat -nlp | grep :8080 | awk '{print $7}' | awk -F"/" '{ print $1 }')是表示查詢8080端口的進程id并kill停止它, 以免在發(fā)布新版本的時候提示端口被占用, 第二條命令:
nohup /usr/java/jdk1.8.0_201/bin/java -jar /tmp/azure-demo-0.0.1-SNAPSHOT.jar > log.file 2>&1 &表示后臺啟動運行jar文件,并把日志打印到log.file文件中
最后點擊Save保存工作

到此我們的CD持續(xù)部署的管道就搭好了, 我們?nèi)ハ仁謩影l(fā)布一次:
點擊左邊Releases選項,點擊Create a release,點擊Create

可以看到我們的發(fā)布工作已經(jīng)在排隊運行!

點擊進入查看發(fā)布任務進度,我們的RunSpringboot,的任務已經(jīng)成功!

我們在瀏覽器輸入 云主機ip:8080/test/sayHi 訪問, 果然我們的項目已經(jīng)啟動了!!!

接下來我們將在本地修改代碼并提交一次到github,以驗證我們的自動集成部署是否已經(jīng)成功

1.在本地修改,并提交push到github倉庫:

2.查看devops的構(gòu)建管道,發(fā)現(xiàn)我們剛才的提交已經(jīng)在自動集成測試構(gòu)建了:

3,集成測試完成后,點擊到發(fā)布管道,發(fā)現(xiàn)我們新的提交版本已經(jīng)在自動部署了:

4.部署完成后,再次訪問 云主機ip:8080/test/sayHi, 更新的版本已經(jīng)發(fā)布運行成功!!!

到此,本文章就結(jié)束了,我們實現(xiàn)了在本地更新代碼,修改成一個穩(wěn)定的版本后,直接push到github的主分支,我們就可以回家睡覺了,而我們此次版本的修改會通過Azure Devops自動集成發(fā)布,這樣所有連接我們的服務的請求就都有了這次新的更新.

(我在寫演示的過程中,并不是一次成功的,我重新修改任務命令發(fā)布了幾次,所以發(fā)布的版本號來到了18,但本文章是最后我完全可以一次運行成功的截圖版本,所以在發(fā)布的版本號上有點不同,不過不影響大致流程)

(演示中我們關(guān)閉了使用YAML文件來構(gòu)建管道,其實YAML文件就是用來描述我們每個自動集成部署階段要執(zhí)行的任務戳杀,和我們手動設(shè)置管道任務一樣该面,具體使用YAML構(gòu)建可以看這里官方文檔)

其實Azure Devops的玩法還可以有許多種,它支持很多語言框架和容器的自動集成部署,比如ASP.NET, Node.js的NPM, Python, Docker容器等,并且可定制性高,各位大佬可以根據(jù)官方文檔自行摸索,并且結(jié)合MicroSoft 的Azure云計算服務平臺還有更豐富的玩法,不過由于Azure的使用有點復雜,這篇文章中我也就沒有用到Azure的服務(主要是注冊Azure的國際賬戶需要VISA信用卡,我沒有,而且我也不會玩Azure哈哈哈),而是使用了最簡單的云服務ssh連接來完成自動集成部署.

最后謝謝閱讀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市豺瘤,隨后出現(xiàn)的幾起案子吆倦,更是在濱河造成了極大的恐慌,老刑警劉巖坐求,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚕泽,死亡現(xiàn)場離奇詭異,居然都是意外死亡桥嗤,警方通過查閱死者的電腦和手機须妻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泛领,“玉大人荒吏,你說我怎么就攤上這事≡ㄐ” “怎么了绰更?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锡宋。 經(jīng)常有香客問我儡湾,道長,這世上最難降的妖魔是什么执俩? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任徐钠,我火速辦了婚禮,結(jié)果婚禮上役首,老公的妹妹穿的比我還像新娘尝丐。我一直安慰自己,他們只是感情好衡奥,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布爹袁。 她就那樣靜靜地躺著,像睡著了一般矮固。 火紅的嫁衣襯著肌膚如雪失息。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音根时,去河邊找鬼瘦赫。 笑死,一個胖子當著我的面吹牛蛤迎,可吹牛的內(nèi)容都是我干的确虱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼替裆,長吁一口氣:“原來是場噩夢啊……” “哼校辩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辆童,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宜咒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后把鉴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體故黑,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年庭砍,在試婚紗的時候發(fā)現(xiàn)自己被綠了场晶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡怠缸,死狀恐怖诗轻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揭北,我是刑警寧澤扳炬,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站搔体,受9級特大地震影響恨樟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嫉柴,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一厌杜、第九天 我趴在偏房一處隱蔽的房頂上張望奉呛。 院中可真熱鬧计螺,春花似錦、人聲如沸瞧壮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咆槽。三九已至陈轿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背麦射。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工蛾娶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人潜秋。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓蛔琅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親峻呛。 傳聞我的和親對象是個殘疾皇子罗售,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355