老板创意---产品经理---立项---开发团队---测试团队(黑白盒)---运维上线
产品经理---加需求---开发团队---测试团队---运维更新代码上线
开发环境:开发自己用的电脑本地自己装的php python的开发工具等。
测试环境:多个人的代码合起来跑一遍,运行一次,测试mysql redis等。
预发布环境:直接连接线上数据库,专门的测试域名小范围内测试。
生产环境:线上环境 每个项目一套环境 (线下可以放一起配多域名 线上不行)。
每天都进行一次代码合并,就是持续集成。
多个开发写的代码 集中起来管理 放到代码库里 (版本控制管理软件)代码库工具:svn git(多) 。(版本控制系统:类似于快照的增量备份的机制,也就是每一次版本更新,都会在原来的基础上保留变化的内容,生成一个新的版本,之前的版本也会被保留,以便快速回滚。)
每天都要做代码合并,防止冲突,在合并的时候会产生冲突,所以提交的时候有先后顺序,就是你先上传,然后我把你上传的拉过来和我的进行合并,排除冲突,然后我在上传到主分支。持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
开发首先进行单元测试---最后把所有代码放一起进行测试---代码质量检查。
频繁的代码上线就是持续部署。
项目做模块集成的时候,发现很多接口都不通==>浪费大量时间
需要手动去编译打包最新的代码==>构建过程不透明
发布代码,上线,基本靠手工==>脚本乱飞
维护一个单一的代码库
使构建自动化
执行测试是构建的一部分
集成日志及历史记录
使用统一的依赖包管理库
每天至少集成一次
说明:如何安装Jenkins请参考文档:https://www.jianshu.com/p/343bdd43c82a
这里就省略安装。
[root@jenkins ~]# cd /var/lib/jenkins/workspace/free-job/
[root@jenkins /var/lib/jenkins/workspace/free-job]# ls
free.txt
流程图如下:
说明:通过gitlab+Jenkins实现代码的自动更新同步代码到web服务器站点目录。此处示例后端web服务器使用nginx。
环境规划以及ip分配如下表:
注意:开发环境这里直接放在gitlab服务器上这里将git也部署在gitlab服务器上。git基本使用请参考:https://www.jianshu.com/p/96c4a6d0c587
说明:首先在gitlab上面创建一个群组,并创建一个项目,将代码push 到代码仓库中(项目)。创建一个开发用户(用于提交代码等),同时在Jenkins服务器上面生成ssh秘钥并将key添加到新建用户的ssh认证下面。
[root@gitlab ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
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:WyI0C3MBpUdsAKQsDkEf99WmtCUvcXUoxWL+NgF2R0I root@gitlab
The key's randomart image is:
+---[RSA 2048]----+
|ooooo*+ .. =Eoo |
|.o. oo+..+ @ +o. |
|+. .+.=.. & = . |
|+ * o + o . |
| . o S o . . |
| . + + |
| . . . |
| |
| |
+----[SHA256]-----+
[root@gitlab ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnnyT5IRLN2AzknCPE3pLnLhH0Vq6jGJsYsjDaLKBQNkBD4coTMW47PJpjxL/pjwyV9KaQ3BuEqam8jQlpaDYUQVBK++0ALFAObGTyTPThRVKhW7X3kjSkInkwAZVj2dLdU0oIinzEuCjldhOe3BF2FYHRgcbnklEFIVpK3quTJbKxcF4h8SMbihRbXor0AIsOupWd0z2skqqvr4xSDNPAb4t+Ypd0MnGPRJYb8DTs+Ign+gn6L7a48RWqqIhBjVjgDLHiitMeEKA6FCS4cEHvcbHhXtrLswfF2ocA+mjfb5WGfP73d959fSPfvraRhhxXqBMqM309DmO3DGtS2e1j root@gitlab
#这里的源码使用的码云上源码,你可以自行下载使用即可。
[root@gitlab ~/yiliaoqixie]# git config --global user.name "Administrator"
[root@gitlab ~/yiliaoqixie]# git config --global user.email "admin@example.com"
[root@gitlab ~/yiliaoqixie]# git init
Initialized empty Git repository in /root/yiliaoqixie/.git/
[root@gitlab ~/yiliaoqixie]# git add .
[root@gitlab ~/yiliaoqixie]# git commit -m "第一次提交项目"
[root@gitlab ~/yiliaoqixie]# git remote add origin git@10.0.0.55:yiliao/yiliao.git
[root@gitlab ~/yiliaoqixie]# git push -u origin --all
[root@jenkins ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
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:Y/nVt2+ldZc+h4VrsormDhSXKj3ryP/LlLkpIU95xjA root@jenkins
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| . o |
| .E+ . . |
| . ==S . ..o|
| .o+++= . .oB|
| +o++ . .B+|
| . oo+.+ . =o+|
| o.o*X....+ .+|
+----[SHA256]-----+
[root@jenkins ~]# cat ./.ssh/id_rsa
id_rsa id_rsa.pub
[root@jenkins ~]# cat ./.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCssc5KGRIvHV64Md3HR3SdT0w4twdrAIbxWSSo3tvfrauMdSk2ptmxvgzPqfGEQUgHfPsZY10eN0bpvaFARLBDytyRLbgdSo6gts+J0nGhy0hcjOhu4xJgygt8hN53UCUbdy7DhUnwxIfOuzENFYLS7ZW/Uk4N1FrNNuZK0X5aVNsV5r9H+fUeOfMJ4YLjLhFn6C94q4XmS9OfAW0aCSUfBbCT9LnRmeU/FoQMGdujBZ+Koc9289IVNHkVL+vEW6ZTxLPMEoRaB0RlLxfZF86LMsjsqx6ABBHNpV5FZWl0OYnnEn3jKHRNStfxx2g5Hz9e7eRguBubBis75OfHf2br root@jenkins
[root@jenkins /var/lib/jenkins/workspace/yiliao]# ls
about.html article.html contact.html index.html product.html
album.html Bootstrap医疗器械公司响应式网站模板 css js
article_detail.html comment.html images product_detail.html
上面已经完成了Jenkins从gitlab上拉取代码,现在需要实现如何将源码自动部署到web服务器上,这里使用脚本的方式来实现,Jenkins支持执行脚本的功能。
[root@jenkins ~]# ssh-copy-id -i 10.0.0.7
[root@jenkins ~]# ssh-copy-id -i 10.0.0.8
[root@jenkins /server/scripts]# vim deploy.sh
#项目目录
CODE_DIR=/var/lib/jenkins/workspace/yiliao/
#时间格式
DATE_TIME=`date +%Y-%m-%d-%H-%M-%S`
#打包后的名字
TAR_NAME=web-${DATE_TIME}.tar.gz
#web服务器站点目录的上一级 "/usr/share/nginx/html"
WEB_DIR=/usr/share/nginx/
#web服务器新建的站点目录名字
WEB_NEWDIR_NAME=web-${DATE_TIME}
#进入到项目目录上一级打包代码
cd $CODE_DIR && tar czf /opt/$TAR_NAME ./*
for i in {7,8}
do
#拷贝到web服务器的站点目录的上一级
scp /opt/$TAR_NAME 10.0.0.${i}:$WEB_DIR
#连接web服务器进行解压压缩包到新的一个已时间命名的站点目录
ssh 10.0.0.$i "cd $WEB_DIR && mkdir $WEB_NEWDIR_NAME && tar xf $TAR_NAME -C $WEB_NEWDIR_NAME"
#将新建的站点目录与html站点目录做一个软链接
ssh 10.0.0.$i "cd $WEB_DIR && rm -rf html && ln -s $WEB_NEWDIR_NAME html"
ssh 10.0.0.$i "cd $WEB_DIR && rm -rf $TAR_NAME"
sleep 3
done
选择构建触发器,然后选择build when a change is ....,下方有个高级选项后然后选择Filter branches byname,然后输入master分支,再点击下面的Generate生成token,然后点击保存。
点击项目→设置→设置→集成,然后输入Jenkins上面提示的URL地址和和生成的token,点击增加web钩子。
添加完钩子完成后可以测试,选择Push event,执行完会显示上面的提示。
修改首页内容:
[root@gitlab ~/yiliaoqixie]# git add .
[root@gitlab ~/yiliaoqixie]# git commit -m "第二次提交"
[master 4b8d377] 第二次提交
[root@gitlab ~/yiliaoqixie]# git push -u origin --all
之前的结果如下图:
现在的结果:
原文:https://www.cnblogs.com/hujuntao/p/11984687.html