Deploy4s自動化部署組件
Deploy4s - A deploy tool for simple, standard, stable and stupid
About
參考AWS CodeDeploy的自動化部署服務(wù),抽取其中標(biāo)準(zhǔn)化本地部署功能的一個組件。AWS CodeDeploy User Guide.
Deploy是一個自動化部署組件,能夠讓用戶方便快速地將應(yīng)用自動部署到目標(biāo)機器上。通過部署流程的標(biāo)準(zhǔn)化和自動化,加快部署的速度,控制部署節(jié)奏,降低應(yīng)用升級更新的復(fù)雜度,減少手工部署操作的錯誤和風(fēng)險。最終使得用戶能夠在快速地發(fā)布新特性的同時保證部署的質(zhì)量,避免部署過程中的服務(wù)中斷。
傳統(tǒng)應(yīng)用代碼和部署腳本是分離的,基于很多不同的部署工具開發(fā),如Chef,Puppet,Ansible,或者開發(fā)人員自己寫的Shell,Python部署腳本。隨著DevOps理念的興起,消除Dev和Ops之間的鴻溝,系統(tǒng)的開發(fā)和運維由一個自治團(tuán)隊全權(quán)負(fù)責(zé),所以將代碼與部署放在一起就非常自然,統(tǒng)一Dev和Ops的目標(biāo)和部署。另外,將應(yīng)用代碼與部署腳本一體化,也簡化了代碼和部署腳本的管理,避免代碼版本與部署腳本版本需要對應(yīng)的問題。其實,這種設(shè)計也簡化了用戶的使用過程,不需要額外再做部署腳本版本的管理了。
Deploy定義了一個基于事件部署流程接口,在接口定義中,定義多個部署文件拷貝源目標(biāo)部署映射(files->source->destination),以及部署中各個步驟及步驟之間的執(zhí)行順序(ApplicationStop->BeforeInstall->Install->AfterInstall->ApplicationStart-> ValidateService),各個步驟要執(zhí)行的腳本。
Deploy僅處理代碼部署問題,并不處理應(yīng)用配置管理,資源管理,環(huán)境管理以及之后的監(jiān)控和恢復(fù),伸縮等環(huán)節(jié),用戶想要實現(xiàn)系統(tǒng)的持續(xù)自動化部署,仍然需要自行集成開發(fā),比如需要自行實現(xiàn)應(yīng)用新版本的打包和上傳,之后通過Deploy提供的相應(yīng)API接口以及CLI將其集成到自己的開發(fā)流程,實現(xiàn)持續(xù)交付。
Requirements
Python
PyYAML
Install
下載最新的Release包,通過pip命令安裝:
pip install deploy-0.0.1.zip
或者通過下載源碼包或clone代碼至本地,然后通過如下命令安裝:
python setup.py install
Usage
deploycli --bundle=http://server/example.zip
使用--help查看更多使用幫助。
--bundle參數(shù)指定zip包的路徑,可以是本地文件路徑也可以是HTTP地址。
Release
Limit
與標(biāo)準(zhǔn)的AWS CodeDeploy相比,appspec.yml文件需要新增一個workdir參數(shù),用于指定hooks中命令的執(zhí)行Current Working Directory,其他參數(shù)配置可參考AWS CodeDeploy。
Example
一個示例的appspec.yml文件如下所示:
version: 0.0 os: linux workdir: /app files: - source: / destination: /app hooks: ApplicationStart: - location: bin/start.sh ApplicationStop: - location: bin/stop.sh BeforeInstall: - location: bin/backup.sh AfterInstall: - location: chmod a+x bin -R
將該文件與待部署文件一起打成zip包(appspec.yml文件必須位于zip包頂層),將該zip包上傳至HTTP server或待部署機器本地。 在服務(wù)運行的機器上執(zhí)行如下命令,即可將部署zip包文件部署到機器上,并停止、啟動服務(wù)(與hooks中配置相關(guān)):
deploycli --bundle=http://server/example.zip
