前言

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

极限编程(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. 使用Golang搭建gRPC服务提供给.NetCore客户端调用

    目录 gRPC概述 RPC gRPC又是什么呢 安装 Golang IDE(Goland) Protocol Buffer 下载Protocal Buffer 配置Protocal Buffer编译器 ...

  2. uniapp内嵌H5页面和uniapp页面相互传值

    最近项目有一个需求 -- 做一个百人抽奖的模块,要求展示百人的头像并且不断变化排列组合 先展示一部分的用户头像,然后每增加一个用户就增加一个头像在百人排列里面 我整一个gif图来展示一下 大概就是这种 ...

  3. 2020 年国内 Serverless 用户规模:阿里云占比第一,达 66%

    在中国信息通信研究院重磅发布的国内首个<云原生用户调查报告>中,阿里云 Serverless 产品凭借在双十一的技术锤炼和丰富的应用实践,在国内 Serverless 用户规模的占比达到 ...

  4. 初探区块链数字加密资产标准ERC721

    ERC721介绍 数字加密货币大致可以分为原生币(coin)和代币(token)两大类.前者如BTC.ETH等,拥有自己的区块链.后者如Tether.TRON.ONT等,依附于现有的区块链.市场上流通 ...

  5. 关于web项目中的资源跳转

    1.跳转包括两种方式: 转发 forward 重定向 redirect 2.两种方式的代码: AServlet类: //向request范围中存储数据 request.setAttribute(&qu ...

  6. 浅析InnoDB引擎的索引和索引原理

    浅析InnoDB引擎的索引和索引原理 什么是InnoDB的索引 InnoDB的索引就是一颗B+树.页是InnoDB引擎在内存和磁盘之间交换数据的基本单位,页的大小一般是16KB,页的大小可以在启动My ...

  7. CF193D Two Segments (线段树+dp)(外加两个扩展题)

    大概算是个系列整理 (最强版是模拟赛原题)) 首先,我们先来看这个题目. QWQ一开始是毫无头绪,除了枚举就是枚举 首先,我们可以枚举一个右端点,然后算一下当前右端点的答案 我们令\(f[l,r]\) ...

  8. 一个小众搞笑的xss漏洞练习平台

    XSS是当今网络安全事件中数量最多的攻击方式,虽然其危害性不高,但主要和其他攻击手段相结合,以实现一个复杂的攻击场景.那么,XSS是什么? XSS全称跨站脚本(Cross Site Scripting ...

  9. 为代码编写稳定的单元测试 [Go]

    为代码编写稳定的单元测试 本文档配套代码仓库地址: https://github.com/liweiforeveryoung/curd_demo 配合 git checkout 出指定 commit ...

  10. Golang通脉之map

    Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现. map 是一种无序的键值对的集合.map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值 map ...