<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 193,  comments - 520,  trackbacks - 0

    一、我們要解決的問題

    無論是什么樣的解決方案,一定要牢記我們要解決的問題是什么,切不能將解決方案當做問題本身。具體到過程改進,不管是何種方式的改進,它們所要解決的問題永遠只有一個:縮短從產品想法到可用軟件之間的時間周期。自動化發布正是如此,如果軟件發布只做一次,我們說根本不需要自動化,但如果三次以上,那么軟件開發的黃金法則DRY就必須遵守,讓時間真正用到開發當中去。

     

    二、與發布相關的問題

    所謂自動化只不過是將原先手工做的工作謙讓給機器做,所以自動化之前一定要先清楚與發布相關的問題有哪些,即使不自動化,這些工作也一個也不能少:

    1. 應用程序如何打包? 發布包能否追蹤到SVN版本號?
    2. 對目標機器環境有什么樣的要求?
    3. 配置信息是否需要根據目標機器信息做出調整?
    4. 應用程序如何安裝和啟動?
    5. 應用程序啟動后如何切流量?
    6. 應用程序如何升級? 舊版本程序數據如何遷移?
    7. 升級過程中和結束后如何切流量?
    8. 應用程序如何卸載?

     

    三、我們的方案

    李安的少年Pi正在狂刷票房,我們的自動化發布方案也要跟上潮流:Puppet+CI我們的少年Pi

    Ø 使用CI自動化打包,追蹤每個發布包的SVN版本;

    Ø 使用Puppet管理發布包、目標機器環境、應用程序配置信息以及應用程序線上生命周期;

    Ø 使用伽利略系統提供應用程序的命名服務和進行流量切換。

    現在應用程序的發布需要兩步:CI一鍵打包、puppet指定應用程序版本SVN提交。




     

    四、具體方案

    具體方案也就是如何解決與發布相關八個問題的過程。

    1.         如何安裝、升級和卸載應用程序

    我們使用操作系統原生包管理系統來安裝、升級和卸載應用程序,我們的應用程序打出RPM二進制包。免安裝,所有機器自帶,綠色的,有機的。

    打包:rpm -ba ./team_member-1.spec

    安裝:rpm –ivh team_ member-2.0.1-48.x86_64.rpm

    升級:rpm –U team_ member-2.0.1-49.x86_64.rpm

    卸載:rpm –e team_ member-2.0.1-48.x86_64.rpm

    程序升級前要停舊版本服務怎么辦?舊版本數據要做處理怎么辦?RPM已經幫我們料理好這一切,只要寫出spec文件,剩下的交給我們。盡情的插入吧:


     

    2.         如何管理目標機器環境和應用配置信息

    應用程序已經打好rpm包了,但這還不夠,應用程序發布到哪臺機器上?應用程序對目標機器有什么要求?發布時需要修改哪些配置和參數?實際發布如何執行,難道需要登陸到每臺目標機器運行rpm命令嗎?

    我們使用Puppet來搞定這一切,Puppet是現在應用第一的devops工具,它通過master/agent的工作模式管理機器。我們通過聲明來控制我們的機器達到目標狀態。同時,所有puppet文件全部在SVN里,所有對機器的修改全部codereview和可審計。

     


    如何管理應用程序發布到哪臺機器上?在回答這個問題前我們必須將應用程序在線上的生命周期再進行一次封裝。


    應用程序TeamMember被我們封裝成一個puppet module,配置文件和參數被封裝在對應templatesfiles里,每次發布前都要修改配置文件和傳遞不同的參數?out了吧,puppet幫你傳參搞定:


    Teammember.conf文件內容:


    封裝完成后的效果是這樣的:


    最后在管理部署的site.pp文件里聲明一下,應用程序TeamMember2146版本就被自動部署到10.128.34.141.test.back.shequ這臺機器上了,我們后續的工作也就是維護這個site.pp文件了,所有應用程序的部署信息都在SVN被集中管理起來:


    登陸到每臺目標機器運行rpm命令?No!現在TeamMember已經被封裝,我們修改完畢site.pp并提交后,puppet就自動執行命令了,要不怎么說是自動化呢。(現在puppet默認在agent每半小時同步一次,但同時支持馬上觸發執行)。

     

    3.         如何追蹤每次發布的SVN版本號

    我們使用CI進行應用程序的打包,將build號作為包命名的一部分:


     

    4.         如何在發布過程中切換流量

    這是另外一個很大的話題,參見伽利略計劃。

     

    五、下一步工作

    使用CI將環境的自動化部署與自動化測試串聯起來,搭建起整個研發流程自動化平臺:


     

    六、小結

    沒有銀彈,自動化所做的只是將之前手工工作交給計算機完成,需要做的工作一個都不能少,此外,我們還要多做一些封裝或腳本工作,但是,當我們需要重復做這些事情的時候,價值就出現了。我們的目標永遠是縮短從產品想法到可用軟件之間的時間周期。讓時間真正用到開發當中去。



    http://www.tkk7.com/ronghao 榮浩原創,轉載請注明出處:)
    posted on 2012-12-14 15:54 ronghao 閱讀(2721) 評論(1)  編輯  收藏 所屬分類: 工作日志

    FeedBack:
    # re: 少年Pi的奇幻漂流-我們的后臺自動化發布方案
    2012-12-17 12:28 | 單人操作
    好吧我也在漂泊中  回復  更多評論
      
    <2012年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产亚洲色婷婷久久99精品91| 亚洲av综合avav中文| 精品国产呦系列在线观看免费 | 久久精品国产亚洲香蕉| 波多野结衣免费在线| 污污的视频在线免费观看| 亚洲高清国产AV拍精品青青草原| 四虎1515hh永久久免费| 猫咪免费人成网站在线观看入口| 亚洲小视频在线观看| 国产一区二区三区免费视频| 久久精品国产大片免费观看| 亚洲精品国产第一综合99久久| 亚洲乱码国产乱码精品精| 在线观看AV片永久免费| 中国国语毛片免费观看视频| 亚洲一卡二卡三卡| 亚洲毛片αv无线播放一区| 毛片免费观看的视频在线| 久久免费观看国产精品88av| 爱爱帝国亚洲一区二区三区| 亚洲精品视频观看| 亚洲一级Av无码毛片久久精品| 免费下载成人电影| 你好老叔电影观看免费| 亚洲av永久无码精品秋霞电影秋| 亚洲va中文字幕无码久久| 午夜无遮挡羞羞漫画免费| 99在线在线视频免费视频观看| 日本一区二区三区在线视频观看免费 | 免费无码黄十八禁网站在线观看| a级毛片免费观看网站| 亚洲啪AV永久无码精品放毛片| 久久亚洲成a人片| 亚洲人成影院在线观看| 日韩免费观看的一级毛片| 99热免费在线观看| 一个人免费视频观看在线www| 一级特级女人18毛片免费视频| 亚洲人成电影网站色| 亚洲另类春色校园小说|