厨师食谱交付 - 厨师服务器与神器+ berkshelf

时间:2015-06-24 13:28:21

标签: chef artifactory berkshelf

我的公司一直在对Chef进行大量投资。我们建立了一个值得尊敬的烹饪书库,以实现我们的基础设施自动化。我们故意忽略了Chef Server和cookbook共享的问题,因为我们想先在我们的烹饪书中获得一些临界质量,以便推动我们如何解决这个问题。现在我们在那里,我们正在探索各种选择。我们已经在Artifactory上投入了大量资金,我们很高兴地使用它来存储使用Artifactory中的nuget,ivy,maven,npm和bower存储库来跨Windows / .NET和Java存储CI系统的所有内容。我一直在读这个主题:

Managing custom cookbooks in a chef repo

What do Berkshelf-api and Chef Supermarket do differently than traditional artifact repositories?

当我们在Artfiactory中已经拥有一个通用工件服务器时,我很难将Chef Server视为食谱回购。最适合我们当前环境的模型是从Jenkins工作中将Cookbook发布到Artifactory,并根据需要使用Berkshelf将它们从那里拉出来。从我的阅读中看来,Berkshelf可以与Artifactory作为一个来源进行交流,但我还没有找到如何做到这一点的细节。我们到目前为止遇到的每个包管理器都有一些方法可以将它指向Artifactory,所以我假设有可行的。

任何人都可以分享关于如何最好地接近这个的指导吗?任何人都可以提供有关berkshelf是否可以愉快地完成这项工作的任何细节吗?

1 个答案:

答案 0 :(得分:5)

今天使用厨师的大多数人直接从他们的源代码库部署。由于您已经在使用Artifactory,因此您了解在某个时间点保留发布的明确记录的重要性。发布工件存储库可以在构建软件和将其部署到目标系统之间创建一个健康的区分。

使用专用的厨师服务器实例(存储已发布的食谱版本)只是一个选项。这种方法恰好与Berkself-api配合使用,并允许您继续使用Berkshelf作为将烹饪书上传到目标厨师服务器的工具。

没有什么可以阻止你使用神器。您需要创建一个包含您的食谱及其所有依赖项的存档,berkshelf“包”会这样做。

berks package mycookbooks.tar.gz
mvn deploy:deploy-file \
    -Durl=$REPO_URL \
    -DrepositoryId=$REPO_ID \
    -DgroupId=org.myorg \
    -DartifactId=mycookbooks \
    -Dversion=1.2.3  \
    -Dpackaging=tar.gz \
    -Dfile=mycookbooks.tar.gz

tarball可以作为当前chef-solo流程的一部分使用,也可以选择用于填充目标厨师服务器:

curl https://myrepo/org/myorg/1.2.3/mycookbooks-1.2.3.tar.gz
tar zxvf mycookbooks-1.2.3.tar.gz
knife cookbooks upload --all --environment my-prod-env

“环境”选项会在chef environment上设置菜谱版本限制,如果您想确定在运行时应用哪些版本,则非常有用。