Jenkins 传统网站更新和CI/CD概念
门户网站传统部署流程
基于线上CentOS服务器,构建了一套LAMP(LNMP)PHP WEB环境,发布了Discuz门户网站代码,通过浏览器访问WEB网站,如图所示:
[root@localhost ~]# yum install httpd php php-devel php-mysql mariadb-server -y
[root@localhost ~]# service httpd restart
[root@localhost ~]# service mariadb restart
MariaDB [(none)]> create database discuz charset utf8;
MariaDB [(none)]> grant all on discuz.* to "discuz"@localhost identified by"123456";
MariaDB [(none)]> flush privileges;
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# unzip Discuz_X3.1_SC_UTF8.zip
[root@localhost html]# ls
Discuz_X3.1_SC_UTF8.zip readme upload utility
[root@localhost html]# cd upload/
[root@localhost upload]# mv * ..
[root@localhost upload]# chown -R apache:apache /var/www/html/
开发人员开发了新的Logo图片文件,要求运维人员将原始的Logo图片(社区动力DISCUZ!)文件更新为最新的Logo,作为运维人员如何去更新呢?更新和部署步骤是什么呢?
第一步,找出原网站Logo图片文件的访问URL地址或者图片文件名称;
- 通过浏览器F12工具或者右键属性;
- 通过右键-打开新标签-图片文件;
- Logo图片URL:http://192.168.179.104/static/image/common/logo.png
第二步,根据如上Logo图片访问URL地址,可以得出以下信息:
- 图片访问的协议:http
- 图片文件访问的端口:80
- 图片文件WEB服务器监听端口:80
- 图片文件WEB服务器IP或者域名:192.168.179.104
- 图片文件所在的位置:网站发布目录+static/image/common/
第三步,查找图片文件WEB服务器,默认网站发布目录;
[root@localhost ~]# netstat -tpln | grep 80
tcp6 0 0 :::80 :::* LISTEN 1592/httpd
[root@localhost ~]# ps -ef | grep httpd
root 1592 1 0 21:41 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1595 1592 0 21:41 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1596 1592 0 21:41 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
/var/www/html/
第四步,图片文件具体位置:
[root@localhost common]# pwd
/var/www/html/static/image/common
[root@localhost common]# ls logo.png
logo.png
备份原网站Logo图片文件
[root@localhost ~]# mkdir -p /data/backup/`date +%F`
[root@localhost ~]# \cp /var/www/html/static/image/common/logo.png /data/backup/`date +%F`
上传开发人给定的最新Logo图片文件至/tmp/`date +%F`/,替换至原网站Logo图片文件即可;
[root@localhost ~]# mkdir -p /tmp/`date +%F`/
[root@localhost ~]# cd /tmp/`date +%F`/
[root@localhost 2020-10-25]# \cp logo.png /var/www/html/static/image/common/
通过浏览器访问最新网站(Ctrl+F5),如图所示:
没有CI/CD部署项目需要经过什么样的流程呢?
开发将提交的版本放在仓库当中,然后开发人员在本地的IDE里面去将项目打包,这个包是可部署的,比如java的jar包和war包。打包完之后发给你运维工程师,运维工程师拿到这个包将其部署到对应的服务器上面(这个环境可能是测试环境或者生产环境)。部署完之后告诉测试组已经将包部署到新的环境上面,然后让测试去测试新上的项目是不是正确的反馈给开发。
这个和CI/CD没有明显的区别,就是上面图片,但是这里需要人去协调,从开发工程师到打包,再到运维工程师去拿这个包再去部署,再去告诉测试项目发布好了去测试,测试发现有问题再去通知开发。这些流程都需要人在里面去协调,这里面增加了沟通的成本。向这种传统方式对于项目比较少更新周期比较长的项目产品来说是可以接受的,对于迭代项目频率比较高的项目来说会增加时间成本是不可以接受的。
传统的部署项目需要人工干预,时间成本和风险都会增加,CI/CD解决了两个问题。一个是时间成本来自于人不断的相互协调,通过手动去做一些事情,而CI/CD注重的是自动化,从开发提交代码再到自动测试,再到邮件通知项目的工程师。这些都是自动完成的,不需要人工干预,人工干预的就是自动发布还是手动发布(手动发布需要人工的手动去点击)
第二个就是容易出问题,避免人工误操作行为。
Jenkins实现CI/CD
- 持续集成Ccontimous Integratio,CT)代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。
- 持续都署(Ccotimous Deployment.co)部署到生产环境。
- 持续交付 Ccoatimous Delvery.c)部署到生产环境,给用户使用。
Jenkins软件平台概念剖析
基于主流的Hudson/Jenkins工具平台实现全自动网站部署、网站测试、网站回滚会大大的减轻网站部署的成本,Jenkins的前身为Hudson,Hduson主要用于商业版,Jenkins为开源免费版。
Jenkins是一个可扩展的持续集成引擎、框架,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。而且Jenkins平台的安装和配置非常的容易,使用也非常简单。构建Jenkins平台可以解放如下人员的双手:
开发人员
对于开发人员来说,只需负责网站代码的编写,不需要手动再对源码进行编译、打包、单元测试等工作,开发人员直接将写好的代码分支存放在SVN、GIT仓库即可。
运维人员
对于运维人员来说,使用Jenkins自动部署,可以减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、手动更新。
测试人员
对于测试人员来说,可以通过Jenkins进行代码测试、网站功能或者性能测试。
持续集成(Continuous Integration,CI|CD)是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础,持续集成意义如下:
- 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量。
- 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能。
- 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。
jenkins中重要的几点
使用git作为版本控制,然后结合git去拉取代码进行后续工作,所以要搭建git服务器,并且会简单使用
权限管理,去精细化控制每个用户对项目的具有不同的权限和使用
Master slave和流水线是jenkins的核心功能
项目的构建成功和失败都是通过邮件通知。这个可以通过插件去完成
目录 返回
首页