我是C#/ Asp.Net Windows开发人员,我对.NET / Windows世界中的持续交付的适用性感兴趣。
目前令我困惑的是我们应该如何与Packer和Vagrant合作。
以下是我对CD和打包机的了解:
打包器可以用来把你的基础.iso和build立一个输出图像(设备)使用的一套供应商。
根据我的理解,这个图像应该被视为一个环境的映像,已经部署的基础架构(IIS,SqlServer)尽可能匹配生产环境+已经部署的网站,您提供给您的客户。
按照持续交付的方法,您应该尽可能快地获得关于您的代码/configuration的反馈。
正如你应该在接近生产的环境中运行烟雾+function性+非function性testing,你应该使用这个图像作为他们的目标。 这意味着在构build映像,部署基础架构,部署网站之后,您将获得functiontesting的结果。 在通过所有testing之前,器具不被视为有效并准备好使用。 但是与快速反馈规则相矛盾 – testing在后期进行得很晚,因为实际上依赖于构build的映像,并且花费很长时间来构build它。
当你交付时,你可以把你的提供者从头开始在真正的硬件而不是Packer上运行,或者你可以以某种方式使用映像本身(作为虚拟服务器运行)
所以我看到工作stream可以是以下几点:
msbuild
构build代码。 vagrant up
并且构build图像(需要很长时间)。 操作系统已安装,基础架构已configuration,然后部署网站。 之后,他从当前代码构build的部署网站上获得本地副本的生产环境。 另外两个步骤:
在他做了一个本地修改/从SCM获取最新的代码之后,他再次运行整个循环(但是提供脚本可能会注意到它们中的一些不应该被应用)!
当他需要更改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世界,并应用相同的工作流程,它工作正常。
我有一个打包模板,不用定制就可以生成centos图像(它创建操作系统,添加我们的自定义用户…)
我有木偶配置脚本,将创建虚拟机(我使用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
我有每次启动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
选项,它避免了等待,并采取你不使用的资源
我想利用流浪快照功能,但是我面临一个问题 。 如果我创建一个快照,我需要运行全部或全部运行程序,因为我正在使用初始置备程序和置备程序来始终运行