需求背景
- 因禅道要作为产品去进行推进,相应的Jenkins集成,部署,也陆续都需要提上日程。
目前所做的Jenkins集成也是为了后续 开发 - 测试 - 部署 ,ci这条流水线能够顺畅,在人力较少的情况下提高研发测试效率。
实现思路
思考禅道更新都需要进行哪些部分的更新
扩展部分的代码替换
即 moduile/改动模块/ext 下的所有内容。遵循禅道php二开的规则来进行开发存放的文件。
涉及数据库方面改动的增量sql执行
通过 ssh到目标机器之后 通过mysql 外部调用sql 脚本的方式来完成对数据库的更新。
实现步骤
Jenkins环境 ,待部署测试机环境 建立ssh互信。
下面链接看具体配置方法
https://blog.csdn.net/chenghuikai/article/details/52807074
创建 Jenkins 项目 - Git源代码控制
```groovy
def gettags = (“git ls-remote -h http://xxx/zentaopms.git").execute()
gettags.text.readLines().collect { it.split()[1].replaceAll(‘refs/heads/‘, ‘’) }.unique()git ls-remote -h
简单来说就是显示出来该git项目的所有分支与tag ,
仅限于 refs / heads 和 ref / tags。这些选项是not相互排斥的; 当同时给出时,将显示存储在 refs / heads 和 refs / tags 中的引用。
- 效果- - 下拉框内会有所有的branch 和 tag信息,进行选择即可- - Choice Parameter 同样与上面的功能类似,只不过选项由维护者手动编辑,在选项中逐行添加即可。后面作为环境变量引用到构建用的shell脚本中- - ${git_branch} 即上面进行设置的 branch参数- 构建- - 构建选择执行shell,之后进行执行shell脚本编写```shell#!/bin/bashset -x# 上面取parameter的时候的选项 作为变量引用Publish_IP=${server}PASSWD_HOME=${JENKINS_HOME}/secret.txt# 当前工作目录#/home/jenkins/workspace/Zentaopms_test# 替换禅道源码文件#scp 命令# 执行增量sql#【Mysql的bin目录】\mysql –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】,示例:# C:\MySQL\bin\mysql –uroot –p123456 -Dtest<C:\test.sql#/bin/bash /opt/zbox/bin/mysql -uroot -p123456 -Dzentao<../increasment.sqlpreparation(){echo "输出JenkinsHome:${JENKINS_HOME}"echo "当前路径:${WORKSPACE}"cd ${WORKSPACE}}update_model(){# 更新拓展 model scp命令 复制替换 文件echo '扩展model'# scp 命令想要免密首先需要配置ssh互信,见上面步骤scp -r module root@$Publish_IP:/opt/zbox/app/zentao# 测试环境的禅道安装方式是一键安装,故mysql与禅道安装包是耦合在一起的,位于/opt/zbox/bin下# 将增量sql脚本复制到目标服务器的 /opt/zbox/bin目录下scp -r incremental_sql.sql root@$Publish_IP:/opt/zbox/bin}update_sql(){# 执行拓展 增量sql 取得执行返回进行判断是否成功# sql 脚本路径使用相对路径易出错,因为其执行顺序是 ssh到目标机器之后,再去执行mysql导入脚本# 相对路径较难把握脚本实际引用位置res =`ssh root@$Publish_IP "/opt/zbox/bin/mysql -uroot -pxxxx -Dzentao</opt/zbox/bin/incremental_sql.sql"`echo $res}echo "构建执行开始"echo "当前发布IP地址 $Publish_IP"preparationupdate_modelecho "构建执行结束"
一些解释
- 整个构建过程为 Jenkins -> Gitlab 拉取代码到 Jenkins本地工作环境 ->
- 将拉下来的代码中的module复制到目标服务器的 对应目录下,完成module层扩展替换。
- 将拉下来的代码中的 incremental_sql.sql 增量sql脚本复制到 目标服务器的对应目录
- ssh到目标服务器执行增量sql脚本,完成数据库扩展
- 是否需要重启服务?
- 不需要,经查,php不需要重新启动服务,替换源码文件即可实现热更新部署,属实方便。
