今天简单整理了一下 jenkins 的一些概念性内容, 归纳如下:
1. 概念
jenkins 是一个开源项目, 提供了一种易于使用的持续集成系统, 使开发者从繁杂的集成中解脱出来, 专注于更为重要的业务逻辑实现上. 同时 Jenkins 能实时监控集成中存在的错误, 提供详细的日志文件和提醒功能, 还能用图表的形式形象地展示项目构建的趋势和稳定性.
Jenkins 可以构建一个自动化的持续集成环境可以使用它来 "自动化" 编译, 打包, 分发部署应用, 它兼容 ant,maven,gradle 等多种第三方构建工具, 同时与 SVN,Git 能无缝集成, 也支持直接与知名源代码托管网站, 如 GitHub,bitbucket 直接集成.
2. Jenkins 的功能
定时拉取代码并编译
静态代码分析
定时打包发布测试版
自定义操作, 如跑单元测试等
出错提醒
3. 原理
这里是选择 GitLab 作为 Git server.GitLab 的功能和 GitHub 差不多, 但是是开源的, 可以用来搭建私有 Git server, 也提供非常强大的 web GUI, 比如开发者互相 review 源代码的时候就会很方便. 系统的工作流程大概分为以下几步:
开发者将新版本 push 到 Git server (GitLab).
GitLab 随后触发 jenkins master 结点进行一次 build.(通过 Web hook 或者定时检测)
jenkins master 结点将这个 build 任务分配给若干个注册的 slave 结点中的一个, 这个 slave 结点根据一个事先设置好的脚本进行 build. 这个脚本可以做的事情很多, 比如编译, 测试, 生成测试报告等等. 这些原本需要手动完成的任务都可以交给 jenkins 来做.
我们在 build 中要进行编译, 这里使用了分布式编译器 distcc 来加快编译速度.
jenkins 的工作原理是先将源代码从 GitLab 中拷贝一份到本地, 然后根据设置的脚本进行 build. 我们可以看出, 整个系统的关键就是那个 build 脚本, 用来告诉 jenkins 在一次集成中需要执行的任务.
不过我之后是用的 GitHub 作为 Git server. 但其实差不多.
4. 部署方式
(1) jenkins 触发式构建:
用于开发环境部署, 开发人员 push 代码或者合并代码到 GitLab 项目的 master 分支, jenkins 就部署代码到对应服务器.
(2) jenkins 参数化构建:
用于测试环境预上线环境部署, 开发 push 代码或者合并代码到 GitLab 项目的 master 分支之后, 并不会部署代码, 而是需要登录到 jenkins 的 Web 界面, 点击构建按钮, 传入对应的参数 (比如参数需要构建的 tag, 需要部署的分支) 然后才会部署.
(3) jenkins 定时构建:
用于 App 自动打包, 定时构建是在参数化构建的基础上添加的, 开发人员可以登录 jenkins 手动传入 tag 进行打包, 如果不手动打包, 那么 jenkins 就每天凌晨从 GitLab 拉取最新的 App 代码打包.
5. 持续集成的分类
持续集成: 指程序员在代码的开发工程中, 可以频繁的将代码部署到主干上, 并进行自动化测试
持续交互: 指在持续集成的基础之上, 将代码部署到线上测试环境
持续部署: 指在持续交互的基础之上, 将要部署的代码实现自动部署, 包括持续交互, 持续部署
来源: http://os.51cto.com/art/201908/602194.htm