【发布时间】:2013-07-23 02:44:13
【问题描述】:
我正在使用 Jenkins 在测试服务器中构建应用程序,然后,jenkins 执行一个结构脚本,其中厨师脚本将在生产服务器中执行。
在 chef 脚本中,首先我要从 github 获取要部署的 jar,并且我想获取测试阶段生成的版本,所以问题是如何获取这个版本号。
【问题讨论】:
标签: jenkins chef-infra fabric
我正在使用 Jenkins 在测试服务器中构建应用程序,然后,jenkins 执行一个结构脚本,其中厨师脚本将在生产服务器中执行。
在 chef 脚本中,首先我要从 github 获取要部署的 jar,并且我想获取测试阶段生成的版本,所以问题是如何获取这个版本号。
【问题讨论】:
标签: jenkins chef-infra fabric
应用程序的版本应该保存在属性中。然后,您可以在每次厨师运行时轻松覆盖它。只需使用所需的应用程序版本创建一个 json 文件,然后在下次运行时将其提供给主厨客户端或单独运行:
chef-client --json-attributes path/to/file.json
这会覆盖从其他位置设置的属性,例如从食谱中或由角色设置。
【讨论】:
这里有一些选项:
使用chef-client -j ...。当您针对单个服务器或一组服务器时,这是可以的。多个/复杂的部署可能会变得复杂,因为您必须为每个应用设置和分发不同的 json 属性。
将工件版本写入数据包项,例如:
knife data bag from file applications myapp.json。您的 myapp 食谱被编码为在 applications/myapp 数据包项中查找所需的应用程序版本信息。
我创建了一个执行此操作的 Jenkins 插件:https://github.com/zhelyan/jenkins-chef-artifact-release
编写您的食谱以从 Jenkins 服务器本身获取工件,例如来自:https://jenkins.mycompany.com:8080/job/myapp/lastSuccessfulBuild/artifact/target/myapp.war,查看此处了解详细信息:https://github.com/woohgit/jenkins-chef-traceability-example
实施选项 2 或 3 还会为您提供一个部署仪表板页面,显示部署的位置。
【讨论】: