最近跟一个同事完成了项目的自动部署功能。java
一, 实现功能linux
部署包括war包,数据库脚本和发邮件三个部分。数据库
war部署: 1),从SVN获取最新代码.windows
2), 自动打包.tomcat
3), 上传linux服务器.安全
4), 登陆服务器,切换用户并部署war服务器
5), 检查版本更新, 检查产品网站是否能够登陆.ssh
数据库部署: 1), 更新数据库脚本curl
2), 获取更新文件工具
3), 链接服务器,执行脚本更新并记录日志
4), 查询,看是否有执行失败脚本. 有: 发邮件通知
二, 使用工具
1, Jenkins: 实现自动部署及邮件通知等功能
2, bitbucket: 代码托管工具, 托管的是自动部署的脚本代码
3, cygwin: 一个windows运行的liunx模拟器
三, 实现遇到的问题
1), 自动登陆linux切换用户
以前试过不少软件,不支持切换用户,以前都是手动登陆服务器切换用户,执行部署脚本
2), 自动验证部署成功
验证成功不单单看网站是否能打开还要看tomcat的war是不是当前部署的时候,
有时候tomcat虽然启动,可是产品仍是以前的,虽然war是当前时间,没查为何会这样
3), 自动发邮件
虽然jenkins 里面有自动发邮件功能,可是jenkins部署的服务器没法链接到咱们公司的SMTP.
折中在咱们的产品服务器进行了邮件发送
四, 总结
1, 因此涉及到的sh代码, 存于网盘 darren/java/GXD/auto_deployment
2, 了解了如何生成公私钥
本地cd ->ssh-keygen.exe ->cd .ssh/ ->ssh jenkins@10.213.xx.xx -p 50001->cat id_rsa.pub
在服务器cat authorized_keys, 可查看你添加的公钥
3, 了解了一些linux命令 rsync, scp,curl
rsync: 远程数据同步工具,可经过LAN/WAN快速同步多台主机间的文件
scp: secure copy的缩写, scp是linux系统下基于ssh登录进行安全的远程文件拷贝命令。
curl: 一个利用URL规则在命令行下工做的文件传输工具