Jenkins 如何使用Chef和tar_extract部署站点的最新版本

Jenkins 如何使用Chef和tar_extract部署站点的最新版本,jenkins,chef-infra,chef-recipe,Jenkins,Chef Infra,Chef Recipe,我正在使用jenkins从github存储库持续构建网站前端代码,将其打包到tar归档中,并将其发布到S3存储桶中。Jenkins构建创建名为FrontEnd-122.tgz的文件,其中122是构建编号 我使用以下方法将应用程序部署到服务器上: deploy_version = node['my-app']['build-number'] deploy_from = "http://mybucket.com/FrontEnd-#{deploy_version}.tgz" tar_extr

我正在使用jenkins从github存储库持续构建网站前端代码,将其打包到tar归档中,并将其发布到S3存储桶中。Jenkins构建创建名为FrontEnd-122.tgz的文件,其中122是构建编号

我使用以下方法将应用程序部署到服务器上:

deploy_version = node['my-app']['build-number']
deploy_from    = "http://mybucket.com/FrontEnd-#{deploy_version}.tgz"

tar_extract "#{deploy_from}" do
  target_dir '/usr/local/site/FrontEnd'
  creates '/usr/local/site/FrontEnd/index.php'
  tar_flags [ '--strip-components 1' ]
end
这一切都很好,但是我必须手动更新节点属性my app/build number。这对于QA和生产部署很好

我想做的是拥有一个快照部署VM,在这里部署最新的代码,以便与selenium和朋友进行进一步测试。然而,要做到这一点,我需要
有一种方法可以让上面的食谱知道最新的版本号是什么,然后从那里部署。你有什么建议吗?

有一个棘手的建议,因为你需要一个机制让chef确定存储在S3中的最新版本

假设您将代码存储在版本控制系统中,如subversion或git?用厨师代替是可行的吗?为了测试的目的,让chef从主干或主分支中提取网站代码


另一种选择是使用理解“快照”概念的二进制存储库管理器。看看像和这样的产品。然后,您可以使用S3进行备份,并为已批准和发布的站点副本创建分发区。

因此,我使用了一种愚蠢的方法来解决这个问题。除了将版本化的归档文件放入S3存储桶之外。我还使用类似“FrontEnd Latest”的名称推送相同的归档文件。我还修改了cookbooks以使用版本参数。登台服务器的版本参数设置为“最新”,而生产服务器的参数设置为任何被认为稳定的版本。

是,这很棘手。我不喜欢部署资源的想法,因为它有部署未通过CI服务器的代码的风险。由于集成测试,我们的构建有点长,因此有人可以在构建运行时将更新推送到分支。我确实有一个运行Nexus的实例,不幸的是,它位于我们的专用网络上,不暴露于internet。我想在EC2上托管一个快照实例。我在寻找比使用Nexus更简单的东西。