草庐IT

理想的CI/CD,结合gitflow

深圳都这么冷 2024-01-08 原文
gitflow分支模型

gitflow分支介绍

  • master:归档主分支,代码老旧稳定(只接受合并,不能推送代码)
  • develop:开发分支(只接受合并,不能推送代码)
  • release:发行分支,只有满足各种质量要求才能发行
  • feature:功能分支, 常规开发分支
  • hotfix:急救分支,紧急修复bug,生命周期更短

开发模式

feature分支作为个人的常规开发分支,可以理解为开发者个人的自由空间。
hotfix分支短小而临时,其他的方面与feature分支一致。
feature分支和hotfix分支推送的时候不应该触发CI,最多运行一下单元测试
featurehotfix分支合并到develop分支不应该手动合并。
发起mr(featurehotfix-->develop)时,先运行featurehotfix的单元测试,达标(所有用例成功,覆盖率达到%x)后合并,合并后再次运行单元测试,如果没有问题,完成合并并将测试报告发给参与项目的所有人;如果合并后检查有问题,拒绝mr并通知发起mr的人。
develop分支作为一个稳定的分支,保证随时可以发布到测试环境的状态

持续集成(Continuous Integration)

开发将自己工作的成果合并到develop分支,由个人可见到team可见,触发CI。只有develop分支变更时才需要触发CI。持续集成包括:

  • 1.运行单元测试
  • 2.质量门禁检查
  • 3.集成到develop分支
    效果:集成之后develop分支还是一个稳定的可发布到测试环境的状态

持续交付(Continuous Delivery)

develop分支合并到release分支,在release分支打标签并推送,触发测试和检查,通过后构建制品,持续交付包括:

  • 1.运行单元测试
  • 2.质量门禁检查
  • 3.构建制品并推送到制品仓库
    效果:成功构建制品

什么是制品?:从原材料生成的东西叫制品,经过其他手续包装到市场发售叫产品。对我们而言,从源代码打包构建的就叫制品,开发和测试签名过的就叫产品。上线只能使用产品,就像上市只能使用产品一样

持续部署(Continuous Deployment)

制品构建成功后,进入可部署阶段:

  • step1: 开发人员部署—>开发环境
    开发人员一键将制品部署到开发环境,自测没问题给制品签名,通知测试
  • step2: 测试人员部署—>测试环境
    测试人员一键将开发已签名的制品部署到测试环境,测试没问题给该制品签名,制品成为产品,通知运维等待发布;测试有问题通知开发
  • step3: 运维人员部署—>预发布环境
    运维人员一键将开发和测试已签名的产品发布到预发布环境,没问题继续,有问题回滚并通知开发和测试。
  • step4: 运维人员部署—>生产环境
    运维人员一键将开发和测试已签名的产品发布到生产环境,没问题完成,有问题回滚并通知开发和测试

结束

部署完成以后,本次迭代结束,开发发起mr将release分支合并到master分支归档。然后可选删除release分支

问题:

    1. 研发如何将自己的开发分支部署到开发环境进行调试?
      case1,在物理机或者虚拟机上运行,直接 编译 安装 运行 即可
      case2,在容器运行,在某台安装docker的机器上,依次执行以下两步即可启动

step1. 构建镜像
sudo docker build .
step2. 启动容器
sudo docker run -d -p <host-port>:<expose-port> <image-name>

    1. 为什么要问第一个问题?
      有些功能由于网络隔离,个人开发机上难以调试!
      个人开发环境与容器环境有本质不同。

有关理想的CI/CD,结合gitflow的更多相关文章

  1. ruby-on-rails - 结合 meta_search 与 acts_as_taggable_on - 2

    我在开发的Rails3网站的一些搜索功能上遇到了一个小问题。我有一个简单的Post模型,如下所示:classPost我正在使用acts_as_taggable_on来更轻松地向我的帖子添加标签。当我有一个标记为“rails”的帖子并执行以下操作时,一切正常:@posts=Post.tagged_with("rails")问题是,我还想搜索帖子的标题。当我有一篇标题为“Helloworld”并标记为“rails”的帖子时,我希望能够通过搜索“hello”或“rails”来找到这篇帖子。因此,我希望标题列的LIKE语句与acts_as_taggable_on提供的tagged_with方法

  2. ruby-on-rails - 将 Amazon Simple Notification service SNS 与 ruby​​ 结合使用 - 2

    很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。我需要从基于ruby​​的应用程序使用AmazonSimpleNotificationService,但不知道从哪里开始。您对从哪里开始有什么建议吗?

  3. node.js - 如何在 Travis CI 上的一个项目中运行 Node.js 和 Ruby 测试 - 2

    我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每

  4. ruby-on-rails - 将 Rails 与 Paperclip 和 SWFUpload 结合使用 - 2

    我有一个基本的Rails应用程序测试,其中包含一个用回形针处理的照片字段的用户模型。我创建了能够创建/编辑用户的View,并且照片上传工作正常。Editinguseruser_path(@user),:html=>{:method=>"put",:multipart=>true}do|f|%>|然后,我想将SWFUpload集成到我的应用程序中。我试着按照这个tutorial并运行testproject没有任何成功:浏览按钮不会打开文件对话框,并抛出错误#2176,这是关于selectFiles()方法的。首先,问题是Flashv.10与项目中包含的旧版本SWFUpload(2.1.0

  5. ruby-on-rails - 将 Facebook Connect 与 Authlogic 结合使用 - 2

    我正在尝试使Authlogic和FacebookConnect(使用Facebook)发挥良好的作用,以便您可以通过正常注册方式或使用Facebookconnect创建帐户。我已经能够让连接以一种方式工作,但注销只会在facebook而不是我的网站上注销,我必须删除cookie才能使其正常工作。任何帮助都会很棒,谢谢! 最佳答案 这是我使用FacebookConnect扩展、authlogic和OpenID制作的示例应用程序。它仍然需要一些工作,但它确实起作用了。http://big-glow-mama.heroku.com/htt

  6. ruby - 如何将 DynamoDB Local 与 AWS Ruby 开发工具包结合使用? - 2

    亚马逊的documentation提供有关如何使用DynamoDBLocal的Java、.NET和PHP示例。你如何用AWSRubySDK做同样的事情??我的猜测是你在初始化时传入了一些参数,但我不知道它们是什么。dynamo_db=AWS::DynamoDB.new(:access_key_id=>'...',:secret_access_key=>'...') 最佳答案 您使用的是SDK的v1还是v2?您需要找出答案;从上面的简短片段来看,它看起来像v2。为了以防万一,我已经包含了这两个答案。v1答案:AWS.config(us

  7. ruby-on-rails - 结合 Ruby on Rails 和 Backbone - 2

    我想知道这个问题已经有一段时间了,但还没有真正找到答案。为什么要在Rails应用程序中使用Backbone.jsexaclty?是为了扩展功能、为您的JS提供更多MVC模式、构建更好的API......?目前我看不出你为什么要用它来做什么,因为我不认为我理解Backbone.js的概念 最佳答案 Rails的一大优势在于您拥有一个平台和一种语言,可以处理服务器代码并生成客户端代码(使用View)。毫无疑问,一旦您想使用javascript和jquery改善用户体验,这种理论上的优势就会迅速消失。所以实际上你还是要学习两种语言。但仍然

  8. ruby - 结合 'uniq'和 'compact'的数组方法 - 2

    我正在尝试在数组中查找唯一元素并从中删除nil值。我的解决方案如下所示:@array=[1,2,1,1,2,3,4,nil,5,nil,5]@array.uniq.compact#=>[1,2,3,4,5]有没有一种方法可以同时完成这两种操作?如果不是,@array.uniq.compact或@array.compact.uniq哪个高效? 最佳答案 不,但是您可以按照您喜欢的任何顺序附加它们,即array.uniq.compactarray.compact.uniq正如phts所指出的,您可以将一个block传递给uniq,但我认

  9. ruby-on-rails - Sequel 与 ActiveRecord 结合使用有什么问题吗? - 2

    我正在考虑使用Sequel对于我发现在ActiveRecord中很难制作的一些较复杂的SQL。在同一个项目中使用Sequel和ActiveRecord有什么需要注意的吗?(除了明显的,比如续集中没有AR验证等......) 最佳答案 免责声明:我是Sequel的维护者。在使用Rails时,Sequel很容易与ActiveRecord一起使用或代替ActiveRecord。您必须手动设置数据库连接,但除此之外,用法类似。您的Sequel模型文件位于app/models中,其工作方式类似于ActiveRecord模型。设置数据库连接并不

  10. ruby-on-rails - 将 vim 与 ruby​​/ruby on rails 结合使用的提示和技巧 - 2

    我是那些没有在他的任何Ruby/RubyonRails工作中使用TextMate的开发人员之一。我在这个领域的特别忠诚在于vim。您最喜欢将vim与Ruby和/或RubyonRails结合使用以尽可能提高工作效率的提示/技巧是什么? 最佳答案 最重要获取rails.vim的副本它在数百万级别上很棒。Readthedoc.提示太多了,:Rviewcustomer,:RSmodelfoo,:Rinvert,gf,:Rextract,:Rake等等。您可能需要NERDTree以及轻松导航(您可以使用:Rtree访问)第二重要在推特上关注t

随机推荐