jenkins的配置(這里作用只是當做界面使用,利用它來管理執行salt命令,這里以 shop 這個項目目錄為例)
1.利用參數化構建項目,來實現是發布還是回滾操作:
2.構建操作來執行shell腳本
saltstack 的 sls文件編寫
deploy.sls文件如下
deploy: cmd.script: - source: salt://deploy.sh - args: "{{pillar['deploy']}} {{pillar['space']}} {{pillar['project']}} {{pillar['repertory']}} {{pillar['version']}}" - user: www - group: www
上面的作用就是 執行配置文件中設置資源目錄 下的 deploy.sh腳本,參數為args里的,以 www用戶,用戶組為www 的權限來執行sh里的內容。
shell腳本編寫
#!/bin/sh deploy=$1 workspace=$2 #通過jenkins動態獲取 project=$3 repertory=$4 version=$5 case $deploy in publish) #init if [ ! -d ${workspace} ]; then mkdir -p $workspace fi #echo $project #初始化項目 if [ ! -d ${project} ]; then cd $workspace && git clone $repertory composer install else cd $project && git pull #composer update fi ;; rollback) if [ ! -d ${project} ]; then echo "you need to create project first" exit 2 else cd $project if [ -z ${version} ]; then echo "回滾上一版本" git reset --hard HEAD^ else echo "回滾指定版本" git reset --hard $version fi fi ;; *) exit ;; esac
作用就是:執行sh腳本傳過來的參數
1.來判斷是發布還是回滾 操作(git)
如果是 publish 操作,判斷 指定的目錄 項目文件夾是否存在 , 存在 執行 git pull 操作,不存在(即第一次構建)執行git clone 並且 通過composer安裝相關庫。
如果是 rollback操作,判斷 參數中version(git log的唯一hash) 是否為空,如果為空則回滾到上一版本,否則回滾到指定版本。