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

时间:2014-03-14 14:42:27

标签: jenkins chef 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_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和朋友进行进一步测试。但是,要做到这一点我需要 有一种方法可以让上面的食谱找出最新的构建号是什么,并从那里进行部署。你有什么建议吗?

2 个答案:

答案 0 :(得分:1)

棘手的一个,因为你需要一个厨师机制来确定存储在S3中的最新版本。

据推测,您将代码存储在版本控制系统中,如subversion或git?使用厨师deploy resource是否可行?让厨师从您的主干或主分支中提取网站代码,以进行测试。

另一种选择是使用理解“快照”概念的二进制存储库管理器。请查看NexusArtifactoryArchiva等产品。然后,您可以将S3用于备份和分发区域,以用于您站点的已批准和已发布的副本。

答案 1 :(得分:0)

所以,我用愚蠢的方式来解决这个问题。除了将版本化存档放入S3存储桶之外。我也使用'FrontEnd-Latest'之类的名称推送相同的档案。我还修改了cookbook以使用版本参数。登台服务器的版本参数设置为“最新”,生产服务器的参数设置为任何被认为稳定的版本。