一、为什么要做CI/CD
1.1 传统应用发布模式
- 开发团队
在开发环境中完成软件开发,单元测试,测试通过,提交到代码版本管理库 - 运维团队
把应用部署到测试环境,供QA团队测试,测试通过后部署到生产环境 - QA团队
进行测试,测试通过后通知部署人员发布到生产环境
二、Gitlab CI/CD简介
持续集成(CI)
- 合并开发人员正在开发编写的所有代码的一种做法
- 通常一天内进行多次合并和提交代码
- 从存储库到生产环境中进行构建和自动化测试,以确保没有集成问题并及早发现任何问题
持续交付(CD)
- 通常可以通过将更改自动推送发布系统来随时将软件发布到生产环境中
- 持续部署会更进一步,并自动将更改推送到生产中
持续集成作用
- 尽快发现错误
- 减少集成问题
- 避免复杂问题
持续交付作用
- 每次更改都可发布
- 降低每次发布风险
- 更加频繁交付价值
- 快速频繁客户反馈
三、GitlabCI 和JenkinsCI对比
3.1 Jenkins优点
- 可扩展自动化服务
- 安装配置简单
- 丰富插件库
- 分布式架构设计
- 支持所有的平台
- 可视化的管理页面
3.2 Gitlab优点
- 代码审查
- 问题跟踪
- 动态订阅
- 易于扩展
- 项目wiki
- 多角色项目管理
- 项目代码在线预览
- CI工具集成
3.3 Gitlab内置的持续集成
持续集成(CI)
- 集成软对中每个开发人员提交代码到代码存储库中
- 开发人员在Merge或者pull请求中合并拉取新代码
- 在提交或者合并更改到代码存储库之前,会触发了构建,测试和新代码验证的管道
- CI可帮助在开发周期中早期发现并减少错误
持续交付(CD)
- 可通过结构化的部署管道确保将经过CI验证的代码交付给应用程序
- CD可以 将经过验证的代码更快的移至应用程序
CI/CD一起可以加快团队为客户和利益相关者交付成果的速度,CI和CD必须无缝协作,以使团队快速有效的进行构建,并且对于确保完全优化的开发时间至关重要
3.4 GitlabCI/CD的优势
- 开源:CI/CD是开源Gitlab社区版和专有Gitlab企业版的一部分
- 易于学习:具有详细的入门文档
- 无缝集成:GitlabCI/CD是Gitlab的一部分,支持从计划到部署,具有出色的用户体验
- 可扩展:测试可以在单独的计算机上分布式运行,可以根据需要添加任何数量的计算机
- 更快的结果:每个构建可以拆分为多个作业,这些作业可以在多台计算机上并行运行
- 针对交付进行了优化:多个阶段、手动部署、环境和变量
3.5 GitlabCI/CD组件
GitlabCI/CD
- GitlabCI/CD是gitlab的一部分,gitlab是一个web应用程序,具有将其状态存储在数据库中的api
- 除了Gitlab的所有工鞥之外,它还管理项目/构建并提供一个不错的用户界面
Gitlab Runner
- 是一个处理构建的应用程序
- 它可以单独部署,并通过API与Gitlab CI/CD 一起使用
.gitlab-ci.yml
定义流水线的文件
3.6 GitlabCI/CD 特点
- 跨平台:
Unix,Windows,macOS和任何其他支持Go的平台上执行 - 多语言:
构建脚本是命令行驱动的,并且可以与Java、PHP,Ruby,C和任何其他语言一起使用 - 稳定构建
构建在与gitlab不同的机器上运行 - 并行构建
Gitlab CI/CD在多台机器上拆分构建,以实现快速执行 - 实时日志记录
合并请求中的链接将您带到动态更新的当前构建日志 - 灵活的管道
可以在每个阶段定义多个并行作业,并且可以触发其他构建 - 版本管道
一个.gitlab-ci.yml文件包含您的测试,整个过程的步骤,使每个人都能贡献更改,并确保每个分支活儿所需的管道 - 自动缩放
可以自动缩放构建工具,以确保立即处理您的构建并将成本降至最低 - 构建工具
您可以将二进制文件和其他构建共建上传到gitlab并浏览和下载它们 - Docker支持
可以使用自定义Docker镜像,作为测试额一部分启动服务,构建信的docker镜像,甚至可以在kubernetes上运行 - 容器注册类
内置的容器注册类,用于存储,共享和使用容器镜像 - 受保护的变量
在部署期间使用受每个环境保护的变量安全地存储和使用机密 - 环境
定义多个环境
3.7 GitlabCI/CD工作原理
- 将代码托管到Git存储仓库
- 在项目根目录创建.gitlab-ci.yml,在文件中指定构建,测试和部署脚本
- Gitlab将检测到它并使用名为Gitlab Runner的工具运行脚本
- 脚本被分组为作业,他们共同组成了一个管道