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) 是否为空,如果为空则回滚到上一版本,否则回滚到指定版本。