持续集成 订阅
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。 展开全文
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
信息
外文名
Continuous integration
属    于
软件开发实践
过    程
敏捷开发
中文名
持续集成
学    科
电子工程
持续集成定义
大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。持续集成的宗旨是避免集成问题,如同在极限编程(XP)方法学中描述的集成地狱。持续集成并非普遍接受是用来改善集成频率的方法,因此重要的是区分两者所带来的效益。在极限编程方法学,持续集成需要达到最佳成果,必须依靠着自动化集成单元测试并通过测试驱动开发。首先必须设想在上线运作之前,已在开发环境完成并通过所有的单元测试。这将帮助避免一个开发者的作业流程,导致其他开发者作业的中断。如果有需要,可以在完整上线运作之前进用部分已完成的功能,例如使用功能切换。接着进行CI服务器建置概念的阐述、自动化运行单元测试的周期与每次测试需要提交给开发者的报告。建置CI服务器的用途(不一定要运行单元测试) 已经开始在极限编程(XP)社群之外的团队练习。如今,许多企业组织已经开始采用持续性集成,而非采用完整的极限编程(XP)。除了自动化单元测试,组织在运用持续性集成(CI)一般会建置CI服务器来维护持续性套用质量控制的程序-小部分的影响,并且经常性使用。除了运行单元与集成测试之外,还有额外的静态与动态测试,量测与描述性能,从程序来源码摘录与文件格式与促成手动质量保证(QA)程序。持续性质量控制应用程序用意在提升软件质量以及减少交付的时间,在完成所有开发后,取代传统软件上线质量控制机制。此非常相似进行频繁集成的最初概念让集成得以在QA程序上更容易地达成。同样的道理,持续性交付的最佳实践进一步扩展了持续性集成(CI),以确保软件检核在主要程序上并且能够布署到用户以确保实际的布署流程可以非常快速。 [1] 
收起全文
精华内容
下载资源
问答
  • 持续集成

    2019-06-25 16:00:15
    持续集成一,CI/CD是什么 一,CI/CD是什么 CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新...

    一,CI/CD是什么

    CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。

    在这里插入图片描述

    CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。

    在这里插入图片描述

    展开全文
  • 持续集成、持续交付、持续部署

    千次阅读 2019-08-19 17:19:23
    持续集成持续集成持续集成好处持续集成流程使用 GitLab 持续集成Gitlab Runner持续交付持续交付概念持续部署持续部署 持续集成 持续集成好处 持续集成指的是, 频繁的将代码集成到主干。 好处: 1. 快速发现错误 。...

    持续集成

    持续集成好处

    持续集成指的是, 频繁的将代码集成到主干。
    好处:
    	1. 快速发现错误 。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
    	2. 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
    持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
    

    持续集成流程

    代码从提交到生产,有以下步骤
    1. 提交
    	持续集成的第一步是开发者向代码仓库提交代码。
    2. 测试
    	代码仓库对 commit 操作配置了钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试。
    	测试分为:
    		1. 单元测试:针对函数或模块的测试
    		2. 集成测试:针对整体产品的某个功能的测试,又称功能测试
    		3. 端对端测试:从用户界面直达数据库的全链路测试
    	第一轮至少跑完单元测试
    3. 构建
    	通过第一轮测试后,代码可以合并主干,就算可以交付了。
    	交付后,先构建(build),再开始第二轮测试。我们使用jenkins来构建。它会将构建和测试,在一次运行中执行完成。
    4. 测试(第二轮)
    	如果第一轮已经涵盖了所有测试内容,第二轮可以省略,但构建步骤要移到第一轮前面。
    	第二轮是全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试。
    	新版本的每一个更新点都必须测试到。如果测试的覆盖率不高,进入后面的部署阶段后,很可能会出现严重的问题。
    5. 部署
    	通过了第二轮测试,当前代码就是一个可以直接部署的版本(artifact)。将这个版本的所有文件打包(tar)存档,发到生产服务器。
    6. 回滚
    	一旦当前版本发生问题,就要回滚到上一个版本的构建结果。最简单的做法就是修改一下符号链接,指向上一个版本的目录。
    

    使用 GitLab 持续集成

    Gitlab CI

    1. 从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,
    	即可进行持续集成。 而且随着 GitLab 的升级,GitLab CI 变得越来越强大。
    2. 概念分为:Pipeline(管道),Stages(阶段),Jobs(工作)
    	1. 一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程(Stages),如安装依赖、运行测试、编译、部署测试服务器、
    		部署生产服务器等流程。任何提交或者 Merge Request 的合并都可以触发 Pipeline。
    	2. Stages 表示构建阶段,我们可以在一次 Pipeline 中定义多个 Stages。
    		所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始
    		只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功。
    		如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败。
    	3. Jobs 表示构建工作,我们可以在 Stages 里面定义多个 Jobs。
    		相同 Stage 中的 Jobs 会并行执行。
    		相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功。
    		如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败。
    

    Gitlab Runner

    概念:构建任务都会占用很多的系统资源 (譬如编译代码),而 GitLab CI 又是 GitLab 的一部分,如果由 GitLab CI 来运行构建任务的话,
    	在执行构建任务的时候,GitLab 的性能会大幅下降。GitLab CI 最大的作用是管理各个项目的构建状态,因此,运行构建任务使用
    	GitLab Runner。GitLab Runner可以安装到不同的机器上,所以在构建任务运行期间并不会影响到 GitLab 的性能。
    

    Gitlab、Gitlab CI和Gitlab Runner的关系

    1. gitlab: 代码托管平台
    2. Gitlab CI: 最大作用是监控项目的构建状态
    3. Gitlab Runner: 运行构建任务
    Gitlab Runner安装
    1. gitlab-runner版本要与gitlab对应(去gitlab管理区域查看版本)
    2. gitlab-runner本身不只为java持续集成,对java持续集成需要安装jdk、maven,制作镜像和上传需要安装docker和配置docker仓库,因此我们基于原生镜像制作含有以上配置的镜像
      在/usr/local/docker/runner目录下创建
      1. docker-compose.yml (构建同级目录Dockerfile镜像并运行)
      2. Dockerfile ( 制作镜像命令文件)
      3. daemon.json (用于配置加速器和仓库地址)
      4. jdk (wget下载或官网下载上传 )
      5. maven (Dockerfile里直接下载了,jdk也可以这种方式 两种方式都演示了,下载报错的话要修改版本)
    3. docker-compose.yml(privileged: true 以管理员身份操作容器)
    version: '3.1'
    services:
      gitlab-runner:
        build: ./
        restart: always
        container_name: gitlab-runner
        privileged: true
        volumes:
          - /usr/local/docker/runner/config:/etc/gitlab-runner
          - /var/run/docker.sock:/var/run/docker.sock
    
    1. Dockerfile
    FROM gitlab/gitlab-runner:v11.0.2
    
    # 修改软件源
    RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list && \
        echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources.list && \
        echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources.list && \
        echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/sources.list && \
        apt-get update -y && \
        apt-get clean
    
    # 安装 Docker
    RUN apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \
        curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add - && \
        add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && \
        apt-get update -y && \
        apt-get install -y docker-ce
    COPY daemon.json /etc/docker/daemon.json
    
    # 安装 Docker Compose
    WORKDIR /usr/local/bin
    RUN wget https://raw.githubusercontent.com/topsale/resources/master/docker/docker-compose
    RUN chmod +x docker-compose
    
    # 安装 Java 版本跟下载的保持一致
    RUN mkdir -p /usr/local/java
    WORKDIR /usr/local/java
    COPY jdk-8u171-linux-x64.tar.gz /usr/local/java
    RUN tar -zxvf jdk-8u152-linux-x64.tar.gz && \
        rm -fr jdk-8u152-linux-x64.tar.gz
    
    # 安装 Maven
    RUN mkdir -p /usr/local/maven
    WORKDIR /usr/local/maven
    RUN wget https://raw.githubusercontent.com/topsale/resources/master/maven/apache-maven-3.5.3-bin.tar.gz
    # COPY apache-maven-3.5.3-bin.tar.gz /usr/local/maven
    RUN tar -zxvf apache-maven-3.5.3-bin.tar.gz && \
        rm -fr apache-maven-3.5.3-bin.tar.gz
    # COPY settings.xml /usr/local/maven/apache-maven-3.5.3/conf/settings.xml
    
    # 配置环境变量
    ENV JAVA_HOME /usr/local/java/jdk1.8.0_152
    ENV MAVEN_HOME /usr/local/maven/apache-maven-3.5.3
    ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
    
    WORKDIR /
    

    3.daemon.json (insecure-registries 填写自己的docker仓库地址)

    
    {
      "registry-mirrors": [
        "https://registry.docker-cn.com"
      ],
      "insecure-registries": [
        "192.168.79.131:5000"
      ]
    }
    
    
    docker-compose up -d  构建并启动gitlab-runner
    

    Gitlab Runner注册

    1. docker exec -it gitlab-runner gitlab-runner register
    2. 先后输入URL和注册令牌(进入gitlab中需要持续集成的项目 设置 CI/CD中->Runner,复制图中内容)
      在这里插入图片描述
    3. description和tags可以直接跳过,最后选择shell
    4. runner下生成如下图
      在这里插入图片描述

    .gitlab-ci.yml流程

    1. 注册好的项目,提交代码后,gitlab-runner会拉取代码到容器内部。
    2. 按照编写的gitlab-ci.yml执行流程(打包+制作镜像->上传镜像->(关闭)运行镜像->清理虚悬镜像)
    build模块要打包和构建在一个流程,下个流程会删掉之前的操作(上传 制作镜像等保存操作不会删除)
    
    stages:
      stages:
      - build
      - push
      - run
      - clean
    ##### .gitlab-ci.yml
    build:
      stage: build
      script:
        - /usr/local/maven/apache-maven-3.5.3/bin/mvn clean package
        - cp target/itoken-config-1.0.0-SNAPSHOT.jar docker
        - cd docker
        - docker build -t 192.168.79.131:5000/itoken-config .
    push:
      stage: push
      script:
        - docker push 192.168.79.131:5000/itoken-config
    run:
      stage: run
      script:
        - cd docker
        - docker-compose down
        - docker-compose up -d
    clean:
      stage: clean
      script:
        - docker rmi $(docker images -q -f dangling=true)
    
    
    Dockerfile
    FROM openjdk:8-jre
    ENV APP_VERSION 1.0.0-SNAPSHOT
    RUN mkdir /app
    COPY itoken-config-$APP_VERSION.jar /app/app.jar
    # CMD和ENTRYPOINT两种方式  ENTRYPOINT支持顺序和多项目启动
    # CMD java -jar /app/app.jar --spring.profiles.active=prod
    ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar", "--spring.profiles.active=prod"]
    EXPOSE 8888
    
    docker-compose.yml
    version: '3.1'
    services:
      itoken-config:
        restart: always
        image: 192.168.79.131:5000/itoken-config
        container_name: itoken-config
        ports:
          - 8888:8888
        networks:
          - config_network
    networks:
      config_network:
    
    Dockerfile(+DOCKERIZE)
    微服务有启动先后顺序,可以用DOCKERIZE来设置
    
    FROM openjdk:8-jre
    RUN mkdir /app
    ENV DOCKERIZE_VERSION v0.6.1
    RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
        && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
        && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
    COPY itoken-eureka-1.0.0-SNAPSHOT.jar /app/app.jar
    ENTRYPOINT ["dockerize", "-timeout", "5m", "-wait", "http://192.168.79.135:8888/respo/eureka", "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar", "--spring.profiles.active=prod"]
    EXPOSE 8761
    
    

    持续交付

    持续交付概念

    持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
    持续交付强调的是,不管怎么更新,软件是随时随地可以交付的。
    

    持续部署

    持续部署

    持续部署指的是代码通过评审以后,自动部署到生产环境。
    持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
    持续部署的前提是能自动化完成测试、构建、部署等步骤。
    
    展开全文
  • 持续集成 乔梁老师

    2014-01-22 11:37:47
    持续集成\乔梁-持续交付最佳实践.pdf 持续集成\挑战互联网团队从LeanStartup看持续交付 - 熊子川 2012.pdf 持续集成\16_持续交付的魅力——百度持续集成实践经验分享.pdf 持续集成\16_与大象共舞——持续交付高...
  • 理解持续集成

    2019-05-10 10:19:44
    理解持续集成什么是持续集成持续集成的特点持续集成作用 什么是持续集成 持续集成 Continuous integration ,简称CI ​ 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经...

    什么是持续集成

    持续集成 Continuous integration ,简称CI
    ​ 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。
    尤其是近些年来,敏捷(Agile)在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。
    持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。

    持续集成的特点

    1)它是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预;
    2)需要有专门的集成服务器来执行集成构建;
    3)需要有代码托管工具支持,可以用Git以及可视化界面Gogs的使用;

    持续集成作用

    1)保证团队开发人员提交代码的质量,减轻了软件发布时的压力;
    2)持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复
    过程以节省时间、费用和工作量;

    展开全文
  • 持续集成和持续交付

    2019-03-21 14:53:24
    持续集成和持续交付 摘要 今天看到群友羊宏飞说了下关于持续集成的概念,之前一直听说,但不知道是啥意思,现在就记录下。 0x01 持续集成 开发和测试 达成高效协作 叫做 持续集成。 devops 这个集成的功能在机器上...

    持续集成和持续交付

    摘要

    今天看到群友羊宏飞说了下关于持续集成的概念,之前一直听说,但不知道是啥意思,现在就记录下。

    0x01 持续集成

    开发和测试 达成高效协作 叫做 持续集成。

    • devops
      这个集成的功能在机器上能运行需要运维。 开发-测试-运维 达成闭环叫做 devops、

    0x02 敏捷迭代

    产品经理有了一个idea,想做给到开发去设计实现,由测试来完成自动化,这个闭环叫做敏捷迭代 。

    0x03 持续交付

    产品经理-开发-测试-运维一起完成的闭环叫做持续交付。

    展开全文
  • GitLab持续集成持续部署(CI&CD)

    万次阅读 多人点赞 2018-06-02 22:57:21
    GitLab CI是 GitLab 提供的持续集成服务,只要在你的仓库根目录 创建一个.gitlab-ci.yml 文件, 并为该项目指派一个Runner,当有合并请求或者 push的时候就会触发build。 这个.gitlab-ci.yml 文件定义GitLab runner...
  • 持续集成工具之Concourse

    千人学习 2017-10-27 14:36:46
    持续集成工具之Concourse视频教程,该培训课程主页围绕Concourse,作为由Pivotal赞助的开源的CI(Continuous Integration,持续集成)工具,在目前市场上已经普遍使用,Concourse以pipeline机制运行集成任务。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,847
精华内容 10,738
关键字:

持续集成