maven-2 - 有没有办法根据 cron 规则安排 Jenkins 作业与不同版本的 Maven 一起运行?

标签 maven-2 jenkins maven-3

我们正在使用 Maven 2.2.1 和 Jenkins。我们有大约 300-400 个模块。几个月前,我们完成了从 Ant 到 Maven 的迁移,当时的目标是确保在 Maven 2.2.1 下正确构建,因为我们仍然不愿意直接迁移到 Maven 3.0.x。是的,我们知道 Maven 相对稳定,但由于迁移所有模块和程序集(来自 Ant)需要付出努力,我们选择坚持使用众所周知的稳定版本,例如 2.2.1。

为了列出不完全兼容 Maven 3.x 的模块,我想安排 Jenkins 作业(当前使用 Maven 2.2.1 运行它们)以使用 3.0.4 构建它们晚上的预定时间。我怎样才能做到这一点?

提前致谢!

马丁

最佳答案

这是一个令人尖叫的黑客攻击,但应该可行。由于这是一个黑客攻击,我将把确切的细节留给你去解决;-)

您需要设置两个作业来隔离 Maven 3 个作业。

这两项工作都需要 Groovy Plugin为了添加构建步骤。

您将在系统配置中设置三个版本的 Maven。

  • Maven 2.2.1
  • Maven 3.0.4
  • 白天 Maven 2.2.1 晚上 3.0.4

第一个作业将访问全局配置,并将 Maven 2.2.1 by day 3.0.4 by night 更改为指向与 Maven 3.0.4 相同的路径。第二个作业会将其切换回来。

代码需要类似于

import hudson.tasks.*;
Maven.DescriptorImpl descriptor = jenkins.model.Jenkins.instance.getDescriptor(Maven.class);
Maven.MavenInstallation[] installs = descriptor.installations.clone; 
// clone the array because we will be modifying it
Maven.MavenInstallation v3 = null;
for (Maven.MavenInstallation i: installs) {
  if (i.name.equals("Maven 3.0.4")) { v3=i; break;}
}
v3.class; // throw NPE if null (should be non-null)
for (int i = 0; i < installs.length; i++) {
  if (installs[i].name.contains("by night")) { installs[i] = new Maven.MavenInstallation(installs[i].name,v3.home); break;}
}
descriptor.setInstallations(installs);

注意,我没有检查上面的语法,但它应该足够接近,可以让您排序。

反向工作应该非常简单

关于maven-2 - 有没有办法根据 cron 规则安排 Jenkins 作业与不同版本的 Maven 一起运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11391605/

相关文章:

java - Maven 抛出错误 : No plugin found for prefix 'assembly' in the current project and in the plugin groups

jenkins - 你如何强制 Jenkins Ansible 插件设置日志级别

amazon-web-services - 从 DynamoDB 表中删除内容的最佳方法(使用 Jenkins + CloudFormation)

maven - Jenkins pipeline、bitbucket hook 和 maven 发布插件无限循环

java - 无法使用 maven-assembly-plugin 设置最终的 jar 名称

java - 无法处理 EJB 类的业务接口(interface)

java - Maven 编译死于 "Killed"

maven - 这些 Maven 依赖范围 : provided/compile/system/import 之间有什么区别

database - 如何使用 svn 在 Maven 项目中实际使用 liquibase

android - 在多模块 Android 项目中找不到 Kotlin typealias