CI/CD,Devops,平台工程### CI/CD,Devops,平台工程
CI/CD 概述
** CI/CD(Continuous Integration/Continuous Delivery 或 Continuous Deployment)**是现代软件开发和交付流程中的核心概念,旨在加速代码变更的交付,同时保证代码的质量和稳定性。它结合了开发、测试、部署等过程,实现了软件的自动化和持续迭代。
CI/CD是实现敏捷开发 和Devops理念的一种方法,具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试,到交付和部署)。这些关联的事务通常被统称为CI/CD 管道(Pipeline),由开发(RD)、测试(QA)、运维(OP)团队以敏捷方式协同支持.
以上所有过程在目前的工作中都有有到,只是很多几个技术集成了一个工具上,比如云引擎工具中监控使用到了prometheus,构建部署使用到了docker,k8s,maven。jenkins本身内部有封装的实现平台。版本控制工具有gitlab,PM工具有内部实现。
平台工程概述
平台工程(Platform Engineering) 是一种通过提供内部开发者平台(Internal Developer Platform,IDP)来提高开发和运维效率 的工程方法。它旨在为开发团队创建自助式工具和服务,使他们能够专注于构建和交付高质量的软件,而无需过多关注底层基础设施或繁琐的操作细节。
平台工程的核心目标
- 开发者体验优化
提供统一、便捷的工具和接口,使开发人员能够轻松完成代码部署、环境管理和性能监控等任务。 - 效率提升
通过自动化和标准化减少手动操作和重复劳动,加快交付速度。 - 降低复杂性
将复杂的基础设施和工具抽象化,让开发者无需直接与底层资源交互。 - 增强一致性
确保不同团队和项目使用一致的开发、测试、部署流程,减少因环境差异导致的问题。
平台工程与传统 DevOps 的区别
特性 | DevOps | 平台工程 |
---|---|---|
目标 | 建立文化和实践,提高协作效率。 | 提供具体工具和服务,提升开发者体验。 |
关注点 | 流程和文化的改进。 | 技术和平台的实现与优化。 |
实现方式 | 自定义、团队间协作。 | 提供统一的、自助式平台。 |
开发者参与度 | 开发者需要掌握更多运维知识。 | 开发者聚焦于业务逻辑,底层由平台支持。 |
流水线(pipeline)
jenkins pipeline https://www.cnblogs.com/hiyong/p/15890284.html
流水的触发可以通过定时任务触发也可以通过某一事件触发【git某分支上有代码提交】
个人理解CI的很大一部分工作是讲一系列的过程自动化地完成,目前系统中经历过的比较有代表性的实践是:
自动化发布版本
整个过程做的事情是通过maven打包构建新的包体,然后讲该包上传到docker仓库得到一个包的镜像地址,然后再手动进行部署【更加自动化的流程是部署也参与到流水线中,主要代码提交到某个分支,自动构建新版本并进行部署】
自动化入库流程
整个过程涉及到CI服务器,版本控制服务器,应用服务器。 相比于直接在应用服务器上完成所有的操作,达到了解耦的效果,当新增一种资源入库时,只需要修改流水线脚本,而不怎么需要应用服务器代码【修改代价比较大】
![](https://i-blog.csdnimg.cn/img_convert/cee8f71ab7315395d2baa79091fe8011.png
json
pipeline pipeline {
agent any
stages {
stage('Example Build') {
steps {
echo 'Hello World'
}
}
stage('Deploy1') {
when {
branch 'production1'
}
steps {
echo 'Deploying1'
}
}
stage('Deploy2') {
when {
allOf {
branch 'production2'
environment name: 'DEPLOY_TO', value: 'production2'
}
}
steps {
echo 'Deploying2'
}
}
stage('Deploy3') {
when {
beforeInput true
branch 'production3'
}
input {
message "Deploy to production3?"
id "simple-input"
}
steps {
echo 'Deploying3'
}
}
}
}