jenkins的配置(这里作用只是当做界面使用,利用它来管理执行salt命令,这里以 shop.51ekt.com 这个项目目录为例)
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/shdeploy=$1workspace=$2#通过jenkins动态获取project=$3repertory=$4version=$5case $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) 是否为空,如果为空则回滚到上一版本,否则回滚到指定版本。