项目设置

1. 测试环境

测试环境用于测试开发者的开发好的代码, 即使有bug也可以通过测试环境中的测试来发现

General设置

源码管理设置

构建触发器设置

测试环境中使用提交触发自动部署,所以需要设置与Gitlab的连接,并设置触发允许

构建设置

连接sonarqube

执行脚本

2. 部署上线

部署上线版本不需要被Gitlab自动触发,所以移除了触发器设置的内容,取而代之的是参数化构建设置

选择Git Parameter从Git获取tag信息作为版本,并通过Name定义为变量

然后添加选项参数,通过名称定义为变量status,提供deploy和rollback选择,deploy对应部署rollback对应回滚操作

脚本编写

1. 测试环境部署脚本

  1. #!/bin/sh
  2. workspace=$WORKSPACE
  3. id=$BUILD_ID
  4. #id=$git_version
  5. #job=$JOB_NAME
  6. target=10.0.0.7
  7. target_dir=/usr/share/nginx
  8. compress_name=$id-web.tar.gz
  9. web_name=$id-web
  10. DEPLOY_METHOD=$status
  11. code_tar(){
  12. cd $workspace && tar zcf /tmp/$compress_name ./*
  13. }
  14. code_scp(){
  15. scp /tmp/$compress_name $target:$target_dir
  16. }
  17. code_xf(){
  18. ssh $target " cd ${target_dir} && mkdir ${web_name} && tar xf $compress_name -C $target_dir/$web_name"
  19. }
  20. code_ln(){
  21. ssh $target "cd $target_dir && rm -f html && ln -s ${web_name} $target_dir/html"
  22. }
  23. code_tar
  24. code_scp
  25. code_xf
  26. code_ln

2. 线上环境部署脚本

线上环境的部署可能需要进行回滚操作,所以加入了一个case选择,根据在Jenkins页面选择的操作进行判断

  1. #!/bin/sh
  2. workspace=$WORKSPACE
  3. id=$git_version
  4. target=10.0.0.7
  5. target_dir=/usr/share/nginx
  6. compress_name=$id-web.tar.gz
  7. web_name=$id-web
  8. DEPLOY_METHOD=$status
  9. code_tar(){
  10. cd $workspace && tar zcf /tmp/$compress_name ./*
  11. }
  12. code_scp(){
  13. scp /tmp/$compress_name $target:$target_dir
  14. }
  15. code_xf(){
  16. ssh $target " cd ${target_dir} && mkdir ${web_name} && tar xf $compress_name -C $target_dir/$web_name"
  17. }
  18. code_ln(){
  19. ssh $target "cd $target_dir && rm -f html && ln -s ${web_name} $target_dir/html"
  20. }
  21. case $DEPLOY_METHOD in
  22. deploy)
  23. if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ]
  24. then
  25. echo "重复构建!!!"
  26. else
  27. code_tar
  28. code_scp
  29. code_xf
  30. code_ln
  31. fi
  32. ;;
  33. rollback)
  34. code_ln
  35. ;;
  36. esac

通知

微信通知

微信通知选用Jenkins插件库中的”Qy Wechat Notification Plugin

另外还有使用脚本+企业应用的方法进行通知,但是过于麻烦,并不打算采用