第1章 引入

1.1 开发写代码的演变

l 一个开发单打独斗,撸代码,开发网站,自由自在;

l 多个开发同时开发一个网站,同时改一份代码。但是同时改一个文件会导致冲突。

l 采用分支结构,每天上班第一件事克隆代码,下班前最后一件事合并代码。(上一篇文章有写到)

l 好景不长,开发越来越多,代码文件越来越多。每天下班前合并代码时,发现很多合并失败的文件。最后每天加班3小时人工合并代码。

l 解决方法:将代码合并的周期缩短,以前一天,现在一小时,半小时。。。。。

l 随时随地将代码合并,这种方法叫做持续集成

1.1.1 持续集成

持续集成(英语:Continuous integration,简称CI

持续集成指的是,频繁地(一天多次)将代码集成到主干。

它的好处主要有两个:

Ø 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。

Ø 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

1.2 运维上线代码的演变

l 初级运维很苦逼,刚开始开发每天合并一次代码,然后运维把代码pull下来测试就可以了。

l 但是,后来开发引进持续集成方法论,开发们都“弹冠相庆”。

l 运维感觉好苦逼,一天到晚不停的测试代码。

l 运维就想有没有办法自动化

l 借助一个自动化的部署工具,叫做JENKINS。

l 开发上传自己的代码到GITLAB,gitlab发消息通知Jenkins,随后Jenkins从仓库拉取代码。最后全自动部署到测试服务器进行相关测试,并将测试结果通知运维和开发。

l 还有偷懒的方法,直接把这个工具交给开发使用,从此就可以高枕无忧了。

l 这种自动测试的方法叫做持续交付

1.2.1 持续交付

持续交付(英语:Continuous delivery,简称CD),指的是:频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。

持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。

l 代码测试通过了,该到生产环境部署了;

l 部署时要么成功,要么失败回滚;

l 可以使用自动化部署工具或批量管理工具(ansible)

l 这里有个方法叫做持续部署

1.2.2 持续部署

持续部署(英语:Continuous Deployment,缩写为 CD)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

 

持续部署的目标是,代码在如何时刻都是可部署的,可以进入生产阶段。

1.3 Jenkins介绍

Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目独立。

Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(例如Apache Tomcat)。它支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令。Jenkins的主要开发者是川口耕介。Jenkins是在MIT许可证下发布的自由软件。

第2章 安装Jenkins

2.1 安装Jenkins

2.1.1 环境说明

推荐的硬件配置

1 GB的RAM

50 GB的驱动器空间

 

系统环境

[root@jenkins ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

[root@jenkins ~]# uname -r

3.10.0-327.el7.x86_64

[root@jenkins ~]# getenforce

Disabled

[root@jenkins ~]# systemctl status firewalld.service

● firewalld.service - firewalld - dynamic firewall daemon

Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

Active: inactive (dead)

软件要求

Java 8--无论是Java运行时环境(JRE)还是Java开发工具包(JDK)都可以。

可以使用open jdk

2.1.2 软件下载

常规安装方法:使用RPM包安装

RPM包下载地址:

官方仓库  https://pkg.jenkins.io/redhat-stable/

清华大学开源软件镜像站  https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

下载相应的数据包即可,我这里使用的是jenkins-2.73.1-1.1.noarch.rpm

yum安装jdk

yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

安装rpm包

rpm -ivh jenkins-2.73.1-1.1.noarch.rpm

启动

/etc/init.d/jenkins start

检查端口信息

[root@jenkins ~]# ss -lntup |grep java

tcp    LISTEN     0      50       :::8080                 :::*                   users:(("java",pid=1715,fd=159))

RPM包安装的内容

[root@Jenkins ~]# rpm -ql jenkins

/etc/init.d/jenkins           # 启动文件

/etc/logrotate.d/jenkins      # 日志分割配置文件

/etc/sysconfig/jenkins       # jenkins主配置文件

/usr/lib/jenkins             # 存放war包目录

/usr/lib/jenkins/jenkins.war   # war 包

/usr/sbin/rcjenkins           # 命令

/var/cache/jenkins           # war包解压目录 jenkins网页代码目录

/var/lib/jenkins             # jenkins 工作目录

/var/log/jenkins             # 日志

配置文件说明

[root@Jenkins ~]# grep "^[a-Z]" /etc/sysconfig/jenkins

JENKINS_HOME="/var/lib/jenkins"                #jenkins工作目录

JENKINS_JAVA_CMD=""

JENKINS_USER="jenkins"                       # jenkinx启动用户

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"

JENKINS_PORT="8080"                         # 端口

JENKINS_LISTEN_ADDRESS=""

JENKINS_HTTPS_PORT=""

JENKINS_HTTPS_KEYSTORE=""

JENKINS_HTTPS_KEYSTORE_PASSWORD=""

JENKINS_HTTPS_LISTEN_ADDRESS=""

JENKINS_DEBUG_LEVEL="5"

JENKINS_ENABLE_ACCESS_LOG="no"

JENKINS_HANDLER_MAX="100"               # 最大连接

JENKINS_HANDLER_IDLE="20"

JENKINS_ARGS=""

2.1.3 web界面安装

浏览器访问: http://10.0.0.64:8080

解锁Jenkins,密码从命令行中获取

[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword

618377eec2ba4731a37f7ae80903c076

输入授权密码,然后点击下一步

稍等一会来到安装插件选择的页面,将此页面关闭,在安装完成Jenkins后安装插件。

关闭安装插件选择后,选择开始使用Jenkins

安装完成,显示界面

安装Jenkins插件

系统管理 >> 管理插件

选择自己需要的插件进行安装即可,也可选择全部安装。

插件安装完成后插件安装目录的内容

[root@jenkins ~]# ls /var/lib/jenkins/plugins/

ace-editor                     icon-shim.jpi                         pipeline-stage-view

ace-editor.jpi                 jackson2-api                          pipeline-stage-view.jpi

……省略若干

handlebars                     pipeline-stage-step.jpi               ws-cleanup

handlebars.jpi                 pipeline-stage-tags-metadata          ws-cleanup.jpi

icon-shim                      pipeline-stage-tags-metadata.jpi

至此Jenkins安装完成

2.2 Jenkins配置

2.2.1 配置jenkins并发执行数量,提高执行效率 

系统管理 >> 系统设置 >> Maven项目配置

2.2.2 设置邮件,能够在测试完成后,主动发邮件告知测试情况

系统管理 >> 系统设置 >> Jenkins Location

向下拉,找到邮件通知,配置邮件的smtp信息

配置完成后点击 Test configuration 进行测试,测试成功后,点击保存

第3章 Jenkins使用

3.1 创建一个新的任务

创建一个新的任务

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

3.1.1 将Jenkins与gitlab联合

gitlab的详细安装方法参照:版本控制系统

创建公钥和私钥

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

-----BEGIN RSA PRIVATE KEY-----

MIIEowIBAAKCAQEAq/uH2b/N40EAwp4I5roiRcNB9Jxh3wAlbsYGS7M6pWuFRWSC

jgsl83sYYR1vrx+1LNNwF7LC+4BcUmYOvG8/rIQV89joRbpcIrHSEKm1hagblgLY

UqykJZ1iBczPZc11/33yOsWJRz+4vHPjc9wtCK5u5Zz9zOSCaWCLgg7inNDUho0K

caajGJMzahgpGApPqwfCP2mb/buPYjgg+iNFpBKWy9oc6Ee4FDIv1ssuoCmoNQst

zpouxUtfXRqHyE5hul5RQ3Ec0R/ac/Hgc285Spl9Ro7J3RBCwiJhyyo5kZr6KXRe

Se29cH1mHB30vmfkksdqwniBeM8cyHzvqLJ5AwIDAQABAoIBAE52C41ZBwo1nq4r

QS5aHsarBQ0exzvgqjM2XqrsksXjHsMAztsU1PSW5RFxR4Giupo/wDTfljr9XaEt

9G0dZ/RBsm40OAuPsPcXHxoBAtJ+Vk+C7sQRBTYv7gdtX/U23i14fSk4858wwAwh

5tP10AnU4r0YeWWfnquKozrrpZEaqUjtbqGRXdo+larXpmagp9iSGUW6e7ln1ACY

imikXSVc6PtU0rVMrMbCT6J3LleUZeKnkd2QZa3SRurVmUB5s62L08htHRoNbENy

Gv++47q0xK9lF6IcAqpBvIOaoN4nqMdYpXTt5Ee4ls+0YLnLh896JTH0orJpxltK

eRLds+kCgYEA1sAM3F26m1GroYuxsE0+viSPMfFCapLv8hcbQg0GjdjuLAoxqNRj

jYKqDl+xEOIe4d5zLKNw5nszUf98th+KHhhLl651W41MYIImnyU2jr3Z2JrA2UoM

XsykALRwb4sFcPUhzs1xmPA3HkSPyqcpWQrcYq4xokL+NB35CE7mAVUCgYEAzQR1

eyeFUtyj4My1SNDmR0FSzB88C+ynJQr13sDfmmKFT+C28uY8DDHdspQhGsPH7Q5O

4Rf2cC28iJUwZNMzfD5054Y7UN45Ft91j6ru8SPDgo7dwyrcDXuvWSPicmKj06b9

6qsYJuJ5nWJP412qd0Ok0OvA638apexpPO9qcPcCgYAh/x9KF5B+HCzGkz3bAi+H

nHQK3P29r2tK8PuAtl0uQYRa9nYsGwtzkJbpVZ7LZHCtIzEqhOlPo3tZZM/SaSXN

Y907swOjLbhEovYIRbTgXg/JqZ4UCBPzQgRIlEgkcGa5HiVu/rkYFBc1tHbrBxGV

phGDkb4LyP1DNOeCuDLTTQKBgQCscVevoupNbDCbYRQKj0tiG9vcvVjwXrmoOrPc

DTcG0F95dHXtkSJoz3i+QEIoFQ0Qo7xNMK6kZJPz/iiaZdskYhRKuWki+Afk6Ugk

843PXlmQc0Ksalx1KteujrRlqfpKiGeC/y5tZokMjCjOAXbkogz7fZDjhCGR9mv+

SRKquQKBgF3zVifL/+jifBBz2O0k/02LOcdmUNSwqnTOF7Lnwczr33BJF9UVVTH1

nfOjZIUPM+D7pT3JuCevhFr5XxWQCCS67NIXrSEv6nDwDPz7EQ4Q04SPf88wL64j

2bdQjVT4UoBJzM4/mSDVBHrWoRWqzDszqeBcyNib2Cu3GllKwuT9

-----END RSA PRIVATE KEY-----

在gitlab中添加公钥id_rsa.pub

在jenkins中添加私钥id_rsa

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

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

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

添加完成后,点击保存

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

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

脚本内容

创建测试环境

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

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

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

3.1.2 测试手动集成

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

部署完成

查看部署日志

查看部署结果

[root@jenkins www]# ls

README.md

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

该功能会使用到一个插件 gitlab plugin

配置gitlab认证

添加一个新的凭证

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

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

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

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

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

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

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

在日志中显示是 Started by GitLab push by Administrator 即表示自动集成成功

第4章 代码上线方案

4.1 早期手动部署代码

l 纯手动scp上传代码。

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

l 纯手动xftp上传代码。

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

4.1.1 缺点:

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

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

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

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

上线方案示意图

4.2 合理化上线方案

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

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

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

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

4.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组分组上线的思路,即平滑下线一半的服务器,然后发布更新代码,重启测试,无问题后,挂上更新后的服务器,同时再平滑下线另一半的服务器,然后发布更新代码测试(或者直接发布后,重启,挂上线)

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

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

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

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

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

1. 上线的流程里,办公室测试环境-->IDC测试环境-->正式生产环境,所有环境中的所有软件均应版本统一,其次尽量单一,否则将后患无穷,开发测试成功,IDC测试就可能有问题(如:操作系统,web服务器,jdk,php,tomcat,resin等版本)

 

2. 开发团队小组办公内部测试环境测试(该测试环境属于开发小组维护,或定时自动更新代码),代码有问题返回给某开发人员重新开发。

 

3. 有专门的测试工程师,程序有问题直接返回给开发人员(此时返回的一般为程序的BUG,称为BUG库),无问题进行IDC测试

 

4. IDC测试由测试人员和运维人员参与,叫IDCtest,进行程序的压力测试,有问题直接返回给开发人员,无问题进行线上环境上线。

5. 数台服务器代码分发上线方案举例(JAVA程序)

   A:假设同业务服务器有6台,将服务器分为A,B两组,A组三台,B组三台,先对A组进行从负载均衡器上平滑下线,B组正常提供服务,避免服务器因上线影响业务。

   B:下线过程是通过脚本将A组服务器从RS池(LVS,NGINX,HAPROXY,F5等均有平滑方案)中踢出,避免负裁均衡器将请求发送给A组服务器(此时的时间应该为网站流量少时,一般为晚上)

   C:将代码分发到A组服务器的站点目录下,对A组服务器上线并重启服务,并由专业的测试人员进行访问测试,测试成功后,挂上A组的服务器,同时下线B组服务器,B组代码上线操作测试等和A组相同,期间也要观察上线提供服务的服务器状况,有问题及时回滚。

6. 特别说明:如果是PHP程序,则上线可以简单化,直接将上线代码(最好全量)发布到所有上线服务器的特定目录后,分发完成后,一次性mv或ln到站点目录,当然测试也是少不了的。测试除了人员测试外,还有各种测试脚本测试各个相关业务接口。

转载于:https://blog.51cto.com/12805107/2091932

Jenkins与网站代码上线相关推荐

  1. Jenkins与网站代码上线解决方案

    1.1 前言 Jenkins是一个用Java编写的开源的持续集成工具.在与Oracle发生争执后,项目从Hudson项目独立. Jenkins提供了软件开发的持续集成服务.它运行在Servlet容器中 ...

  2. Jenkins + Gitlab + Ansible--playbook 代码上线流程

    jenkins 构建是支持 git 选择分支 安装 Git Parameter 插件 在系统管理中的插件管理 然后点击选插件,在右上角输入 Git Parameter,找到 Git Parameter ...

  3. day28:检测磁盘io|自定义时段查看tomcat 日记|打印城市名字|代码上线|统计网站并发量...

    2019独角兽企业重金招聘Python工程师标准>>> 1.有一台阿里云的机器,接到反映说服务器的磁盘 io 很高,登录服务器查看,并没有发现问题,怀疑是间歇性的,看到造成磁盘 io ...

  4. Linux实战教学笔记41:企业级SVN版本管理与大型代码上线方案

    第1章 SVN服务实战应用指南 1.1 SVN介绍 1.1.1 什么是SVN(Subversion)? Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN ...

  5. SVN版本管理与代码上线架构方案

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,可以超越时间的管理文件和目录.文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器.你可以将文件恢 ...

  6. php代码上线,实现版本切换

    以下为现有php业务,代码上线方式.实现:4套环境版本切换. [root@hz-web-01 htdocs]# cat release.sh #!/usr/bin/env bashwork_dir=/ ...

  7. Tomcat 项目代码上线步骤详解

    Tomcat 项目代码上线步骤详解 1.上线内容(JSP代码,图片,包文件(jar|war|ear)) 2.上线内容来源 a.开发人员提供(邮件形式).tar.gz 压缩包(包文件开发负责编译 编译命 ...

  8. 简单网站建设上线流程(小白专用)

    简单网站建设上线流程(小白专用) 学web的大概都会需要建设一个属于自己的网站,用于写个人博客之类的或者其他的用途,那么这里简单介绍一下基本的流程: 基本流程 简单网站建设上线流程(小白专用) 1.准 ...

  9. jenkins pipeline_DevOps编程操练:用Jenkins流水线建立代码质量预警机制

    解决痛点 代码上线故障多 不知如何用docker搭建Jenkins操练环境 不知如何开始为Java代码编写自动化单元测试 不知如何将单元测试运行在Jenkins流水线上 不知如何将繁琐的手工Jenki ...

最新文章

  1. 宅男抖音某猫协议分析及应用破解
  2. 交叉表的简单实现2:使用前端程序实现
  3. SpringMVC 类扫描原理解析
  4. td 首行缩进_工作中常用的CSS整理
  5. 基于深度学习的搜索、推荐、广告系统最全最新论文分享
  6. 【文末送书】在科研路上,大家有什么经验教训?
  7. 图像处理-RGB彩色图像均衡化处理
  8. 软件测试-微信红包测试点
  9. Docker安装ELK详细步骤(生产试验,适用所有版本)
  10. 在WinCC V7.3中如何导出过程值进行数据归档
  11. 数字信号和模拟信号区别
  12. java wms erp自动化立体仓库管理系统 进出库 源码 源代码 程序
  13. 主线Linux用shell命令切换 OTG
  14. 清理电脑C盘空间的脚本
  15. 人和计算机比赛下棋结果,人机大战趣谈:会下棋的电脑 像人一样聪明
  16. hadoop2.2.0的编译(64位linux系统)
  17. html是一种通用的方法来,()是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。A.模板B.类C....
  18. R语言使用quantmod包的getSymbols函数从指定金融数据源获取指定时间段的股票数据、美股不使用后缀、其它股票需要使用后缀:大陆沪市使用:“.SS“,深市使用:“.SZ“,香港使用:“.HK
  19. android5.1之vibration学习总结
  20. 教你5分钟做成一个ASP论坛

热门文章

  1. 关于P3P协议与跨域
  2. RegularExpressionValidator
  3. 2021全球数字经济白皮书 附下载
  4. 2022 2 11 树莓派4B 截屏方法+SCIM输入法配置(三)
  5. ASUS华硕天选3笔记本电脑FX507ZM12700_3060原装出厂Windows11系统恢复原厂OEM系统
  6. windows 7无法访问ubuntu samba共享文件
  7. Mac m1终端出现[进程已完成]问题
  8. chain.doFilter(request,response)详解
  9. Delphi_SysUtils中文翻译
  10. 【VIP视频网站项目二】搭建爱奇艺优酷腾讯视频官网首页轮播图效果及实现原理分析