walle-瓦力自動化部署工具

1 Git Flow


通常而言,軟件開發模型有常見的瀑布模型、迭代開發模型、以及最近出現的敏捷開發模型等不一樣的模型。每種模型有各自應用場景,Git Flow是構建在Git之上的一個組織軟件開發活動的模型,Git Flow重點解決的是因爲源代碼在開發過程當中的各類衝突致使開發活動混亂的問題。在此介紹Git Flow是因爲walle依賴它的思想進行持續部署。php

圖片描述

開發過程當中可能出現的git flowjava

1.1 Git Flow中的分支


Git Flow模型中定義了主分支和輔助分支兩類分支。其中主分支用於組織與軟件開發、部署相關的活動;輔助分支組織爲了解決特定的問題而進行的各類開發活動。分支的名字是一種共識,更重要的是它承擔的責任。git

1.2 主分支


主分支是全部開發活動的核心分支。全部的開發活動產生的輸出物最終都會反映到主分支的代碼中。主分支分爲master分支和development分支。github

1.2.1 master分支


master分支上存放的應該是隨時可供在生產環境中部署的代碼,它承擔的責任就是:僅在發佈新的可供部署的代碼時才更新到master分支上的代碼。當開發活動告一段落,產生了一份新的可供部署的代碼時,master分支上的代碼會被更新。同時,每一次更新,最好添加對應的版本號標籤(TAG)。web

1.2.2 develop分支


develop分支是保存當前最新開發成果的分支,它承擔的責任就是功能開發完畢等待最後QA的驗收,一般這個分支上的代碼也是可進行每日夜間發佈的代碼。當代碼已經足夠穩定時,就能夠將全部的開發成果合併回master分支了。shell

1.3輔助分支


輔助分支是用於組織解決特定問題的各類軟件開發活動的分支,它的生存週期伴隨着它的功能完成而消失。輔助分支包括:bash

  • 用於並行開發新功能時所使用的feature分支;
  • 用於輔助版本發佈的release分支;
  • 用於修正生產代碼中的缺陷的hotfix分支。

當這些分支完成它的使命以後在merge到主分支以後,也將被刪除。服務器

Git Flow開發模型從源代碼管理角度對一般意義上的軟件開發活動進行了約束,讓小組各個成員之間的開發相互隔離,可以有效避免處於開發狀態中的代碼相互影響而致使的效率低下和混亂,各自開發團隊根據本身的特色和節奏自行剪裁或擴展。websocket

2 Walle介紹


2.1是什麼?


Walle 一個web部署系統工具,可能也是個持續發佈工具,配置簡單、功能完善、界面流暢、開箱即用!支持git、svn版本管理,支持各類web代碼發佈,靜態的HTML、動態PHP、須要編譯的JAVA等,用戶權限管理,各類自定義高級任務。一鍵上線、回滾。composer

項目地址:walle-瓦力,上線開源兩個月,目前已支持超過十家企業線上部署使用,每週更新一個版本,持續帶來新特性。

2.2 walle的組件關係、原理


walle部署在一臺宿主機提供一個web UI,方便用戶自主更新代碼部署到目標機羣。Walle是一個跑在LNMP(LAMP)上的PHP服務,宿主機與目標機羣創建信任,經過操做bash命令來實現代碼同步、自定義高級任務。

圖片描述
宿主機、目標機羣、操做用戶關係

2.3配置


用戶的項目可自定義git/svn代碼託管地址、宿主機、目標機羣、高級任務等。配置完成後可快速複製當前配置、檢測配置是否正常、以及該項目的審覈管理員和成員。

圖片描述

3 walle與Git的配合


walle的持續部署與Git Flow思想一致,在不一樣的環境部署不一樣的分支。劃分三個環境:測試環境、預發佈環境、生產環境。測試環境和預發佈環境推薦分支部署,生產環境推薦tag部署。固然,這更適合milestone開發方式,若是是天天快速迭代多個版本,打tag成本就有點高了。

3.1 部署環境


3.1.1 測試環境


  • 開發者的feature分支開發、自測驗收經過後,merge到測試環境的develop分支,(QA)部署到測試環境,等待QA驗收。
  • QA提bug issue,開發者從develop切分支修正再次合併、部署、驗收。

3.1.2 預發佈環境


  • 測試環境驗收經過以後,合併到預發佈環境的master,部署預發佈環境
  • QA全面迴歸,發現問題提bug issue,開發者從master切分支修正再次合併、部署、驗收。
  • 迴歸完畢打tag,準備上線

3.1.3 生產環境


  • 上線驗收經過的tag
  • 迴歸測試,發現問題開發者從master切分支hotfix修正。

3.2 環境上線流程


開發者選擇要上線的項目,選擇要上線的分支和版本提交上線單,項目管理員審覈經過後,開發者發起上線。

圖片描述

4 Walle的部署流程


部署是在一臺宿主機拉取代碼,作編譯、配置後,向目標機羣分發,執行相關目標機羣任務。部署流程拆分爲如下6個環節,其中1-5爲在宿主機進行,6在目標機羣執行。

  1. 權限、目錄檢查,開闢一個上線的獨立空間以並行發佈,防止同時部署出現代碼污染
  2. pre-deploy任務,代碼檢出前的一些操做任務,如環境檢查
  3. 代碼從git/svn版本庫中檢出
  4. post-deploy任務,代碼檢出以後操做任務,如java的mvn編譯,php的composer插件安裝
  5. 保留在獨立空間的代碼均會被同步至目標機羣的一個版本庫中
  6. 全量更新:當全部機器都分發完畢,開始作pre-release任務(java暫停服務)、切換版本軟鏈、post-release任務( java啓動服務)

圖片描述
爲保證服務的完整性,先同步代碼,後切換服務。部署發佈每次都會有版本記錄保留,版本上線事故一旦發生,回滾可瞬間完成。可配置線上版本最大保留數,過時的版本被會刪除,同時也就不能回滾被刪除的版本。對於須要編譯、自定義多任務輔助,可配置前置、後置操做自定義任務;同時提供一些預置變量({WORKSPACE}宿主機的當前獨立空間、目標機webroot,{VERSION}版本庫目錄)方便用戶操做自定義任務。

上線過程直到目標機羣所有完成以前,若有任一環節失敗將會回滾,須要從新上線,同時會把錯誤信息提示用戶。

5 Todo list


  • 支持Docker
  • 開放接口
  • 支持第三方hook

6 瞭解更多


項目地址:walle-瓦力官方主頁-walle 瓦力。歡迎瞭解、star、fork。

7 walle 2.0 驚豔亮相


項目管理

部署

8 walle 2.0 特性


功能強大,且免費開源的walle-web 瓦力終於更新2.0了!佔用了我幾乎全部業餘時間,精力與金錢付出換各位使用收益,望各位喜歡順手 star 以示支持,項目更好亦反饋予你。目前 2.0 預覽版還沒有達到徹底企業可用狀態,請保持關注,我會在公衆號更新(在最下面)。

  • gitlabRESTful API,類gitlab的權限模型,未來打通gitlab,良心的驚喜
  • 空間管理。意味着有獨立的空間資源:環境管理、用戶組、項目、服務器等
  • 灰度發佈。呼聲不斷,終於來了
  • websocket 實時展現部署中的 shell console
  • 完善的通知機制。郵件、釘釘
  • 全新的UI,我本身都被震憾到了,如絲般流暢

圖片描述

相關文章
相關標籤/搜索