我正在使用 Jenkins 在测试服务器中构建应用程序,之后,jenkins 执行一个结构脚本,其中一个厨师脚本将在生产服务器中执行。
在 chef 脚本中,首先我必须从 github 获取要部署的 jar,并且我想获取在测试阶段生成的版本,所以问题是如何获取此版本号。
我正在使用 Jenkins 在测试服务器中构建应用程序,之后,jenkins 执行一个结构脚本,其中一个厨师脚本将在生产服务器中执行。
在 chef 脚本中,首先我必须从 github 获取要部署的 jar,并且我想获取在测试阶段生成的版本,所以问题是如何获取此版本号。
应用程序的版本应该保存在属性中。然后,您可以在每次厨师运行时轻松覆盖它。只需使用所需的应用程序版本创建一个 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 还将为您提供一个部署仪表板页面,显示部署在何处。