成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

最佳實戰Docker持續集成圖文詳解

云計算
這是一種真正的容器級的實現,這個帶來的好處,不僅僅是效率的提升,更是一種變革:開發人員第一次真正為自己的代碼負責——終于可以跳過運維和測試部門,自主維護運行環境(首先是測試/開發環境)。難者不會,會者不難。通過簡單的4個配置,即可優雅地實現持續部署。

前言

關于Docker的文章鋪天蓋地,但精品文章往往翻譯居多。都說Docker天生適合持續集成/持續部署,但同樣,可落地、實際可操作性的文章也很罕見。

基于這些情況,雖然我們專欄定位為運維管理性文字,但本篇是個特例,實操性的案例講解——JAVA項目如何通過Docker實現持續部署(只需簡單四步),即:

開發同學通過git push上傳代碼,經Git和Jenkins配合,自動完成程序部署、發布,全程無需運維人員參與。

這是一種真正的容器級的實現,這個帶來的好處,不僅僅是效率的提升,更是一種變革:

開發人員***次真正為自己的代碼負責——終于可以跳過運維和測試部門,自主維護運行環境(首先是測試/開發環境)。

難者不會,會者不難。通過簡單的4個配置,即可優雅地實現持續部署。本文依慣例放上目錄,請享用。

  1. 持續部署的技術思路
  2. 效果展示
  3. 配置Git和Jenkins聯動
  4. 配置Jenkins自動更新代碼
  5. 效果圖文詳解
  6. FAQ

好吧,我們正式開始。

1. 持續部署的技術思路

在本例中,假設我們JAVA項目的名稱為hello。簡要的技術思路如下。

 

本案例中假設代碼托管在git.oschina.com上,Jenkins和Docker Registry(類似于yum源)各運行在一個Docker容器中。JAVA項目自己也單獨運行在一個叫hello的容器中。

本文采取的持續部署方案,是從私有的Docker Reistry拉取代碼。有些變通的方案,把代碼放在宿主機上,讓容器通過卷組映射來讀取。這種方法不建議的原因是,將代碼拆分出容器,這違背了Docker的集裝箱原則:

這也導致裝卸復雜度增加。從貨運工人角度考慮,整體才是最經濟的。這樣,也才能實現真正意義的容器級遷移。

或者說,容器時代,拋棄過去文件分發的思想,才是正途。本文***的問答環節對此有更多闡述。

容器即進程。我們采用上述方案做Docker持續部署的原因和意義,也在于此。容器的生命周期,應該遠遠短于虛擬機,容器出現問題,應該是立即殺掉,而不是試圖恢復。

#p#

2. 效果展示

本文***實現的效果,究竟有多驚艷呢?且看如下的演示。

2.1 程序代碼更新前的效果

我們以時間戳來簡潔、顯式的表述程序更新情況。

 

2.2 提交程序代碼更新

本例中,我們把首頁的時間戳從201506181750,修改為201506191410(見如下)。

 

2.3 上傳新代碼到Git

順序執行如下操作,輸入正確的git賬號密碼。

 

然后呢?

然后什么都不用做了。端杯茶(如果不喜歡咖啡的話),靜靜地等待自動部署的發生, 旁觀一系列被自動觸發的過程,機器人似的運轉起來(請容稍候再加以描述)。

為什么需要3~5分鐘?只是因為本案例中的JAVA項目,需要從國外download Maven程序包,以供Jenkins調用和編譯JAVA。正式應用環境中,可以把Maven源放在國內或機房。如果僅僅需要對PHP項目做持續部署,那就更快捷了。

2.4 查看代碼更新后的效果

在靜靜地等待幾分鐘后,新的代碼確實已經自動部署完畢。

 

那么,這一切怎么實現的呢?很復雜么?不然。只要按照如下幾步,便可快速實現哦。

#p#

3. 配置Git和Jenkins聯動

這個過程也是難者不會,會者不難。主要分為如下三步。

3.1 Jenkins配置Git源

Jenkins中新建項目java-app,并配置從Git拉取程序代碼。具體如下:

 

3.2 Jenkins配置遠程構建

Jenkins中配置token,以供git遠程調用時使用。

 

3.3 Git開啟鉤子

怎么讓Git在接收到用戶更新的代碼后,把消息和任務傳遞給Jenkins呢?這借助于Git的hook功能,配置起來也非常簡單,如下。

 

4. 配置Jenkins自動更新代碼

Jekins在接收到Git傳遞過來的消息后,再觸發一個遠程構建(到目標服務器),按照預定義的任務列表,執行一系列的工作,重建容器等。詳見如下:

 

我們把其中最關鍵的Shell腳本內容摘抄出來。

 

 

 

#p#

5. 效果圖文詳解

在2.3這個章節中,我們當時的操作如下,這個目的是向Git提交更新代碼。

 

當時并沒有細說后續發生的事情,既然上面已經說清楚了原理,那我們就可以接下來說說實際發生的事情啦。

5.1 上傳代碼到Git

這里貌似整個過程已經完成并順利退出。其實,后臺的工作才剛剛開始哦。

 

 

 

這時會觸發Git服務器向相應的Jenkins服務器發出一個操作請求,此工作太過迅速,也沒啥好說的,我們接下來看Jenkins都干啥子了。

5.2 Jenkins進行的精彩互動

1)Jenkins會自動冒出來一個構建任務。

 

 

 

2)我們點進來,看看具體操作日志。是的,正在接受來自Git的任務。

 

 

3)下載Maven相關的軟件包(就是這個過程慢)。

 

4)下載完成后,就開始利用maven BUILD 新的hello項目包。

 

5)然后重建Maven容器,構建新的Image并Push到Docker私有庫中。

 

6)***,重新把Docker容器拉起來。這樣,又新生了。呵呵

 

#p#

6. FAQ

問題1:采用這么相對復雜的辦法(而不是把更新代碼放在宿主機然后卷組映射),是因為項目基于JAVA么;是否PHP項目就可以采用更新代碼放在宿主機然后卷組映射這種方式?

回答1:將代碼拆分出容器,違背了集裝箱原則。導致裝卸復雜度增加。從貨運工人角度考慮,整體才是最經濟的。一切版本化。拋棄過去的文件分發。這是正途。至于文件大小,大的war包也就50M或100M,在現有網絡下不成問題,性能問題***優化。另外建議關注docker 2 docker,p2p傳輸。

問題2:如果整體代碼超過500m或者1g以上,整體集裝箱是否就不太好了?如果容器與代碼分離,鏡像就100m左右(2層,base+服務),然后代碼的話,是放到共享存儲里,每個代碼有更新,比如svn的代碼,可以直接在共享存儲里進行svn update就可以控制版本

回答2:如果你的代碼500M,那只能說明業務開發該打板子了。

問題3:如果測試環境使用您提供的完整集裝箱服務還行,但在生產環境,集群里運行docker做應用,如果每個容器都是有完整的代碼,是否有點臃腫,不如每個集群節點里就運行基礎服務鏡像,通過卷組功能綁定共享存儲里的代碼,加上Crontab、Python和Shell腳本,這樣每次代碼更新就1次就行了。

回答3:環境一致性,在過去從來沒有解決好。10年前我們做paas時,和這個做法類似。不是說不好,時代變了,用腳本東拼西湊,終究難有好的系統。不能只考慮現在的方便,容器技術和vm如果類比,我覺得會讓自己下決定時很糾結。

補充3:腳本一般是典型的運維工程師思維,quick & dirty。一般很難做成一個產品或者系統。整體考慮和擴展性考慮都比較少。現在做docker的難點在于到底怎么看待它。到底是拿它做調度的基本單位,還是部署的基本單位考慮清楚,再聊方案。

備注:上述問題的回答,主要由王利俊@cSphere和陳爾冬@華為完成。

關于作者

蕭田國,男,碩士畢業于北京科技大學,觸控科技運維負責人。擁有十多年運維及團隊管理經驗。先后就職于聯想集團(Oracle數據庫主管)、搜狐暢游(數據庫主管)、智明星通及世紀互聯等。從1999年開始,折騰各種數據庫如Oracle/MySQL/MS SQL Server/NoSQL等,兼任數據庫培訓講師若干年。

張春源,目前任職希云cSphere,希云cSphere是國際領先的docker管理平臺。國內最早期的Docker實踐者,在生產環境擁有一年多的 Docker容器管理經歷。深刻理解Docker對于開發、測試以及運維的價值。擅長利用Docker構建整個DevOps自動化平臺。熱愛專研 Dockerfile這門藝術,并對CoreOS有深入研究。

原文鏈接:http://my.oschina.net/u/1452684/blog/483110

責任編輯:Ophira 來源: 開源中國博客
相關推薦

2015-07-21 14:38:02

Docker部署

2015-09-29 10:08:26

DockerJava持續集成

2023-03-19 11:47:57

Taro小程序持續集

2017-04-28 08:57:58

持續集成DevOpsC#

2016-08-05 17:19:37

持續集成持續交付系統運維

2017-02-27 18:35:23

集成交付部署

2015-12-02 14:56:07

Docker開發模式持續集成

2021-03-31 09:00:00

管道集成工具

2017-10-19 09:47:55

容器化微服務集成

2015-09-24 09:43:08

阮一峰持續集成

2009-06-14 18:05:58

ibmdwWebSphere

2011-09-15 09:21:46

持續集成

2012-02-23 10:22:03

JavaTeamCity

2018-01-08 14:18:14

代碼互聯網持續集成

2017-03-01 08:56:28

VSTSTFSiOS

2019-04-18 10:35:30

持續集成工具Buddy

2016-01-05 15:30:20

Docker持續集成Docker部署

2023-02-20 08:02:38

智能自動化交付

2020-06-23 10:41:08

云計算DevOps持續集成

2015-07-22 14:59:30

OpenStac持續集成持續交付
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕av第一页 | 亚洲电影一级片 | 青青久视频 | 国产日韩欧美一区二区 | 九九亚洲| 中文字幕一区二区三区日韩精品 | 国产精品久久久久久久久免费高清 | 日本中文字幕在线观看 | 婷婷一级片 | 久久久久久黄 | 一区二区成人在线 | 女女百合av大片一区二区三区九县 | 中文字幕日韩欧美一区二区三区 | 羞羞视频网站在线观看 | 国产色片在线 | 国产成人jvid在线播放 | 日本精品久久久一区二区三区 | 欧美在线视频网 | 国产精品电影网 | 久久国产一区 | 午夜视频免费在线观看 | 国产欧美精品一区二区三区 | 中文av在线播放 | 玖玖久久| 色偷偷人人澡人人爽人人模 | 国产精品视频一区二区三区 | 久久综合久久综合久久 | 亚洲精品久久久久久国产精华液 | 国产免费一区二区 | 国产福利在线视频 | 中文字幕第一页在线 | 日韩在线一区二区 | 日韩久久在线 | japan21xxxxhd美女 日本欧美国产在线 | 国产精品夜夜春夜夜爽久久电影 | 婷婷开心激情综合五月天 | 亚洲成人一级 | 欧美成视频 | 日韩成人精品 | 91热在线 | 国产精品久久久久久久粉嫩 |