CICD概念
CI/CD的概念本身是持续集成、持续部署,其应用主要在持续交付领域,快速的产品迭代、不仅仅是产品的发布,包含产品的版本管理、代码质量、编译、测试、发布等许多环节。类似于工厂的一组流水线,流程本身变化不大,但流程的复用频率较多。
发展历史
CI/CD的理念诞生于敏捷开发中,在降低参与人员、规范化流程的夹缝中,自动化的持续集成/持续部署,开始服务于敏捷开发的各个环节中,涉及研发、质量审核、测试、部署等,以下是本人CICD的经历,与CICD的发展类似,供参考。
第一阶段:脚本流程。在2011年做电子商务平台时,采取快速原型开发模式,人员极度紧张,且能力有限,而面对多个部门对内、对外的差异化需求。为了降低测试阶段配置、部署方面的人员投入,脚本化整个流程,这也是CICD的雏形,实时证明整个项目以一人兼职配置管理方式,完成整个项目变更、。
第二阶段:jenkins。2013年涉足需构建新的平台架构,在此时,由于新平台定位多模块综合性研发平台,受限于屏蔽多模块平台的学习成本,同时提升平台多模块的集成和部署速度,采用jenkins进行CI集成。
第三阶段:jenkins+docker。2017年原有的UDP多模块平台,重构为springcloud的微服务oup平台,底层定位为docker。在oup中,微服务后的模块管理以及持续集成的效应将发挥的更加明显。
传统CI
传统CI由于其复杂的环境部署以及流程管理,导致整个CI过程的使用成本以及可用性并不高,缺点如下:
CI环境部署以及维护的成本较高,且环境的扩展性和弹性较差。
测试环境的不一致性需要开发和测试一起去定位排查问题,最终花费了很多时间结果是由于环境问题导致的。

CI/CD容器化
容器化CI实践与传统CI流程的最大实践,让CI的缺点被容器的快速部署、弹性等能力所转化,使CI的流程更边界,更加服务化。在OUP的平台的CI流程中,完全使用容器化CI流程。优点如下:
u 节省资源
u 版本的镜像化管理
u 容器化交付
u 更好的保证环境的一致性
u 通过API脚本方式来编排CI/CD

在CI/CD构建上,按照现有容器环境最标准的模式,允许远程开发、编译、部署分发的能力,具备如下特点:
1、内外网穿透:外网保留git代码库,将内网的jenkins地址、演示地址透传到公网。
2、Jenkins子母节点分离:构建一体化调度,分节点编译集成能力。
3、Pipeline流程分离:流程配置集成到工程,在特色编译部署上,灵活方便。
4、Docker编译构建:使用java构建工具,屏蔽did以及dod的影响。
5、Jnlp通信方式:屏蔽ssh主动特性,构建被动发现的机制。
网络隔离:构建docker与非docker的一体化机制,差异通过dns翻译屏蔽。
前提
名称 | 备注 |
IDEA intellij | IDEA 环境安装 |
Gitee | MarkDown:https://gitee.com/help/articles/4130 WebHooks:https://gitee.com/help/categories/40 |
IDEA插件gitee | 安装步骤:https://gitee.com/help/articles/4117#article-header0 插件地址:https://plugins.jetbrains.com/plugin/8383-gitee 工程上传下载:https://gitee.com/help/articles/4117#article-header8 |
Jenkins插件gitee | Gitee插件:https://gitee.com/help/articles/4193#article-header0 |
Docker准备 | |
Docker | Docker 18.06 ce版本之上 |
Docker-registry | V2,docker私服,镜像挂载在本地 |
Docker-jenkins | V2.46.2,registry镜像私服中《jenkins》,Jenkins 2.x or later |
Docker-jenkins-slave | Jnlp客户端,registry镜像私服中《jenkins-java-slave》 |
Docker-Nexus | Nexus 3.3.1 |
组件版本 | |
Maven | Maven 3.3.9,settings.xml提前指定,远程挂载到jenkins-slave 低版本有bug,见附录5 |
Dockefile-maven | V1.4.8 |
Jdk | 1.8 |
jenkins容器安装
Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。什么是Pipeline,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。
原始镜像地址: docker pull hub.c.163.com/public/jenkins:2.60.2
私服地址:localhost:5000/jenkins
访问地址:http://localhost:8777/ Admin用户:root/root123 (登陆设置)
docker run -d --name jenkins -p 8777:8080 -p 50000:50000 -v D:\docker\servers\jenkins\data:/var/jenkins_home localhost:5000/jenkins
Docker logs -f jenkins
注意:数据持久化到本地挂载目录进行存储。
jenkins初始化设置
该章节互联网内容较多,大家可参考以下文章进行设置。
Jenkins-Slave容器
Docker pull hub.c.163.com/public/jenkins-java-slave:1.0
docker tag hub.c.163.com/public/jenkins-java-slave:1.0 localhost:5000/jenkins-java-slave:latest
docker push localhost:5000/jenkins-java-slave
compose服务编排

专题提前看
webhooks配置
jenkins中的piple配置
jenkinsfile初探
spring cloud打包成image
docker远程访问主机




