精华内容
下载资源
问答
  • 持续集成方案

    2021-02-25 09:58:54
    在使用持续集成之前,很多开发团队都是用每日构建(nightlybuild)。当时,微软使用这个实践很多年了。谁破坏了构建,就要负责监视后续的构建构成,直至发现下一个破坏了构建的人。对于大多数项目来说,采纳持续集成...
  • 持续集成方案调研

    2019-10-25 12:07:36
    我们的持续集成方案? 第一个问题:什么是持续集成? 与持续集成相关的,还有两个概念,分别是持续交付和持续部署。 持续集成指的是,频繁地(一天多次)将代码集成到主干。 持续交付(Continuous delivery)指的...

    要做持续集成,其实就是回答下面几个问题:

    1. 什么是持续集成?
    2. 为什么要做持续集成?
    3. 我们的持续集成方案?

    第一个问题:什么是持续集成? 与持续集成相关的,还有两个概念,分别是持续交付和持续部署。

    持续集成指的是,频繁地(一天多次)将代码集成到主干。

    持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。

    持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

    持续集成本身只是一种practice,在任何一种开发模型中都可以采用

    这里不容易解释清楚的是持续交付,持续部署与持续集成的区别是什么?交付测试的内容是什么?与集成前的自动化测试是区别在哪里?有没有必要做?

    举个例子:

    1. 通常情况下开发在dev分支提交代码,并进行自测
    2. 可以持续的(指定的集成频率,如每天一次或几次)向xxx分支集成代码(必须通过特定条件,如自动化测试通过)
    3. 我们的集成测试环境是每5分钟检测一下xxx分支是否有代码变化,如有就自动布署,做到了持续布署(我认为部署到测试环境也算持续部署,标准的说法是持续部署到生产环境)
    4. 那么持续交付在哪里?针对交付的时间,目标与对象不同,可以有如下几种情况:
      1. 开发环境测试通过后,交付给测试,目标是做集成测试
      2. 集成测试通过后,交付给运维,目标是部署到生产

    怎么才算交付?交付物是什么?对于web服务来说,代码集成到xxx分支即交付;对于需要打包的应用来说,将xxx分支源码打包后交付给目标对象,即交付

    我们经常说持续集成,但很少提及持续交付和持续部署,是因为通常我们所说的持续集成的流程,默认是包含了持续交付和持续部署的。根据上述对持续集成的理解,总结持续集成的流程如下:

    提交 --> 单元测试  -->  build完成  --> 自动化测试-->  集成到主干 --> 集成测试-->交付运维-->部署生产

    说到这里,有同学会问?你们集成测试通过后就可以交付运维部署到生产环境了吗?这样不保险吧,难道不应该有一个预发布环境吗?

    是的,这里缺少了一个环节,即类生产环境,或叫预发布环境,大多的互联网公司都是这么干的,在上线之前要经过一下预发布环境,以确保上线不会出现问题。

    这里为了说明持续集成的流程,故意忽略了这一步,因为这一步并不是必需的。在实际应用持续集成的过程中,会遇到各种各样的情况,最终的流程可能会远比这里讲的要复杂。但是道理是一致的,我希望通过尽量简短的流程来将其中的道理讲清楚。

    关于如何更好的理解持续集成,持续交付,持续部署,个人觉得有这篇博文写的很好,请参考:https://blog.csdn.net/qq_35368183/article/details/84558134

    第二个问题:为什么要做持续集成? 持续集成带来了哪些好处?

    持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。Martin Fowler说过,"持续集成并不能消除Bug,而是让它们非常容易发现和改正。"

    易于定位错误。也就是当你的持续集成失败了,说明你新加的代码或者修改的代码引起了错误,这样你很容易的就可以知道到底是谁犯了错误,可以找谁来讨论。

    及早在项目里取得系统级的成果。因为代码已经被集成起来了,所以即使整个系统还不是那么可用,但至少你和你的团队都已经可以看到它已经在那了。

    改善对进度的控制。这点非常明显,如果每天都在集成,当然每天都可以看到哪些功能可以使用,哪些功能还没有实现。如果你是程序员,你不用在汇报任务的时候说我完成了多少百分比而烦恼,而如果你是项目经理的话,那么你也不再烦恼程序员说完成了编码的50%到底是个什么概念。

    改善客户关系。理由同上。

    更加充分地测试系统中的各个单元。这也是我们常讲的Daily Build与Smoke Test相结合带来的绝大好处。

    能在更短的时间里建造整个系统。这点恐怕要你实施以后才能得出结论。就我们而言,持续集成并没有为每个项目都缩短时间,但却比没有实施时,项目更加可控,也更加有保证。

     

    随着时间的推移,持续集成带来的更多好处,也逐渐被认识到了,比如说:

    有助于项目的开发数据的收集。比如说,项目代码量的变化,经常出错的Tests,经常出错的source code,等等。

    与其它工具结合的持续代码质量改进。如与CheckStyle, PMD, FindBugs, Fxcop等等等等的结合。

    与测试工具或者框架结合的持续测试。如与xUnit,SilkTest, LoadRunner等等的结合。

    便于Code Review。在每个build里,我们都可以知道与前一个build之间有什么改动,然后针对这些改动,我们就可以实施Code Review了。

    便于开发流程的管理。比如说,要把一个开发的build提交给测试组作测试,测完满意了,再提交到发布组去发布。

     

    个人总结:

    不能说持续集成一定好,非持续集成一定不好。非持续集成,即阶段性集成在流程规范,测试合理的情况下也能保证产品质量,取得好的结果

    正是因为自动化的介入,提高了集成的频率,所以叫持续集成

    持续集成与非持续集成的区别:

    • 自动化测试
    • 集成的频率

    主干:用来做持续集成控制的分支

     

    第三个问题:适合我们的持续集成方案

    解决如下几个主要问题:

    1. 规范开发流程
    2. 确定集成分支(即控制分支,只有达到特定条件,才允许代码集成的分支)
    3. 确定集成频率

    注:控制分支也可以有多个,比如即在develop分支做集成控制,又在release分支做集成控制。项目规模越大,参与人员越多,控制流程就越复杂。这里我针对我们现在的开发团队规模,考虑到控制的成本和实施的可行性,只选择了一个分支做为集成控制的主干分支

     

    我们当前研发流程的实际情况是:

    1. master到staging阶段:走持续集成,自动化测试通过即集成

    2. staging到pred阶段:人工介入,目前自动化不能在预生产上执行(防止误操作和垃圾数据带到线上)

    3. pred到prodution阶段:预生产测试通过,交付运维,由运维控制发布

    参照Git最佳实践,对比我们现有的流程,其实我们的master分支相当于develop分支,staging相当于release分支,起到了持续集成控制主干的作用

     

    可行的解决方案有三种:

    • 用staging做为集成主干,只有通过自动化测试的代码才能集成到staging,在staging做交付测试,只有通过交付测试后,代码才会上prod分支,只有prod分支代码允许线上发布
    • 用prod做为集成主干,通过自动化测试的代码直接集成到prod,用prod的代码部署到预发环境做交付测试,通过交付测试的代码会被打版本号tag,只有被打了版本tag的代码,才允许线上发布
    • 新开release分支做为集成主干,不控制staging,staging交由开发控制,只有通过自动化测试的代码,才会从staging集成到release分支,交付测试通过后到pord分支,只有prod分支代码允许线上发布

    三种方案没有本质的区别,区别就是在那个分支进行控制,用什么手段做控制。

    我们以staging做为主干为例,探论一下具体的持续集成流程和规范:

    1. 开发每天在master上提交代码,测试以一定的频率跑自动化测试用例,新feature尚未自动化的,需手工测试
    2. 自动化测试通过的代码才可以集成到staging(最好做到自动化测试通过后自动集成)
    3. 集成到staging的代码,可以随时提交付,即进入交付测试阶段,什么时候提交付是由人来控制的,一般是QA
      1. 多个产品线同时集成如何解决?主干开发的意义是减少分支开发带来的合并代码的开销,矛盾是只要任要一个产品线的回归测试通不过,将影响整个持续集成的进度,所以一定是通过自动化测试的才会集成,即保证每个业务线集成到staging的代码都是通过测试的
    4. 集成到staging后不代表没有bug,提交付前发现的bug都还是在master上修,修完后集成到staging,如此循环
    5. 提交付的含义是staging已经基本稳定,不再集成新的提交,只做bugfix,提交付后对staging加锁,进行交付测试,发现的bug在staging上做fix,直到交付测试通过后代码推到prod分支后(此时对staging解锁),才能接受新的提交付
      1. 如果是在staging分支提交付,必须解锁后才能再次集成,再次提交付
      2. 提交付后,如果发现重大问题,或者决策变化,可以撤销,撤销即staging代码回滚至与线上相同,解锁并处于接受新的集成的状态
      3. 一天内可以多次提交付,只要上次提的交付已经通过交付测试,或者被撤销了
    6. 交付测试通过的代码会推到prod分支,并打上版本tag,表示可以发布,这里需要人工介入确认交付测试通过,一般是QA
      1. 交付测试通过的标准是什么?
      2. pord分支一天内可以有多个tag,代表多次交付并通过交付测试

     

    以下是关于持续部署的设想(打版本tag的作用):

    1. 自动化布署脚本(每天定时)识别最新的版本tag进行发布
    2. 自动或手工发布后,支持一键回滚至上一个版本

     

    集成的频率:推荐daily

    以staging做主干为例,在master上每天都跑自动化测试用例,通过后即可集成至staging(最好做到自动集成),然后在staging上执行交付测试,不用等到预发做交付测试

    关于分支与测试环境

    有一个问题需要解释一下:就是分支与测试环境看起来是紧耦合的,即master分支对应master环境,prod分支对应生产环境。但其实分支应该与环境无关,即每个分支可以发到任意环境。但是为了方便管理和沟通,我们限定master环境部署的就是master分支,预发环境就是release分支,线上环境只能发prod分支。

     

    参考:http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html

    展开全文
  • PAGE 16 Jenkins与Docker的持续集成方案 持续集成CI/CD是一种软件开发实践用于帮助团队成员频繁快速的集成测试他们的工作成果以尽快发现集成错误 更频繁更早的集成意味着更早的发现问题通过持续集成及时发现和解决...
  • 描述iPad,aPad持续集成方案。包括构建打包,静态检测,自动安装,自动化测试,测试代码覆盖率统计分析。
  • 互联网行业应用持续集成方案 http://wenku.baidu.com/view/1e8c5520dd36a32d73758130.html?from=rec&pos=1&weight=2&lastweight=2&count=5 ...

    http://wenku.baidu.com/view/1e8c5520dd36a32d73758130.html?from=rec&pos=1&weight=2&lastweight=2&count=5

    posted on 2011-09-04 04:16 之乎者也2011 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/wrmfw/archive/2011/09/04/2165981.html

    展开全文
  • JAVA一条龙持续集成方案(续) JAVA一条龙持续集成方案 Jenkins Pipeline 方式搭建Devops平台 Pipeline 方式搭建, Jenkins建议安装在主机, 不要使用容器安装, 可以减少一些权限的问题发生, 软件包安装也比较方便,...

    JAVA一条龙持续集成方案(续)


    Jenkins Pipeline 方式搭建Devops平台

    Pipeline 方式搭建, Jenkins建议安装在主机, 不要使用容器安装, 可以减少一些权限的问题发生, 软件包安装也比较方便,任务很多的情况下可以搭建Jenkins集群
    

    安装 Jenkins

    主机安装

    https://www.cnblogs.com/yangzp/p/12953810.html

    修改端口

    https://blog.csdn.net/wudinaniya/article/details/97628477

    需要安装的插件

    1. DingTalk
    2. Docker Pipeline
    3. Generic Webhook Trigger Plugin
    4. Kubernetes plugin
    5. Build Name and Description Setter

    添加Git凭证

    https://blog.csdn.net/nklinsirui/article/details/89404605

    添加Maven配置

    文件路径: /var/lib/jenkins/.m2

    添加Docker配置

    文件路径: /var/lib/jenkins/.docker

    添加SSH配置

    文件路径: /var/lib/jenkins/.ssh

    配置Git账号

    文件路径: /var/lib/jenkins/.gitconfig

    添加钉钉机器人

    https://blog.csdn.net/weiqi7777/article/details/108522330

    https://jenkinsci.github.io/dingtalk-plugin/ (官方文档)

    机器人ID: 在系统配置里添加机器人
    

    Pipeline Docker Doc

    https://www.jenkins.io/doc/book/pipeline/docker/


    Pipeline脚本

    pipeline


    FAQ

    Pipeline中不能使用sudo问题

    https://blog.csdn.net/nklinsirui/article/details/80287560

    修改后必须重启Jenkins

    在这里插入图片描述

    展开全文
  • 持续集成方案 drone 的简介及部署

    千次阅读 2020-06-15 22:24:00
    一般小型公司的持续集成方案会选择: gitlab + gitlab CI,当然部分公司也会选择 jenkins。选择 gitlab CI 的原因很简单,因为使用了 gitlab CE 作...

    一般小型公司的持续集成方案会选择: gitlab + gitlab CI,当然部分公司也会选择 jenkins

    选择 gitlab CI 的原因很简单,因为使用了 gitlab CE 作为代码托管平台。那为什么选择了 gitlab 作为代码托管呢, gitlab CE 是免费版(社区版),对于昂贵的 toB 软件来说,一家公司至少省了几十万的开销,而且支持自建平台,搭在自家的服务器中,安全性得到了保证。

    而对比 gitlab 的同一类产品,世界最大的同性社交网站 github 来说,随着微软的收购,github 也越来越开放了,它不仅免费开放了私有仓库,现在也可以通过 github action 来做简单的 CI,但现在不够成熟且在公共环境,那有没有配合 github 更好的 CI 方案呢?

    drone 是基于容器的构建服务,配置简单且免费,在 github 上也有 20K star。如果你的仓库主要都在 github,你会喜欢上它的

    随着 github action 的发展,github + github-action 也是个人以及小型公司可选的持续集成方案,不过由于它属于公共构建服务的缘故,镜像构建以及镜像拉取速度会是一个问题,这要取舍

    本篇文章单单介绍 drone.ci 的部署

    • 原文地址: drone.ci 简介以及部署

    • 系列文章: 个人服务器运维指南

    环境

    kubernetes 集群,并使用 helm 部署。如果不具备这两个条件可以参考我以前的文章

    • k8s 集群搭建

    • k8s 中 helm 安装以及使用指南

    部署

    为了更好地真实环境效果,在命令演示过程中我会使用我真实的域名: drone.xiange.tech,你需要替换成你自己的域名

    部署时采用 helm 的官方 chart: stable/drone

    当我们选择结合 github 做CI,此时需要两个参数

    1. github oauth2 client-secret

    2. github oauth2 client-id

    # 根据 github oauth2 的 client-secret 创建一个 secret
    # generic: 指从文件或者字符串中创建
    # --form-literal: 根据键值对字符串创建
    $ kubectl create secret generic drone-server-secrets --from-literal=clientSecret="${github-oauth2-client-secret}"
    
    # 使用 helm v3 部署 stable/drone
    $ helm install drone stable/drone
    

    此时部署会提示部署失败,我们还需要一些必要的参数: Ingress 以及 github oauth2

    我们使用 Ingress 配置域名 drone.xiange.tech,并开启 https,关于如何使用 Ingress 并自动开启 https,可以参考我以前的文章:

    1. 通过外部域名访问你的应用: Ingress

    2. 自动为你的域名添加 https

    同时你也需要配置好默认 pv/pvc,可以参考我以前的文章

    1. k8s 中的永久存储: PersistentVolume

    配置相关的参数,存储为 drone-values.yaml,其中 drone.xiange.tech 是在 github 上为 drone 设置的回调域名

    ingress:
      ## If true, Drone Ingress will be created.
      ##
      enabled: true
    
      ## Drone Ingress annotations
      ##
      annotations:
        kubernetes.io/ingress.class: nginx
        kubernetes.io/tls-acme: 'true'
    
      ## Drone hostnames must be provided if Ingress is enabled
      ##
      hosts:
        - drone.xiange.tech
    
      ## Drone Ingress TLS configuration secrets
      ## Must be manually created in the namespace
      ##
      tls:
        - secretName: drone-tls
          hosts:
            - drone.xiange.tech
    
    server:
      ## If not set, it will be autofilled with the cluster host.
      ## Host shoud be just the hostname.
      ##
      host: drone.xiange.tech
    
    sourceControl:
      ## your source control provider: github,gitlab,gitea,gogs,bitbucketCloud,bitbucketServer
      provider: github
      ## secret containing your source control provider secrets, keys provided below.
      ## if left blank will assume a secret based on the release name of the chart.
      secret: drone-server-secrets
      ## Fill in the correct values for your chosen source control provider
      ## Any key in this list with the suffix  will be fetched from the
      ## secret named above, if not provided the secret it will be created as
      ##  using for the key "ClientSecretKey" and
      # "clientSecretValue" for the value. Be awere to not leak shis file with your password
      github:
        clientSecretKey: clientSecret
        server: https://github.com
    

    准备好 values 之后,helm upgrade 更新 chart 再次部署

    $ helm upgrade drone --reuse-values --values drone-values.yaml \
      --set 'sourceControl.github.clientID={github-oauth2-client-id}' stable/drone
    Release "drone" has been upgraded. Happy Helming!
    NAME: drone
    LAST DEPLOYED: 2019-10-31 15:27:53.284739572 +0800 CST
    NAMESPACE: default
    STATUS: deployed
    NOTES:
    *********************************************************************************
    ***        PLEASE BE PATIENT: drone may take a few minutes to install         ***
    *********************************************************************************
    From outside the cluster, the server URL(s) are:
         http://drone.xiange.tech
    

    查看 deployment 状态,部署成功

    $ kubectl get deploy drone-drone-server
    NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
    drone-drone-server   1/1     1            1           6h44
    

    打开浏览器,查看域名 drone.xiange.tech,经过 github 授权后可以看到 drone.ci 的管理页面

    drone部署成功

    更多文章

    • 个人服务器运维指南

    • 如果你想搭建一个博客

    • 当我有一台服务器时我做了什么

    • 使用 k8s 部署你的第一个应用: Pod,Deployment 与 Service

    • 使用 k8s 为你的应用配置域名: Ingress

    关注我

    点击阅读原文,方便访问本篇文章页面链接

    欢迎关注公众号山月行,我会定期分享一些前后端以及运维的文章
    展开全文
  • 本文作者:韩永刚,360奇舞团 WEB前端开发高级工程师。本文将简单介绍一下持续集成的概念,并手把手带你在你的微信小程序项目中完成属于你的持续集成方案。什么是前端工程化所...
  • 关于Jmeter+Ant+Jenkins如何搭建持续集成环境,网上资料一大把,就不多说了,本文主要谈一下期间的问题及扩展该持续集成方案。 其实核心的流程不复杂,Jenkins管理构建项目,Ant配置脚本路径、结果路径等,Jmeter...
  • 半年前,有机会开始接触微信小程序开发。却因为只是接触而并没投入开发小程序的过程中,因此对很多小程序的细节并未有充分的理解,仅仅停留在了解类似的理论层面,比如mpvue修改了 Vue.js 的 runtime 和 compiler ...
  • Web前端持续集成方案(四)

    千次阅读 2015-09-29 13:43:24
    下面我们结合jenkins介绍 web前端项目持续集成方案。 Grunt已经完成了大部分的工作,所以我们的思路是利用jenkins调用grunt完成项目检测、打包工作。Jenkins需要做如下几个工作: 1、更新SVN。 2、准备打包环境。 ...
  • 自建自动化持续集成方案 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录自建自动化持续集成方案前言一、组成部分二、流程步骤1. ...
  • 本文作者:韩永刚,360奇舞团 WEB前端开发高级工程师。本文将简单介绍一下持续集成的概念,并手把手带你在你的微信小程序项目中完成属于你的持续集成方案。什么是前端工程化所有能降低成本,并...
  • 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。...
  • 功能自动化接入持续集成方案 功能自动化一般用于项目集中测试、回归测试、dailybuild等,我们不可能通过IDE手动来运行case,一般可借助于jenkins或平台化的方式来批量执行case。下面介绍如何将功能自动化接入...
  • 通过本文,您将了解到百度的开源项目Tangram,一个JS库的持续集成实现方案。 本文通过三个方面对持续集成实现进行讲述:首先,如何跨越从Html方式的用例组织到自动化测试所必须的用例执行动态组织;接着,如何实现...
  • jenkins持续集成方案

    2018-08-13 14:54:00
    项目说明 本文将以一个微服务项目的具体pipeline样例进行脚本编写说明。一条完整的pipeline交付流水线通常会包括代码获取、单元测试、静态检查、打包部署、接口层测试、UI层测试、性能专项测试(可能还有安全、...
  • 持续集成方案配置

    千次阅读 2018-06-25 11:28:52
    //方案二 export JAVA_HOME=/opt/jdk1.8.0_102 export JRE_HOME=/opt/jdk1.8.0_102/jre export JAVA_OPTS="-server -Xms512m -Xmx8000m -Xss1024K -Dorg.apache.tomcat.util.buf.Udecoder.ALLOW_ENCODED_...
  • SVN的持续集成方案

    2020-06-09 01:34:06
    基本逻辑: 利用SVN这种机制,我们就可以在SVN提交的时候触发hooks来拦截用户提交的相关数据,然后就可以通过对拦截的数据处理实现SVN的持续集成方案。 SVN服务端常用的hooks主要有start-commit, pre-commit, post-...
  • iOS 持续集成方案(完整代码) 前言:目前市面上iOS开发持续集成的方案很多,在主流的分发平台fir、蒲公英都有相应的方案介绍(Fastlane,Jenkins,实用又强大);但就实际需求来说还是不够友好;在前面使用Python为...
  • 主要是通过小程序提供的miniprogram-ci,然后结合gitlab-ci,docker实现 解决测试,开发频繁找开发编译二维码导致开发效率低,测试到生产因人为导致配置错误等问题 1.需要了解miniprogram-ci ...
  • 持续集成方案(一)

    2015-03-03 21:13:00
    在使用持续集成之前,很多开发团队都是用每日构建(nightly build)。当时,微软使用这个实践很多年了。谁破坏了构建,就要负责监视后续的构建构成,直至发现下一个破坏了构建的人。 为什么要使用持续集成? 对于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,213
精华内容 885
关键字:

持续集成方案