詹金斯 - 基础设施配置
jenkins - infrastructure provisioning
我刚刚设置完我的 Jenkins 服务器,但似乎有一个明显的问题我找不到答案。
Jenkins 环境不应该是生产环境的精确克隆以使其有效吗?我读过的教程都没有提到这个事实。那么人们如何处理这个事实呢?特别是如果他们将单个 Jenkins 实例用于可能在不同基础架构上运行的多个项目?
我可以想象 puppet 或 chef 可能会在这里提供帮助,但你不会不断地为不同的项目重新配置 jenkins 服务器吗?对我来说听起来很危险。
对我来说最好的解决方案似乎是不在 Jenkins 服务器本身上运行测试,而是启动生产环境的克隆并在其上运行测试?但是我找不到关于如何在 EC2 上完成此操作的单独教程。
抱歉,如果这个问题有点乱。那么其他人如何处理确保 Jenkins 运行测试的生产环境的精确副本呢?现在我想到了,这也包括数据库迁移。
谢谢。
更新:
给出的一些答案似乎与 java 或 objective-c 等编译语言有关。在那些情况下,我可以看到让测试与平台无关的逻辑。我应该更具体地提到我使用 Jenkins 进行 LAMP 堆栈测试。因此,在那种情况下,基础设施就像任何东西一样需要测试的组件 else.Seeing 因为在一台机器上拥有 PHP5.3 足以破坏需要 PHP5.4 的项目,例如.
Jenkins 还支持 Master/Slave 系统(详见 here)。
jenkins slave 本身不需要太多配置,可以 运行 在您的生产系统副本上,因为它也不需要太多配置,它应该不会显着影响您的生产克隆。
然后你的主人会把工作(比如你的验收测试)委托给你的奴隶。通过这种方式,您还可以设置不同的生产环境(如不同的 OS、不同的数据库等),只需为您需要的每个配置设置一个 Jenkins slave。
您可能正在使用 Jenkins 检查代码质量、编译它、运行 单元测试、打包、部署它,也许 运行 一些集成测试。
鉴于所有这些任务的性质,您的 Jenkins 环境最好不要像您的生产环境。例如,您不希望在生产环境中安装编译器(出于多种原因,安全性只是其中之一)。
因此,Jenkins 是一个开发环境,它与您的生产环境不完全匹配这一事实不应该引起您的关注。
但是,我知道您可能想将您的包部署到类似生产环境甚至生产克隆环境中,以 运行 软件生命周期的某些特定测试或任务,但我认为这个问题超出了 jenkins 的范围,只涉及生命周期的 "deployment" 阶段(即,这不是 "Jenkins" 问题,而是基础架构问题,您应该使用更通用的方法来考虑,然后简单地告诉 jenkins 在哪里部署)。
您可以考虑另一种方法。
使用Vagrant,您可以创建完全虚拟的环境来模拟您的生产。当您想测试许多环境(生产、单节点环境、不同 OS、不同数据库)但您没有足够的 "bare metal" 机器时,这尤其有用。
您定义了适当的 vagrant 环境。接下来在 Jenkins 测试项目中设置适当的机器,并在创建的 vagrant 环境中执行测试。
我刚刚设置完我的 Jenkins 服务器,但似乎有一个明显的问题我找不到答案。
Jenkins 环境不应该是生产环境的精确克隆以使其有效吗?我读过的教程都没有提到这个事实。那么人们如何处理这个事实呢?特别是如果他们将单个 Jenkins 实例用于可能在不同基础架构上运行的多个项目?
我可以想象 puppet 或 chef 可能会在这里提供帮助,但你不会不断地为不同的项目重新配置 jenkins 服务器吗?对我来说听起来很危险。
对我来说最好的解决方案似乎是不在 Jenkins 服务器本身上运行测试,而是启动生产环境的克隆并在其上运行测试?但是我找不到关于如何在 EC2 上完成此操作的单独教程。
抱歉,如果这个问题有点乱。那么其他人如何处理确保 Jenkins 运行测试的生产环境的精确副本呢?现在我想到了,这也包括数据库迁移。
谢谢。
更新: 给出的一些答案似乎与 java 或 objective-c 等编译语言有关。在那些情况下,我可以看到让测试与平台无关的逻辑。我应该更具体地提到我使用 Jenkins 进行 LAMP 堆栈测试。因此,在那种情况下,基础设施就像任何东西一样需要测试的组件 else.Seeing 因为在一台机器上拥有 PHP5.3 足以破坏需要 PHP5.4 的项目,例如.
Jenkins 还支持 Master/Slave 系统(详见 here)。
jenkins slave 本身不需要太多配置,可以 运行 在您的生产系统副本上,因为它也不需要太多配置,它应该不会显着影响您的生产克隆。
然后你的主人会把工作(比如你的验收测试)委托给你的奴隶。通过这种方式,您还可以设置不同的生产环境(如不同的 OS、不同的数据库等),只需为您需要的每个配置设置一个 Jenkins slave。
您可能正在使用 Jenkins 检查代码质量、编译它、运行 单元测试、打包、部署它,也许 运行 一些集成测试。
鉴于所有这些任务的性质,您的 Jenkins 环境最好不要像您的生产环境。例如,您不希望在生产环境中安装编译器(出于多种原因,安全性只是其中之一)。
因此,Jenkins 是一个开发环境,它与您的生产环境不完全匹配这一事实不应该引起您的关注。
但是,我知道您可能想将您的包部署到类似生产环境甚至生产克隆环境中,以 运行 软件生命周期的某些特定测试或任务,但我认为这个问题超出了 jenkins 的范围,只涉及生命周期的 "deployment" 阶段(即,这不是 "Jenkins" 问题,而是基础架构问题,您应该使用更通用的方法来考虑,然后简单地告诉 jenkins 在哪里部署)。
您可以考虑另一种方法。
使用Vagrant,您可以创建完全虚拟的环境来模拟您的生产。当您想测试许多环境(生产、单节点环境、不同 OS、不同数据库)但您没有足够的 "bare metal" 机器时,这尤其有用。
您定义了适当的 vagrant 环境。接下来在 Jenkins 测试项目中设置适当的机器,并在创建的 vagrant 环境中执行测试。