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

时间:2012-07-09 08:39:09

标签: 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在在夜间的预定时间。我怎么能这样做?

提前致谢!

马丁

1 个答案:

答案 0 :(得分:2)

这是一个尖叫的黑客,但应该工作。因为它是一个黑客,我将把确切的细节留给你; - )

你需要设置两个工作来阻止maven 3个工作。

两个作业都需要Groovy Plugin才能添加构建步骤。

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

  • Maven 2.2.1
  • Maven 3.0.4
  • Maven 2.2.1 by day 3.0.4 by night

第一个作业将访问全局配置,并将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);

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

反向工作应该很容易