項目鏈接
此項目的初衷是基於Jenkins和Ansible提供一套能兼容大多數應用場景的部署方案,提供一個統一的「配置界面」來完成大多數項目的部署工做,而無需關注底層腳本的實現。php
具體一點來說:將打包或編譯,服務的啓停,服務在反向代理的摘除和從新加入等操做在底層腳本中予以組合,可是底層腳本不涉及到具體的服務啓停命令或取值等,只提供邏輯框架。而描述項目部署的各類信息均在jenkins做業的配置界面中予以設置(這是在Jenkins中設置部署做業的最外層也是最直接看到的地方)。java
固然是Jenkins和Ansiblepython
注:本套腳本目前僅支持採用nginx做爲反向代理的場景nginx
先來看一下部署界面
git
下面是一個以jar包運行並通過nginx反向代理的java應用在jenkins上經過此套腳本的配置示例
示例中將本套腳本的父目錄定爲了「/op-work/deploy/scripts」github
dest_env
和branch
參數部分action
和batch
以及rollback_version
參數示例接下來是主要部分,直接跳到Jenkins做業設置界面的Build
部分,選擇執行shell
。這裏也即上文體到的「配置界面」,該項目的目標是將(描述一次項目部署)全部變的東西都定義在此處。web
# 遠程倉庫名 export repository="git@gitlab.xxxxx.com:my_group/my_project.git" # 構建物是單個包文件的取文件名; 不是單文件的以及不需打包的[可置空] export package_name="my_project.jar" # 構建工具生成的存放構建物的目錄(相對於項目根目錄),可爲'.'; 不須要構建[可置空] export build_target="target" # 打包命令,不須要打包的置空(目錄上下文關係由下層腳本處理)[可置空] export build_cmd="mvn clean package -B -P $dest_env" # 程序或者web服務器監聽的端口 export project_port=8888 # 遠程目錄: 須要打包的爲包文件(或包目錄)的父目錄; 不須要打包的,爲項目根目錄 export dest_dir="/usr/local/my_project/" # ansible inventory文件中該服務的反向代理nginx主機(組,按ansible中提供主機的方式)[可置空] export nginx_hosts_group="nginx01,nginx02" # nginx_upstream配置文件在本地和目標nginx的位置, 沒用到upstream的(即單臺後端)的[可置空] export nginx_upstream_conf_local=/op-work/nginx_conf/upstream.conf export nginx_upstream_conf_remote=/usr/local/nginx/conf/upstream.conf # 備份的主目錄(下級目錄爲項目名, 由程序自動添加) export base_backup_dir="/op-work/deploy/package_backup" # 中止和啓動後端服務的命令及運行用戶,不須要重啓後端的(如靜態頁面等)[可置空] export stop_command="ps aux | grep "$package_name" | grep -v grep | awk '{print \$2}'|xargs kill" export start_command="nohup java -Xmx512M -Xms512M -jar $dest_dir/$package_name &> $dest_dir/stdout.log &" export run_user="work" # 探活url,確保後端能正常響應後再將其加回nginx upstream中 export check_url="/isok" export check_url_timeout=30 export check_url_interval=3 # 來自jenkins的變量 export dest_env export action export batch export workspace=$WORKSPACE export branch=$(echo $branch|sed 's/"//g') export rollback_version=$(echo $rollback_version|sed 's/"//g') # 根據構建參數靈活設定相關參數(對應的主機/組,按ansible中提供主機的方式) if [ "$dest_env" == "pro" ];then export dest_hosts="app01,app02" elif [ "$dest_env" == "pre" ];then export dest_hosts="app-pre" fi sh /op-work/deploy/scripts/main.sh
Post-build Actions
部分或者在第4步腳本的最後,能夠增長髮送更新通知的邏輯