我是C#/ Asp.Net Windows开发人员,我对.Net / Windows世界中持续交付的适用性感兴趣 .
目前令我困惑的是我们应该如何与Packer和Vagrant合作 .
以下是我对CD和打包器的理解:
- Packer可用于获取您的基础.iso并使用一组供应商构建输出图像(设备) .
根据我的理解,此图像应被视为环境图像,已部署的基础结构(IIS,SqlServer)尽可能地匹配已部署的网站,并将其提供给您的客户 .
- 根据持续交付方法,您应该尽可能快地获得有关您的代码/配置的反馈 .
由于您应该在接近 生产环境 的环境中运行烟雾功能非功能测试,因此您应该使用此图像作为目标 . 这意味着在构建映像,部署基础结构,部署网站后,您将获得功能测试的结果 . 在通过所有测试之前,设备不会被视为有效且可以使用 . 但它与快速反馈规则相矛盾 - 测试在管道中运行得很晚,因为实际上依赖于构建的映像并且构建它需要很长时间 .
- 当你交付时,你可以带你的供应商从头开始在真正的硬件而不是Packer上运行它们,或者你可以以某种方式使用图像本身(作为虚拟服务器运行)
所以我看到工作流程可能如下:
-
开发人员从主线检出源代码 .
-
Vagrant文件位于源代码管理下 . 它包含基本映像的名称(例如,位于文件共享上)的配置器集 .
-
开发人员使用
msbuild
构建代码 . -
然后他像往常一样进行单元测试 .
-
然后他运行网站 . 他第一次需要运行
vagrant up
并且图像被构建(需要很长时间) . 安装操作系统,配置基础架构,然后部署网站 . 之后,他获得了使用当前代码构建的部署网站的类似 生产环境 环境的本地副本 . -
不清楚他如何调试他的代码......
-
如果需要,他会运行一些/所有功能/非功能测试 .
还有两个步骤:
-
在他进行本地更改/从SCM获取最新代码后,他再次运行整个周期(但是可能提供脚本会注意到其中一些不应用)!
-
当他需要进行配置更改时,他会更改配置脚本并重新运行整个周期 .
构建服务器的工作方式类似,但它使用打包程序来构建结果图像,并且可能使用vagrant来将图像带到现场进行测试 .
我发现可以优化工作流程(在某些时候缓存) . 您可以跳过运行该步骤,除非任何依赖项发生更改:
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的高效工作流程吗?
1 回答
我不确定你的问题到底是什么 - 我来自linux / java世界并且应用相同的工作流程,它工作正常 .
我有一个打包器模板,可以构建没有自定义的centos图像(它创建操作系统,添加我们的自定义用户......)
我有创建虚拟机的木偶配置脚本(我使用2个虚拟机)并将安装oracle / gradle / oracle / apache / weblogic ...当需要初始化虚拟机时,此步骤完成一次
键是 run: 'always' 所以你确保每次运行时都运行这一步
vagrant up
我从另一个VM运行功能测试(使用selenium)(我有一个集线器机器和安装了浏览器的Windows客户机)所以我只有在我准备运行测试时才会触发这些
我有的限制:
我需要运行
vagrant up
指定哪些机器需要启动,因为我为应用服务器(app db)运行2个VM,为测试运行2个其他VM(selenium hub窗口) . 我只有1个用于app服务器的VM,你可以使用primary
选项,它可以避免等待并占用你不使用的资源我想利用vagrant snapshot功能,但我面对issue . 如果我拍摄快照,我需要运行所有或没有任何破坏我流量的配置器,因为我使用初始配置器和配置器来运行