Jenkins代码上线(二)

1.4 Jenkins使用——代码上线

1.4.1创建一个新的任务

创建一个新的任务

输入项目的名称,选择构建自由分风格的软件

1.4.2将Jenkins与gitlab联合

gitlab的详细安装方法参照:http://www.cnblogs.com/clsn/p/7929958.html

创建公钥和私钥

[root@Jenkins ~]#ssh-keygen

Generating public/private rsa key pair.

Enter fileinwhich to save the key (/root/.ssh/id_rsa): Enter passphrase (emptyforno passphrase):

Enter same passphrase again:

Your identification has been savedin/root/.ssh/id_rsa.

Your public key has been savedin/root/.ssh/id_rsa.pub.

The key fingerprintis:

SHA256:5SGYye8oxCKFJjddb4W8JC0RAQhBWCvuG8aZL8eMJs4 root@Jenkins

The key's randomart image is:

+---[RSA 2048]----+

|==....=* .. |

|...o oo==. |

|+.= . =++.o |

|++ o o.+ . |

|... o S . |

|o.oo o |

| B+ . . . |

|++++ . |

|+Eo. |

+----[SHA256]-----+

[root@Jenkins~]#cat .ssh/id_rsa.pub

[root@Jenkins ~]#cat .ssh/id_rsa

在gitlab中添加公钥id_rsa.pub

在jenkins中添加私钥id_rsa

在首页中,点击项目名称的下拉监听

选择源码管理,先将gitlab的项目地址复制过来

选择SSH密钥和证书,然后选择直接输入,将私钥复制到下框中即可

添加完成后,点击保存

选择刚才创建的证书,完成后,选择构建

选择构建

拉到最底部,选择使用shell脚本

脚本内容

创建测试环境

[root@Jenkins ~]#mkdir -p /data/www

[root@Jenkins ~]#chown -R jenkins.jenkins /data/

选择构建后的操作,让每次构建完成后都将结果发送给管理员

/var/lib/jenkins/workspace #项目存放目录

1.4.3测试手动集成

回到主页,点击右侧的按钮进行测试

部署完成

查看部署日志

查看部署结果

[root@Jenkins ~]#ll /data/www/

总用量 4

-rw-r--r-- 1 jenkins jenkins 4 11月 30 21:22flag

-rw-r--r-- 1 jenkins jenkins 0 11月 30 21:22 README.md

1.4.4自动测试(gitlab主动通知Jenkins测试)

执行过程:jenkins先从gitlab私人仓库pull代码下来,放到/var/lib/jenkins/workspace/目录下,然后再从/var/lib/jenkins/workspace/目录下上线到/data/www下。

该功能会使用到一个插件gitlab plugin,没有的话需要安装,否则找不到

配置gitlab认证

添加一个新的凭证

从gitlab的设置中将token复制过来

将复制的token粘贴到api token中,点ok

在系统配置中找到Gitlab将信息进行填写,Credentials选择刚刚创建对的即可

第三步:

打开项目,编辑项目的构建触发器

在gitlab上配置连接jenkins,将Jenkins的Secret token与Build URL复制到gitlab中

保存之前先进行测试,测试成功后进行保存

在gitlab进行上传文件,可以测试。

在日志中显示是StartedbyGitLabpushbyAdministrator即表示自动集成成功

1.5代码上线方案

1.5.1早期手动部署代码(小型公司)

纯手动scp上传代码。

纯手动登陆,Git pull或者SVN update。

纯手动xftp上传代码。

开发发送压缩包,rz上传,解压部署代码。

缺点:

全程运维参与,占用大量时间。

如果节点多,上线速度慢。

人为失误多,目录管理混乱。

回滚不及时,或者难以回退。

上线方案示意图:

1.5.2合理化上线方案(中型开始)

1、开发人员需在个人电脑搭建LAMP环境测试开发好的网站代码,并且在办公室或IDC机房的测试环境测试通过,最好有专职测试人员。

2、程序代码上线要规定时间,例如:三天上线一次,如网站需经常更新可每天下午17点上线,这个看网站业务性质而定,原则就是影响用户体验最小。

3、代码上线之前需备份,网站程序出了问题方便回退,另外,从上线技巧上讲,上传代码时尽可能先传到服务器网站临时目录,传完整后一步mv过去,或者通过In做软链接—线上更新代码的思路。如果严格更新,把应用服务器从集群节点平滑下线,然后更新。(把代码放2份,v1 v2,给v2做软连接,如果v2出问题了,删除软连接给v1在做软连接)

4、尽量由运维人员管理上线,对于代码的功能性,开发人员更在意,而对于代码的性能优化和上线后服务器的稳定,运维更在意服务器的稳定,因此,如果网站宕机问题归运维管,就要让运维上线,这样更规范科学。否则,开发随意更新,出了问题运维负责,这样就错了,运维永远无法抬头。

图·web代码规范化上线流程图

1.5.3大型企业上线制度和流程

JAVA代码环境,上线时,有数台机器同时需要更新或者分批更新↓

1).本地开发人员取svn代码。当天上线提交到trunk,否则,长期项目单开分支开发,然后在合并主线(trunk)

2).办公内网开发测试时,由开发人员或配置管理员通过部署平台jenkins实现统一部署,(即在部署平台上控制开发机器从svn取代码,编译,打包,发布到开发机,包名如idc_dep.war).

3).开发人员通知或和测试人员一起测试程序,没有问题后,由配置管理员打上新的tag标记。这里要注意,不同环境的配置文件是随代码同时发布的。

4).配置管理员,根据上一步的tag标记,checkout出上线代码,并配置好IDC测试环境的所有配置,执行编译,打包(mvn,ant)(php不需要打包),然后发布到IDC内的统一分发服务器。

5).配置管理员或SA上线人员,把分发的程序代码内容推送到相关测试服务器(包名如idc_test.war),然后通知开发及测试人员进行测试。如果有问题向上回退,继续修改。

6).如果IDC测试没有问题,继续打好tag标记,此时,配置管理员,根据上步的tag标记,checkout出测试好的代码,并配置好IDC正式环境的所有配置,执行编译,打包(mvn,ant)(php不需要打包),然后发布到IDC内的统一分发服务器主机,准备批量发布。

7).配置管理员或SA上线人员,把分发的内容推送到相关正式服务器(包名如idc_product.war),然后通知开发及测试人员进行测试。如果有问题直接发布回滚指令。

IDC正式上线的过程对于JAVA程序,可以是AB组分组上线的思路,即平滑下线一半的服务器,然后发布更新代码,重启测试,无问题后,挂上更新后的服务器,同时再平滑下线另一半的服务器,然后发布更新代码测试(或者直接发布后,重启,挂上线)

1.5.4 php程序代码上线的具体方案

对于PHP上线方法:发布代码时(也需要测试流程)可以直接发布到正式线临时目录,然后mv或更改link的方式发布到正式上线目录,不需要重启http服务。这是新朗,赶集的上线方案。

1.5.5 JAVA程序代码上线的具体方案

对于java上线方法:较大公司需要分组平滑上线(如从负载均衡器上摘掉一半的服务器),发布代码后,重启服务器测试,没问题后,挂上上好线的一半,再下另外一半。如果前端有DNS智能解析,上线还可以分地区上线若干服务器,逐渐普及到全国的服务器,这个被称为“灰度发布”,在后面门户网站上线的知识里我们在讲解。

灰度发布:1.通过ip地址定位地区,返回指定网页内容(需要精确的ip地址库)

2.通过local dns定位(智能DNS调度)

1.5.6代码上线解决方案注意事项

1.6参考文献

0.http://dwz.cn/6j9fHv代码上线方案

1.https://zh.wikipedia.org/wiki/持續整合

2.https://www.zhihu.com/question/23444990/answer/89426003

3.https://www.mindtheproduct.com/2016/02/what-the-hell-are-ci-cd-and-devops-a-cheatsheet-for-the-rest-of-us/

4.http://t.cn/RYKgMtc 自动化部署

5.http://www.cnblogs.com/can-H/articles/7346724.html

6.https://www.abcdocker.com/abcdocker/2041

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180417G1OF5D00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券