• 售前

  • 售后

热门帖子
入门百科

Docker下使用jenkins和docker实现持续交付

[复制链接]
向往草原403 显示全部楼层 发表于 2021-10-26 13:06:28 |阅读模式 打印 上一主题 下一主题
一.什么是连续交付
  让软件产物的产出过程在一个短周期内完成,以保证软件可以稳固、连续的保持在随时可以发布的状态。它的目标在于让软件的构建、测试与发布变得更快以及更频仍。这种方式可以减少软件开辟的成本与时间,减少风险。
二.对比连续交付和传统交付
  传统交付的发布周期可以表示为下图:
    

  传统交付的缺点:
慢交付:在这里,客户在指定需求之后很长时间才收到产物。这导致了不满足的上市时间和客户反馈的耽误。
  反馈周期长:反馈周期不仅与客户有关,还与开辟职员有关。假设您不测地创建了一个bug,并在UAT阶段相识了它。修理你两个月前修过的东西必要多长时间?即使是很小的错误也会耗费数周的时间。
  危险的热修复步伐:热修复步伐通常不能等候完备的UAT阶段,因此它们的测试方式每每差别(UAT阶段缩短了),大概根本没有测试。
  压力:对运营团队来说,无法猜测的发布是有压力的。更重要的是,发布周期通常被安排得很紧,这给开辟职员和测试职员带来了额外的压力。
  为了可以或许连续地交付产物,而不是将大笔资金花在全天候工作的运营团队上,我们必要主动化。这就是为什么,连续交付就是将传统交付过程的每个阶段都更改为一系列脚本,称为主动部署管道或连续交付管道。
  然后,假如不必要手动步骤,我们可以在每次代码更改之后运行该流程,从而不断地将产物交付给用户。
连续交付的长处:
快速交付:开辟完成后,客户就可以使用产物,大大缩短了产物上市的时间。请记着,软件只有在用户手中才会带来收入。
快速反馈周期:假设您在代码中创建了一个bug,该bug在同一天投入生产。要花多少时间才能修睦你当天工作的东西?大概没有那么多。这与快速回滚计谋一起,是保持生产稳固的最佳方法。
低风险的发布:假如您每天都发布,那么这个过程就会变得可重复,因此更加安全。
机动的发布选项:假如您必要立刻发布,那么一切都已经预备好了,因此没有与发布决策相关的额外时间/成本。
   不消说,我们可以通过消除所有交付阶段并直接在生产上举行开辟来实现所有的好处。然而,这将导致质量下降。实际上,引入连续交付的全部困难在于担心质量会随着取消手工步骤而降低。我们将展示怎样以一种安全的方式处置处罚它,交付的产物不断地有更少的bug,并更好地适应客户的需求。
三.怎么实现连续交付
  主动化部署管道,它包括如下图所示的三个阶段:

  每一步都对应着传统交付过程中的一个阶段,具体如下:
    连续集成:检查以确保差别开辟职员编写的代码集成在一起    
    主动化验收测试:这将代替手工QA阶段,并检查开辟职员实现的特性是否满足客户的需 求
  设置管理:这将代替手工操纵阶段——设置环境和部署软件
  1.连续集成
    连续集成阶段向开辟职员提供第一个反馈。它从存储库(git,svn)中检出代码,编译代码,运行单元测试,并验证代码质量。假如任何步骤失败,则克制管道执行,开辟职员应该做的第一件事是修复连续集成构建。
  2.主动化验收测试
    主动化验收测试阶段是和QAs一起编写的一组测试,这些测试应该更换手动UAT阶段。它作为一个质量查验关来决定一个产物是否预备好发布。假如任何验收测试失败,则克制管道执行,不再运行进一步的步骤。它克制移动到设置管理阶段,从而克制发布。
  3.设置管理
    设置管理阶段负责跟踪和控制软件及其环境中的更改。它涉及预备和安装须要的工具、扩展服务实例的数量及其分布、底子设施清单以及与应用步伐部署相关的所有使命。
    设置管理是针对在生产环境中手动部署和设置应用步伐所带来的问题的办理方案。设置管理工具(如Ansible、Chef或Puppet)支持在版本控制系统中存储设置文件,并跟踪在生产服务器上所做的每个更改。
    更换操纵(运维)团队手工使命的另一项工作是负责应用步伐监视。这通常是通过将运行系统的日志和指标流到一个公共仪表板来完成的,该仪表板由开辟职员(或DevOps团队,如下一节所述)监视。
四.工具 
 1.docker生态链
      Docker作为集装箱化的领导者,比年来在软件行业占据了主导地位。它允许在与环境无关的映像中打包应用步伐,因此将服务器视为一个资源场,而不是必须为每个应用步伐设置的机器。
      Docker是一个明白选择,由于它非常得当(微)服务天下和连续交付过程。
 2.jenkins
      Jenkins是现在市场上最盛行的主动化服务器。它有助于创建连续集成和连续交付管道,通常尚有助于创建任何其他主动化的脚本。高度面向插件,它有一个巨大的社区,不断扩展它的新功能。
      更重要的是,它允许将管道编写为代码并支持分布式构建环境。
 3. Ansible
    Ansible是一个主动化工具,可以资助举行软件设置、设置管理和应用步伐部署。它接纳无署理的体系布局,并与Docker举行了良好的集成。
 4.gitHub
    GitHub绝对是所有托管版本控制系统中排名第一的。它提供了一个非常稳固的系统,一个基于web的UI,以及一个公共存储库的免费服务。
    尽管云云,任何源代码控制管理服务或工具都可以使用连续交付,无论它是在云中照旧自托管的,也无论它是基于Git、SVN、Mercurial或任何其他工具。
          

五.docker实战

1.docker概述

    Docker是一个开源项目,旨在资助使用软件容器举行应用步伐部署。以下引用自Docker官方页面:
    Docker容器将一段软件封装在一个完备的文件系统中,该文件系统包罗运行所需的一切:代码、运行时、系统工具、系统库——任何可以安装在服务器上的东西。这保证了软件将始终运行相同的,不管它的环境怎样。
    因此,Docker以类似于虚拟化的方式,允许将应用步伐打包成可以在任何地方运行的映像。
 2.虚拟化和容器化
    没有Docker,使用硬件虚拟化(通常称为虚拟机)可以实现隔离和其他好处。最盛行的办理方案是VirtualBox、VMware和Parallels。
    虚拟机模拟计算机体系布局并提供物理计算机的功能。假如每个应用步伐都作为单独的虚拟机映像交付并运行,我们就可以实现应用步伐的完全隔离。下图展示了虚拟化的概念:
    

    每个应用步伐都作为独立的映像启动,此中包罗所有依赖项和客户操纵系统。映像由虚拟机监控步伐运行,虚拟机监控步伐模拟物理计算机体系布局。
    许多工具(如Vagrant)都广泛支持这种部署方法,并致力于开辟和测试环境。然而,虚拟化有三个明显的缺点:
      低性能:虚拟机模拟整个计算机体系布局来运行客户操纵系统,因此每个操纵都有很大的开销。
      高资源消耗:模拟必要大量的资源,而且必须为每个应用步伐分别执行。这就是为什么在尺度的台式机上,只有几个应用步伐可以同时运行。
      大型映像:每个应用步伐都使用完备的操纵系统交付,因此在服务器上的部署意味着发送和存储大量数据。
    下面的图是docker带来的差别:
      

3.docker的安装  
      Docker的安装过程快速简朴。现在,大多数Linux操纵系统都支持它,此中许多都提供了专用的二进制文件。Mac和Windows也得到了本地应用步伐的良好支持。
      但是,重要的是要明白Docker内部是基于Linux内核及其细节的,这就是为什么在Mac和Windows中,它使用虚拟机(Mac使用xhyve, Windows使用hyv)来运行Docker引擎环境。
      这里只说在linux上的Ubuntu 16.04操纵(官方的下令):   
  1. $ sudo apt-get update
  2. $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
  3. $ sudo apt-add-repository 'deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial main stable'
  4. $ sudo apt-get update
  5. $ sudo apt-get install -y docker-ce
复制代码
            假如提示报错:
      ,

可以再次执行下面的下令:
  1. $ cd /etc/apt/sources.list.d
  2. $ sudo vi docker.list
  3.   deb https://download.docker.com/linux/ubuntu zesty edge
  4. $sudo apt update
  5. $sudo apt install docker-ce
复制代码
 这一次没有报错,但是发现太慢了,由于下载docker-ce比较大,而且是国外网站,这里可以改成国内源,指令如下:
  1. sudo apt-get update
  2. sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
  3. curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add
  4. sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  5. sudo apt-get update
  6. sudo apt-get install docker-ce
复制代码
  测试是否安装完成:docker -v大概docker info可以看到docker一些根本信息表示安装成功了:


  4.运行docker
    docker的环境已经安装完成,我们可以先运行一个非常经典的例子:hello world:
   
  1.  $ docker run hello-world
复制代码
    当你看到如下信息表示你运行正确了:
    

      让我们一步一步来看看引擎盖下面发生了什么:
        1.使用run下令运行Docker客户机。
        2.Docker客户机接洽Docker守护进程,要求从名为hello-world的映像创建一个容器。
        3.Docker守护进程检查它是否在本地包罗hello-world映像,由于它没有,以是从远程Docker Hub注册中心请求hello-world映像。
        4.Docker Hub注册表包罗hello-world映像,因此将其拖放到Docker守护进程中。
        5.Docker守护进程从hello-world映像创建了一个新容器,该映像启动了天生输出的可执行文件。
        6.Docker守护进程将此输出流到Docker客户机。
        7.Docker客户机将其发送到您的终端。
        

  5.构建镜像
    构建镜像有2种方式:
Docker commit下令和Dockerfile主动构建。我们来探究下docker怎么构建镜像的。
我再这只说Dockerfile方式:
      使用commit下令手动创建每个Docker映像大概很费力,特别是在构建主动化和连续交 付过程的环境下。荣幸的是,有一种内置语言可以指定构建Docker映像所需执行的所有指令。
      1.创建DockerFile文件,并输入以下内容:  
  1. FROM ubuntu:16.04
  2. RUN apt-get update && \
  3. apt-get install -y python
复制代码
    2.执行构建镜像下令:
  1. docker build -t ubuntu_with_python .
复制代码
        3. 我们可以通过下令:
  docker images看到我们创建了的镜像:

6.docker容器
    我们可以通过下令:docker ps检察正在运行的容器,docker ps -a检察所有容器。容器是有状态的。
  通过镜像来启动容器,而且检察容器的状态:
    
    克制docker容器是下令:docker stop 容器id
    
   7.运行tomcat,使用外部访问
    1.运行tomcat镜像:
      
  1. docker run -d tomcat  
复制代码
  
但是我们外部欣赏器是访问不到tomcat 8080端口的,中间有虚拟机阻断了网络毗连。
以是我们启动容器的时间,就要用-p指令来毗连虚拟主机和docker容器的网络端口映射
    2.-p启动

  
  1. docker run -d -p 8080:8080 tomcat
复制代码
    在网页输入虚拟机ip+端口访问如下:

六.jenkins实战  
1.先容jenkins
    
      Jenkins是一个用Java编写的开源主动化服务器。由于非常活泼的基于社区的支持和大量的插件,它是实现连续集成和连续交付过程的最盛行的工具。
Jenkins优于其他连续集成工具,是同类软件中使用最广泛的。由于它的特性和功能,这一切都是大概的。
2.安装jenkins     
Jenkins的安装过程快速而简朴。有许多差别的方法可以做到这一点,但是由于我们已经认识Docker工具及其带来的好处,我们将从基于Docker的办理方案开始。这也是最简朴、最可猜测和最聪明的方法。
jenkins的安装有一些环境要求:
Java 8 256MB free memory 1 GB+ free disk space
然而,必须明白需求严酷依赖于您筹划使用Jenkins做什么。假如Jenkins用作整个团队的连续集成服务器,那么即使是小团队,也发起使用1gb +空闲内存和50gb +空闲磁盘空间。不消说,Jenkins还执行一些计算并在网络上传输大量数据,因此CPU和带宽是至关重要的。
安装jenkins有两种方式:
1.使用docker镜像
2.不使用docker镜像
1.使用docker镜像安装jenkins
使用下令:
  1. docker run -p <host_port>:8080 -v <host_volume>:/var/jenkins_home jenkins:2.60.1
复制代码
在网页上输入网址,如图代表安装成功:
      

    输入暗码,是在日志中可以看到一个初始暗码:
      

    2.不使用docker镜像安装jenkins
安装也非常简朴,只必要执行以下下令:
  1. $ wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
  2. $ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
  3. $ sudo apt-get update
  4. $ sudo apt-get install jenkins
复制代码
  3.jenkins简朴应用(hello world)
      
        让我们遵循这条规则,看看创建第一个Jenkins管道的步骤:
单击New Item。
输入hello world作为项目名称,选择Pipeline,然后单击OK。
有许多选择。现在我们将跳过它们,直接进入管道部分。
在脚本文本框中,我们可以输入流水线脚本:
  1. pipeline {
  2.    agent any
  3.    stages {
  4.     stage("Hello") {
  5.       steps {
  6.        echo 'Hello World'
  7.       }
  8.     }
  9.    }
  10.   }
复制代码
           点击保存,而且立刻构建,我们可以在输出日志内里看到如下图:
      

七.连续集成管道
  1.先容管道
      
      管道可以明白为一系列的主动化操纵,可以当作是一个简朴的脚本链:
操纵分组:将操纵分组到各个阶段(也称为门或质量门),这些阶段向流程引入一 个布局,并明白定义了规则:假如一个阶段失败,则不再执行其他阶段
可见性:流程的所有方面都是可视化的,这有助于快速举行故障分析并促进团队协作
反馈:团队成员在任何问题发生时都能实时相识,如许他们就能快速做出反应
2.管道布局
      Jenkins管道由两种元素组成:阶段和步骤。下图显示了怎样使用它们:
        

   3.管道的hello world
   
  1. pipeline {
  2.   agent any
  3.   stages {
  4.    stage('First Stage') {
  5.     steps {
  6.      echo 'Step 1. Hello World'
  7.     }
  8.    }
  9.    stage('Second Stage') {
  10.     steps {
  11.      echo 'Step 2. Second time Hello'
  12.      echo 'Step 3. Third time Hello'
  13.     }
  14.    }
  15.   }
  16. }
复制代码
    
      立刻构建成功后可以看到以下图:
      

   4.管道规则   
     Agent:它指定执行发生的位置,并可以定义标签来匹配标志相同的署理或docker,以指定动态预备的容器,以便为管道执行提供环境
Triggers:这定义了主动触发管道的方法,并可以使用cron设置基于时间的调度或pollScm来检查存储库中的更改(我们将在触发器和通知部分具体先容)
Options:这指定了特定管道的选项,例如超时(管道运行的最大时间)或重试(失败后应该重新运行管道的次数)
Environment:这定义了一组关键值,在构建过程中用作环境变量
Parameters:这定义了一个用户输入参数列表
Stage:这允许对步骤举行逻辑分组
When:这决定是否应该根据给定的条件执行阶段
 这个就是最底子的一些知识,后续会发一些高级一点的特性。
总结
以上所述是小编给各人先容的Docker下使用jenkins和docker实现连续交付,希望对各人有所资助,假如各人有任何疑问接待给我留言,小编会实时复兴各人的!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作