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