在公司中,开发人员每天上班克隆一个自己的分支,下班前将分支进行合并,但是随着开发人员越来越多,代码也越来越多,每天下班之前要花很长时间进行人工合并代码,为了解决这样的情况,将合并的周期缩短,以前每天合并,改为每小时或者没半小时进行合并,随时随地的将代码进行合并,这种方法叫做持续集成
一句话:持续集成就是指,频繁的将代码集成到主干!
1. 快速的发现错误,没完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易
2. 方式分支大幅度偏离主干,如果不是经常集成,主干又不断的更新,会导致以后集成的难度变大,甚至难以集成
借助一个自动化的部署工具,jenkins
当开发上传自己的代码到gitlab,gitlab发消息通知jenkins,随后jenkins从仓库拉取代码,最后全自动部署到测试服务器进行相关测试,并将测试结果通知运维和开发,这种方法叫做持续交付
持续部署是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产进阶
jenkins是一个用java编写的开源的持续集成工具,在与oracle发生争执后,项目从hudson项目独立出来
jenkins提供了软件开发的持续集成服务,他运行在servlet容器中(例如apache,tomgcat)他支持软件配置管理,(SCM)工具,可以执行基于Apache ant和Apachemaven的项目,以及任意的shell脚本和windows批处理命令,jenkins的主要开发者是川口耕介,jenkins是在mit许可证下发布的自由软件
官方仓库 https://pkg.jenkins.io/redhat-stable/
清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
rpm -ivh jenkins-2.73.1-1.1.noarch.rpm
/etc/init.d/jenkins start
[root@jenkins tools]# tar xfP jenkins_plugins.tar.gz
[root@jenkins tools]# /etc/init.d/jenkins restart
[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=""
[root@jenkins secrets]# cat /var/lib/jenkins/secrets/initialAdminPassword
8c85ece6417d4c229434b26eaa5806bd
这里直接上传的软件包
[root@jenkins tools]# tar xfP jenkins_plugins.tar.gz
[root@jenkins tools]# /etc/init.d/jenkins restart
配置jenkins并发执行数量,提高执行效率
[root@Jenkins ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
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 ~]# mkdir /data/www -p
[root@jenkins ~]# chown -R jenkins.jenkins /data/www/
说明:这里创建完目录后把站点目录的属主和属组都交给jenkins用户,因为jenkins程序运行是jenkins用户,要注意安全问题,各种服务都一样!
jenkins项目所在目录
[root@jenkins oldboyedu]# pwd
/var/lib/jenkins/workspace/oldboyedu
[root@jenkins oldboyedu]# ll /data/www/
total 8
-rw-r--r-- 1 jenkins jenkins 10 Mar 21 23:08 jiang.txt
-rw-r--r-- 1 jenkins jenkins 782 Mar 21 22:24 README.md
1. 开发人员需在个人电脑的搭建LAMP环境测试开发好的网站代码,并且在办公室或者IDC机房的测试环境测试通过,最好有专职测试人员
2. 程序代码上线要规定时间,这个上线时间需要从监控中分析数据得知,选择流量低的时段进行上线
3. 代码上线之前需要备份,网站程序有问题方便回滚,另外,从上线技巧上讲,上传代码时尽可能先传到服务器中网站的临时目录,传完整后一步mv过去,或者通过做软链接的方法实现
4. 尽量由运维人员管理上线,对于代码的功能性,开发人员更在意,对于代码的性能优化和上线后的稳定,运维更在意服务器的稳定,因此,如果网站宕机问题归运维管理,就要让运维上线,这样规范更科学,否则,开发随意更新,出了问题找不到根源
对于php上线方法:发布代码时可以直接发布到正式线临时目录,然后mv或者更改林肯的方式发布到正式线上目录,不需要重启http服务,当然这也是新浪,赶集的上线方案
对于java上线方法,较大公司需要分组平滑上线(如从负载均衡服务器上摘掉一般的服务器)发布代码后,重启服务器进行测试,没问题后,挂上上线好的一半,再换另外一半,如果前段有DNS智能解析,上线还可以分地区上线若干服务器,在逐渐普及到全国的服务器,这个被称为灰度发布
通过ip地址定位,地区,返回指定网页内容
原文:http://blog.51cto.com/13520772/2090056