持续交付或与Packer和Vagrant持续集成工作stream程

我是C#/ Asp.Net Windows开发人员,我对.NET / Windows世界中的持续交付的适用性感兴趣。

目前令我困惑的是我们应该如何与Packer和Vagrant合作。

以下是我对CD和打包机的了解:

  1. 打包器可以用来把你的基础.iso和build立一个输出图像(设备)使用的一套供应商。

    根据我的理解,这个图像应该被视为一个环境的映像,已经部署的基础架构(IIS,SqlServer)尽可能匹配生产环境+已经部署的网站,您提供给您的客户。

  2. 按照持续交付的方法,您应该尽可能快地获得关于您的代码/configuration的反馈。

    正如你应该在接近生产的环境中运行烟雾+function性+非function性testing,你应该使用这个图像作为他们的目标。 这意味着在构build映像,部署基础架构,部署网站之后,您将获得functiontesting的结果。 在通过所有testing之前,器具不被视为有效并准备好使用。 但是与快速反馈规则相矛盾 – testing在后期进行得很晚,因为实际上依赖于构build的映像,并且花费很长时间来构build它。

  3. 当你交付时,你可以把你的提供者从头开始在真正的硬件而不是Packer上运行,或者你可以以某种方式使用映像本身(作为虚拟服务器运行)

所以我看到工作stream可以是以下几点:

  1. 开发人员从主线检查源代码。
  2. stream浪文件位于源代码pipe理下。 它包含基本映像的名称(位于文件共享中)+预备器集合。
  3. 开发人员使用msbuild构build代码。
  4. 然后像往常一样进行unit testing。
  5. 然后他运行网站。 这是他第一次需要运行vagrant up并且构build图像(需要很长时间)。 操作系统已安装,基础架构已configuration,然后部署网站。 之后,他从当前代码构build的部署网站上获得本地副本的生产环境。
  6. 不清楚他是如何debugging他的代码的…
  7. 如果需要,他会运行一些/所有function/非functiontesting。

另外两个步骤:

  1. 在他做了一个本地修改/从SCM获取最新的代码之后,他再次运行整个循环(但是提供脚本可能会注意到它们中的一些不应该被应用)!

  2. 当他需要更改configuration时,他会更改configuration脚本并重新运行整个周期。

构build服务器的工作原理类似,但是它使用打包器来构build结果图像,并且很可能会将图像带入testing环境。

我发现潜在的工作stream程可以被优化(caching在某些点上)。 除非任何依赖关系发生变化,否则您可以跳过运行该步骤:

 Base image (.iso) -------------------------\ |---> Base OS ready for vagrant OS provision scripts (packer-windows) ----/ Base OS ready for vagrant -------------------\ |---> OS with IIS/Sql Infrastructure provision scripts (IIS, Sql) --/ OS with IIS/Sql --------------\ |--------> OS with deployed Website Built website package -------/ / / Deployment scripts ---------------/ Web site source code ------\ |----> Built website package Unit tests --------------/ OS with deployed Website -------------\ |----> Ready and tested compliance Functional/non-functional tests ----/ 

任何人都可以分享/推荐使用Packer和Vagrant的高效工作stream程吗?

我不知道你的问题到底是什么 – 我从linux / java世界,并应用相同的工作流程,它工作正常。

  1. 我有一个打包模板,不用定制就可以生成centos图像(它创建操作系统,添加我们的自定义用户…)

  2. 我有木偶配置脚本,将创建虚拟机(我使用2个虚拟机),并将安装oracle / gradle / oracle / apache / weblogic …这一步是在虚拟机需要初始化时

     app.vm.provision "shell", path: "puppet/script/install-puppet-modules-app.sh" app.vm.provision :puppet do |puppet| puppet.manifests_path = "puppet/manifests" puppet.manifest_file = "base-app.pp" puppet.module_path = "puppet/modules" puppet.hiera_config_path = "puppet/hiera.yaml" #puppet.options = "--verbose --debug" end 
  3. 我有每次启动VM时运行的部署脚本

     app.vm.provision "shell", path: "puppet/script/run-app.sh", privileged: false, run: 'always' 

关键是run: 'always'所以你确保这一步运行,每次你vagrant up

我从另一个虚拟机(我有一个中心机器和安装了浏览器的Windows客户端机器)运行功能测试(使用硒),所以我只有当我准备好运行测试

我有的约束:

  • 我需要运行vagrant up指定哪些机器需要启动,因为我运行2个虚拟机的应用程序服务器(应用程序+数据库)和2其他虚拟机测试(硒毂+窗口)。 我只有一个虚拟机的应用程序服务器,你可以使用primary选项,它避免了等待,并采取你不使用的资源

  • 我想利用流浪快照功能,但是我面临一个问题 。 如果我创建一个快照,我需要运行全部或全部运行程序,因为我正在使用初始置备程序和置备程序来始终运行