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

Maven 2 有没有办法根据cron规则安排Jenkins作业与不同版本的Maven一起运行?,maven-2,jenkins,maven-3,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运行它们)在夜间的预

我们正在使用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个作业

为了添加构建步骤,这两个作业都需要

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

  • Maven 2.2.1
  • Maven 3.0.4
  • Maven 2.2.1白天3.0.4晚上
第一个作业将访问全局配置,并在第3.0.4天晚上更改
Maven 2.2.1,以指向与
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);
导入hudson.tasks.*;
Maven.DescriptorImpl descriptor=jenkins.model.jenkins.instance.getDescriptor(Maven.class);
Maven.MavenInstallation[]安装=descriptor.installations.clone;
//克隆阵列,因为我们将对其进行修改
Maven.MavenInstallation v3=null;
for(Maven.MavenInstallation i:安装){
如果(i.name.equals(“Maven 3.0.4”){v3=i;break;}
}
v3.class;//如果为null,则抛出NPE(应为非null)
for(int i=0;i
注意,我没有检查上面的语法,但它应该足够接近,让您排序


相反的工作应该很简单

我不知道。但让我困惑的是,为什么不直接迁移到MVN3.0.X,因为现在您使用的是不再开发的工具版本。马文3。将。解决您问题的简单方法是设置两个不同的作业,一个使用MVN 2.2.1,另一个使用MVN 3.0.X,并将它们安排到不同的时间。在我们开始迁移时(这是一个漫长的过程),Maven的版本是3.0.1,有了这么大的变化,我们只想迁移到一个经过验证的Maven工作版本。许多插件仍然相当脆弱,比如maven站点插件,它们希望避免在maven本身(而不是我们自己的项目)中发现问题。此外,复制300-400个作业并不是我们真正想要的解决方案。站点区域是mvn 2之间的变化之一。和MVN3(预期)(特别是maven站点插件)。但除此之外,除了复制作业和测试构建之外,我看不到其他解决方案。复制本身当然可以通过脚本(groovy?)来完成。问题是——这将使我们拥有的作业数量增加一倍,这不是我想要的。在内部,Jenkins对待Maven 3构建与Maven 2构建完全不同。因此,我看不到在同一作业配置中切换Maven版本的任何机会。我唯一想到的是建立一个自由式项目,根据当前时间设置
MAVEN_HOME
,并执行
$MAVEN_HOME/bin/mvn
。另一个选项是设置第二个Jenkins实例,该实例运行与Maven 3.0.x相同的项目。作业可以很容易地从一个实例复制到另一个实例。@stefan ferstl注意,即使您使用的是Maven项目类型;-),此解决方案也可以工作