一、前期准备
- 代码发布服务器jenkins:47.103.2.240
- PHP服务器[需要部署代码的服务器]:106.14.67.208,47.101.34.240
- 配置SSH免秘钥,使发布服务器和PHP服务器相互之间都能够免秘钥远程登陆
- PHP服务器上启动rsync服务,centos默认启动
建议:Jenkins 与需要部署代码的服务器最好是同一个区域的主机,避免外网传输,影响传输速度
二、配置jenkins
Jenkin环境使用dockerfile构建:https://code.aliyun.com/web2020/jenkins.git
1、浏览http://47.103.2.240:81/jenkins/,访问jenkins发布服务器
2、登录后找到,系统管理->管理插件->可选插件,搜索Publish Over SSH,安装插件
3、配置需要集群部署的服务器ssh连接,系统管理->系统设置->Publish over SSH->SSH Servers ,点击新增配置ssh,点击高级可展开更多配置,如有多台就配置多台,配置图中几项即可,然后点击保存应用。
publish over ssh
--passphrase : 生成rsa的时候设置的ssh key(密码),若没有设置则留空
--path to key : 填写秘钥的路径,默认路径 ~/.ssh/id_rsa
--key : 粘贴发布jenkins服务器的私钥
ssh servers
--name : 定义名称
--Hosename : 填上集群部署服务器的IP
--username : 填上集群部署服务器的帐号,我选择root账户
--Remote Directory : 填写/[表示构建时的相对目录]
配置完成后测试连接是否成功: 点击Test Configuration, 出现Success即为连接成功
如果是多台web server,继续点击“增加”,重复以上操作。点左下角的“保存”
三、构建服务器集群部署代码任务
新建任务,输入任务名,最好用项目域名或其他可识别项目的名称
选择à构建一个*风格的软件项目
四、配置任务
点击任务à配置
1、General选项
配置 丢弃旧的构建à保持构建的天数输入10天,设置保持构建的最大个数输入10,可按需设置
配置 参数化构建过程,添加设置两个文本参数
status-构建动作,默认值有deploy-发布,roll_back-回滚
version-构建记录id值,默认值为0,用于回滚操作
version-构建记录id值:相当于回滚版本,选择哪个构建记录的ID值,就回滚到哪个版本
2、源码管理 选项
我这里使用的是阿里云的http://code.aliyun.com版本管理,拉取的是master分支
Credentials:秘钥相关设置,添加的是私钥,也可以用账户密码来认证代码的拉取
该选项只能添加,不能删除。秘钥的添加或删除可以在首页”凭证”选项进行操作
3、构建 选项
增加构建步骤à执行shell
case $status in deploy) echo "status:$status" backup_path="${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/target" deploy_path="/data/${JOB_NAME}/deploy_target" if [ -d $backup_path ];then echo "$backup_path is exists!" else mkdir -p $backup_path fi if [ -d $deploy_path ];then echo "$deploy_path is exists!" else mkdir -p $deploy_path fi rsync -az ${WORKSPACE} $backup_path/ --delete rsync -az ${WORKSPACE} $deploy_path/ --delete echo "deploy done!" ;; roll_back) echo "status:$status" echo "build_id:$version" backup_path="${JENKINS_HOME}/jobs/${JOB_NAME}/builds/$version/target" deploy_path="/data/${JOB_NAME}/deploy_target" rm -rf $deploy_path cp -r $backup_path $deploy_path/ echo "roll_back done!" ;; *) exit ;; esac |
构建过程的脚本功能说明:
脚本分为"发布"和"回滚"
发布:
先把git拉下来的代码,备份到backup_path这个变量的目录里,再复制到deploy_path这个变量的发布目录里
回滚:
根据构建记录ID找到对应的备份代码目录,然后复制到deploy_path这个变量的发布目录里
4、构建后操作 选项
选择Send build artifacts over SSH
SSH Server->Name :选择刚刚配置好的服务器集群的服务器
SSH Server->Transfers->Exec command,输入:
rsync -avz --exclude-from=/opt/exclude.list [email protected]:/jenkins/data/chandao.com/deploy_target/workspace/ /opt/chandao.com --delete
chmod -R 755 /opt/chandao.com
我这集群有2台服务器,所有点击Add Server再添加另外一台,如果有多台继续添加即可
配置好后,保存
总结:发布流程的思路
在”构建”选项中,把远程GIT仓库的代码拉倒jenkins发布服务器后,执行shell脚本,复制代码至相应目录
在”构建后”选项中,集群中的服务器使用rsync命令把发布服务器中的代码同步到本地的WEB目录
五、测试:
1、发布
测试1:第一次发布项目
发布任务à选择build with parameters,参数选择deploy,点击开始构建
点击构建ID,选择控制台输出,查看日志过程
日志无报错A,B服务器都发布完成,检查服务器web项目,访问正常,测试功能正常,成功。
测试2:升级版本[更新或添加了代码文件]
Git仓库更新了代码,需要发布版本
删除test目录下的redis.php文件,添加index.html文件
修改version文件内容,添加一个字符串--test
更新git项目master分支代码
按照上面发布的步骤,重新构建,查看控制台的输出日志,和服务器上文件的改动
检查日志正常
--A服务文件检验,成功:
--B服务文件检验,成功:
:
2、回滚
目前的最新发布的版本为2,我们需要回滚至上一个版本,也就是标识1的位置
点击 build with parameters
Status参数:roll_back , version参数: 1
校验A服务器
校验B服务器
已经回滚至上一个版本