该文章用于概述一个小型持续集成环境的搭建的方案
什么是持续集成?
持续集成作为当今软件开发实践,可以简单理解为团队开发相对频繁的集成他们的工作,一般让每个成员每天至少集成一次,而这回造成每天会有多次的版本发布。于是我们需要应用到自动化的构建模式(编译发布到测试监控),从而尽早的发现集成中的错误。
持续集成流程
常用生态
-
仓库管理
- Git 代码仓库 (Gitlab,Gitee)
- Nexus 包私服库
-
构建工具
- Jenkins 热门 - 构建发布工具
- Ansible 配置管理工具
- Walle 构建发布工具
-
运行环境
- Linux 系统
- Docker 容器
- Nginx 负载均衡域名解析
-
构建环境
- maven
- nodejs
- python
- java
经典流程
手工发布 – Java SpringBoot 应用到一台服务器
特征:一个环境,一台服务,少量应用
- 1、Maven 打包
mvn clean compile package -Dmaven.test.skip=true
- 2、放到服务器
scp -r xxx.jar username@192.168.0.1:/data/app/
orFTP 工具
- 3、登录服务器
ssh root@192.168.0.1
- 4、停用旧应用
ps -ef | grep java
->kill -9 xxxx
- 4、启用新应用
nohup java -server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -jar /data/app/xxx.jar > /data/app/xxx.log 2>&1 &
手工发布 – React-Antdpro 应用到一台服务器
特征:一个环境,一台服务,少量应用
- 1、Npm 打包器
npm run build
- 2、放到服务器
本地压缩 dist.rar
->scp -r dist.rar username@192.168.0.1:/data/nginx/
orFTP 工具
-> 解压内容 - 3、登录服务器
ssh root@192.168.0.1
- 4、停用旧应用
- 5、启动新应用 https://segmentfault.com/a/11…
延伸问题
⚠️ 在低频次小规模更新下,该方案可以在用最少的资源和适度的时间花费上得到平衡。如果出现 多人协作,发布频繁,多台服务,多套环境我们该如何管理这些内容?
多人协作,如何代码管理?以及相关依赖引用?
以下方案供选择,解决代码管理问题(他们比 svn 拥有更灵活更开放的管理手段)
- Gitlab 公网 / 私服
- Gitee 国内较好的代码仓库管理服务
- Github
https://git-scm.com/
以下方案供选择,解决通用模块引用以及外网拉取依赖缓慢问题
- Nexus 包私服库,包含众多类型的包,例如 maven
发布频繁,如何自动化脚本替换人工作业?
以下方案供选择(他们可以将一系列的执行脚本在服务端执行,一次脚本维护完毕则通过简单的触发即可完成各种功能)
- Jenkins 流行且主流的一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。https://jenkins.io/zh/
- Walle 简化版 python 完成的类 Jankins 软件。http://www.walle-web.io/
多台服务,如何快速批量多端构建执行?
-
Ansible 配置管理工具集包含 连接模块,多任务执行,监控模块,插件功能
- https://www.ansible.com/
- https://www.cnblogs.com/gzxbk…
多套环境,该如何服务隔离快速部署?
- Docker 容器引擎
- Docker-Compose 单主机容器编排工具
- Docker Swarm 多主机容器编排工具
- Kubernetes(k8s)更为强大的多主机容器编排工具
https://blog.csdn.net/notsalt…
服务异常,如何能快速定位和发现?
- Zabbix 硬盘,内存,CPU 采集监控与预警
下阶段会基于 Walle 讲解如何搭建一个小型的持续集成环境