我们有一个Jenkins工作(Production
)每晚构建一个可交付成果。我们还有另一项工作(ProductionPush
),可以在第二天通过专有协议将交付物推送到生产机器。这是因为某些生产机器仅在白天的某些时段可用(它还使我们有机会修复任何最后一刻的构建中断)。 ProductionPush
需要访问Production
作业构建的可交付成果(因此需要访问同一工作区)。我们有多个节点和并发构建(因此不可预测的工作空间),并且由于资源有限,因此不希望将作业绑定到固定节点/工作空间。
如何确保两个作业共享同一个工作区,并确保ProductionPush
仅在Production
成功时在第二天的固定时间运行,而不会将两个作业都用完相同的节点/工作区?我知道Parameterized Trigger Plugin可能对其中一些有所帮助,但它似乎没有时间延迟能力,12小时似乎太长时间没有安静期。
分享工作区是个坏主意吗?
答案 0 :(得分:25)
答案2:是的,共享工作空间是一个坏主意。文件锁定的可能性。存在工作空间被消灭的问题。只是不要这样做......
答案1:您需要的是存档构建的工件。这样,无论另一个构建是否正在运行,或者工作区处于什么状态,特定构建的构件(按构建号)将始终可用
*.*
/path/to/file_version*.zip
**/file_version*.zip
http://JENKINS_URL/job/JOB_NAME/lastSuccessfulBuild/artifact/
然后是工件的名称。我已经在这里广泛地解释了如何从另一个部署作业(在您的示例中为ProductionPush
)访问以前的工件:
How to promote a specific build number from another job in Jenkins?
如果您要求始终将最新版本部署到生产,则可以跳过上述链接中促销的配置。只需按照配置部署作业的步骤操作即可。完成部署作业后,如果它始终同时运行,只需配置构建定期参数即可。或者,您可以根据您想要的任何条件启动另一个将触发部署作业的作业。
在上述任何一种情况下,如果默认选择器设置为最新成功构建(如上面链接中所述),则最新版本将推送到Production < / p>
答案 1 :(得分:0)
不确定归档工件是不是一个好主意。暂存存储库可能更好,因为它可以通过调整Maven settings.xml文件使跨职能团队在需要时跨不同的构建共享工件。
你真的想要一个可部署的(ear / war)作为构建,测试的东西,然后一旦建立信心很高就升级到生产。
在deployable上使用内部版本号(major.minor.buildnumber)。这是你向生产推广的东西,只要你的测试可以依赖。不要使用连字符来分隔具有内部编号的次要部分,因为这会强制Maven执行词法比较...小数点将强制进行数字比较,这将给您带来更少的麻烦。
此外,您没有提及您的目标平台,但使用Maven APT / RPM插件将APT / RPM推送到生产箱可用的APT / YUM仓库(成功测试之后!)将是一个不错的选择适合,按照行业标准?