前言

现在稍微有点规模的系统,很多都是采用分布式/微服务架构,将一个大系统拆分为很多个功能模块进行开发、测试、发布、管理等,如果全部流程都采用人工的形式进行的话,效率肯定是超级不高效滴。而且现在很多项目都采用极限编程的模式,将原有比较复杂的过程分解为更小的周期进行管理,将开发的成果快速的体现给用户,如果单纯人工操作,就需要大量的人力成本才能达到要求(频繁的开发、测试、部署是很耗时的),另外很容出错。所以自动化的集成和交付是很有必要的,接下来就开始这系列的学习和分享,小伙伴们一起哦。

极限编程(ExtremeProgramming,简称XP)是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法;XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。 ---摘自百度百科

正文

1. CI/CD简介

需求变更频繁、开发人员时间不够用、传统人工运维费事费力是项目遇到的三大难题,所以各种模式应运而生,比如常听见的DevOps、CI/CD、敏捷开发等,其实最终的目的就是通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件产品,尽可能降低开发成本,满足客户需求。

有了自动化就不用加班了? 想多了,只是减少不必要的时间浪费,节省出来时间还得去做其他的更有意义的事,所以该加的还加。

1.1 CI持续集成

CI(Continuous integration)持续集成:根据开发情况,随时将功能集成到整个项目中。

有点规模的系统都会分解为很多模块,每个模块又会分解为很多小功能,每个小功能还会分解成很多小操作,而这些功能模块可能都是不同的开发人员进行开发,持续集成的目的就是开发人员根据功能的完成情况,可以随时将对应的开发成果合并到整体项目中,尽早的与其他模块集成并进行测试,尽早发现问题并解决

1.2 CD持续交付

CD(Continuous delivery)持续交付根据功能集成情况,小周期内形成小版本交付,快速迭代,让用户尽快的体验到新功能

项目开发过程中,需求变更是避免不了的,通过短周期的小版本交付,实时获取用户反馈,有针对性的快速优化和完善,减少不必要的返工和大的需求变动,还可以降低累积功能交付的风险。另外一个角度来说,让用户快速使用到新功能,用户的体验感也不一样(用户就是上帝)。

2. CI/CD实操流程

实际工作中,其实通俗点说就是将原有的部分人为参与的步骤借助自动化工具进行管理,使得整个流程自动化、标准化,降低人为操作错误的风险。人为操作和自动化操作流程如下:

  • 人为操作

    上图简述:

    1.开发人员将功能代码推送的服务器;

    2.经过多轮测试,直到可发布;

    3.运维人员拉取可发布代码;

    4.然后进行打包;

    5.最后发布到应用服务器上;

    当然也有开发人员把活全干了的,但不管咋弄,假如发布的功能比较多或是发布比较频繁,那对应的人员工作就只能干发布这一件事了,而且人为操作出错的概率比较高。

  • 自动化操作

    上图简述:

    1.开发人员将功能代码推送的服务器,推送正式代码前会先自动化测试和人工测试(图中没体现);

    2.版本控制服务器收到代码的同时,会触发对应的钩子程序(或定时程序)

    3.通知持续集成工具(Jenkins,Hudson等),工具会自动先使用安装的git/svn插件从版本控制服务器上拉取源代码

    4.工具会使用编译/打包插件将拉取下来的代码进行自动编译打包

    5.工具最后将打包的程序发布到应用服务器上;(这里根据打包的形式不一样,发布方式也不一样;比如直接运行,或者是镜像方式,又或者是集成K8S,后续我们会逐步实操);这步使用插件根据部署场景不一样,使用的也不一样。

    6.在自动化期间如果发生错误,可以配置通知,相关人员会及时进行处理,从而快速响应,快速迭代

    相比人工操作,开发人员只需提交代码,后续就基本自动化了,这样是不是很给力。 至于要不要这样做,主要还是看业务和制度。

3. Jenkins 简介及安装

关于持续集成的工具有Jenkins,Hudson,gitLab-runner等,大家常用的就是Jenkins,接一下来就以它为工具的前提下进行实操演示。

3.1 Jenkins简介

Jenkins是一个开源的软件项目,是基于Java开发的一种持续集成工具,帮助开发人员自动构建项目;Jenkins通过插件化的方式可以集成不同开发语言、不同版本控制工具、不同流程部署等场景

3.2 Jenkins安装

这里还是采用Docker的方式进行安装,采用的是云服务器(Linux),具体步骤如下:

  • 执行Docker命令进行安装

     docker run -p 8080:8080 -p 5000:5000 --name jenkins \
    -u root \
    -v /mydata/jenkins_home:/var/jenkins_home \
    -d jenkins/jenkins:lts

    命令解析:

    -p 8080:8080 -p 5000:5000 指定主机和容器的映射端口;

    --name jenkins 指定容器名为jenkins;

    -u root 指定用户,这里root用户下;

    -v /mydata/jenkins_home:/var/jenkins_home 挂载目录;

    -d 是以后台形式启动容器; 最后一串是代表使用的镜像。

    访问8080端口看效果,如下:

  • 查找初始密码

    命令方式,如下:

     docker logs jenkins # 看容器的启动日志

    进入容器内部看初始密码文件的方式,如下:

  • 安装插件

    登录之后就提示进行插件安装,刚开始直接安装推荐插件即可;

    接下来就是等待插件安装完成即可,如果安装失败,就多试几次。

  • 新建用户

    推荐插件安装完毕之后,会出现新建用户的界面,根据自己需要创建属于自己的新账号,如下:

  • 配置地址,这个地址先按默认的来,后续用到了我们再来解释

  • 安装完成

总结

其实对于项目周期的管理越是简单高效越好,不要盲目使用工具; 就比如小小的单体程序,各种持续集成、部署工具都用上,那就是自己给自己添堵,一定要以解决问题为目的。

到这就先把Jenkins环境搭建好,后续的文章会陆续分享,从代码到最后容器化,咱们一步一步的来;之后的案例将会使用码云作为代码的版本控制服务器,相对github来说比较快,不过原理都差不多。关注“Code综艺圈”,和我一起学习吧;

持续集成、持续交付(CI/CD)开篇,先来唠唠嗑的更多相关文章

  1. Docker——Jenkins + Git + Registry构建自动化持续集成环境(CI/CD)

    前言 在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD). 本文基于Jenkins+Docker+G ...

  2. 手把手详解持续集成之GitLab CI/CD

    一.环境准备 首先需要有一台 GitLab 服务器,然后需要有个项目:这里示例项目以 Spring Boot 项目为例,然后最好有一台专门用来 Build 的机器,实际生产中如果 Build 任务不频 ...

  3. CI / CD /CD 持续集成 持续交付 持续部署

    CI / CD /CD 持续集成 持续交付 持续部署 CI CD 是啥?干了啥? CI continuous integration 持续集成 CD continuous delivery 持续交付 ...

  4. CI/CD持续集成/持续部署 敏捷开发

    敏捷软件开发(英语:Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力.它 ...

  5. 容器镜像服务联手 IDE 插件,实现一键部署、持续集成与交付

    容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...

  6. SAP开源的持续集成-持续交付的解决方案

    SAP开源的持续集成/持续交付的解决方案: (1) 一个叫做piper的github项目,包含一个针对Jenkins的共享库和一个方便大家快速搭建CI/CD环境的Docker镜像: (2) 一套SAP ...

  7. 容器镜像服务 联手 IDE 插件,实现一键部署、持续集成与交付

    容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...

  8. Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 【持续集成与交付快速入门必备】

    Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 [持续集成与交付快速入门必备]

  9. 构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境

    构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境 整个环境的结构图. 一.准备工作 gitlab和harbor我是安装在kubernetes集群外 ...

随机推荐

  1. SVN基本配置--创建版本库(图文并茂)

    SVN基本配置简 上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及TortoiseSVN的使 ...

  2. 高级测试必备技能,Jenkins

    Jenkins安装 前言 Jenkins是一个广泛用于持续构建的可视化web工具,就是各种项目的的"自动化"编译.打包.分发部署,将以前编译.打包.上传.部署到Tomcat中的过程 ...

  3. join方法个人理解

    首先抛出对join的疑问 如果我有一个a线程,一个b线程 那此时 a.start(); b.start(); a.join(); b.join(); 是否意思是a线程先执行完,然后再执行b线程; 如果 ...

  4. Cookie实现是否第一次登陆/显示上次登陆时间

    Cookie实现是否第一次登陆/显示上次登陆时间 最近刚好看到Cookie这方面知识,对Servlet部分知识已经生疏,重新翻出已经遗弃角落的<JavaWeb开发实战经典>,重新温习了Co ...

  5. Jetbrains CLion 安装与激活 详解

    1. 下载与安装 1.1 下载 这里提供了三个操作系统的官网下载地址 Mac Windows Linux 进入页面后向下拉点击蓝色按钮即可下载. 1.2 安装 这里将用 MacOS 来进行示例,Win ...

  6. asp.net core 集成swagger ui

    什么是Swagger? 说swagger 之前,我们先说一下OpenApi 规范. OpenApi 是一种和语言无关的用于描述RESTAPIs 接口功能的一种规范,对RESTAPIs 接口的描述包括: ...

  7. MYSQL小版本升级(5.7.21至5.7.25)

    1.环境确认 [root@mysql ~]# ps -ef |grep -i mysql root 9173 1 0 2020 ? 00:00:00 /bin/sh /mysql/data/mysql ...

  8. 三种方法求解最大子区间和:DP、前缀和、分治

    题目 洛谷:P1115 最大子段和 LeetCode:最大子序和 给出一个长度为 \(n\) 的序列 \(a\),选出其中连续且非空的一段使得这段和最大. 挺经典的一道题目,下面分别介绍 \(O(n) ...

  9. JUC之Executor,ExecutorService接口,AbstractExecutorService类

    java多线程的Executor中定义了一个execut方法,ExecutorService接口继承了Executor接口,并进行了功能的扩展组合,定义了shutdown,shutdownNow,su ...

  10. 苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功

    苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功 这是苹果wwdc2021 推出的新功能 参考官网链接 App Store Server API | Apple Deve ...