暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CI/CD专题:基础篇

loulou分享 2018-12-04
950

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流程。优点如下:

节省资源

版本的镜像化管理

容器化交付

更好的保证环境的一致性

通过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

MarkDownhttps://gitee.com/help/articles/4130

WebHookshttps://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

V2docker私服,镜像挂载在本地

Docker-jenkins

V2.46.2registry镜像私服中《jenkins》,Jenkins 2.x or later

Docker-jenkins-slave

Jnlp客户端,registry镜像私服中《jenkins-java-slave

Docker-Nexus

Nexus 3.3.1

组件版本

Maven

Maven 3.3.9settings.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远程访问主机


    

文章转载自loulou分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论