我正在使用 Vagrant + Chef(chef_client 配置程序)为我的服务器创建和配置暂存环境。并且我设置了一个 Jenkins 作业,每次推送到我的“开发”分支时都会运行该作业。
在 Jenkins 作业中,我想要更新并重建暂存箱中服务器的源代码并重新启动它。
我已经编写了安装依赖项、配置数据库等的说明书。但我不确定如何仅运行说明书中的更新、重建和重新启动操作。我知道我可以随时拆除整个盒子并重建它,但配置盒子是一个漫长的过程,所以我想尽可能少地这样做。
我将服务器食谱分为 3 个配方:依赖项、db_setup 和服务器。我只想在 Jenkins 作业中运行“服务器”配方。但我不明白该怎么做...如果我在 Chef 服务器上指定 run_list,那么我就无法从头开始配置整个盒子。
基本上,我希望能够从命令行告诉 Vagrant Chef 应该运行哪些配方。这可能吗?
干杯!
答案1
Chef 资源应该是幂等的,因此您应该能够反复运行 chef-client,而无需重新安装软件,除非您确实需要进行更改。您可以创建 chef-recipe,以便仅在上次运行时发生更改时才对代码进行重新构建。
因此,您可以有一个仅在发生变化时才进行更新和重建的配方,然后在重建部分,您可以对所有相关服务执行通知:重新启动(这是我现在正在遵循的过程)。
有关 chef 的幂等性和重复调用的更多详细信息,请参阅此答案https://stackoverflow.com/questions/4913521/chef-repetitive-recipe-execution