从Maven项目版本声纳使用哈德森(project version from maven to so

2019-07-19 05:31发布

我使用maven2,这是哈德森和声纳,而这样做的声纳分析 - 我想一些方法来追加哈德森打造#该项目的Maven版本

该项目的版本变化,每2个星期 - 所以要在第2周的例子:

<version>abc-SNAPSHOT</version>

两个星期后,下一个版本会是这样的:

<version>xyz-SNAPSHOT</version>

我要的是生成#追加到版本已经出现在POM - 这是被拾起,并传递到声纳

注意:

-Dsonar.projectVersion=xyz-SNAPSHOT-${BUILD_NUMBER}

在这里 - 我硬编码的版本,并通过动态构建#

我想要的是能够动态地拿起从行家的版本(不改变的话),只是动态追加构建#

如何任何想法可以实现吗? 谢谢,萨蒂什

Answer 1:

您可以使用Groovy脚本读取的版本,把对环境的变量: 获取Maven版本在詹金斯

我用这个时间脚本解析版本:

def project = new XmlParser().parse("/pom.xml")
def artifactId =  project.artifactId.text().trim()
def version = project.version.text().trim()
println "ArtifactId: [" + artifactId + "]"
println "Version: [" + version + "]"

设置 “其他属性” 字段后:-Dsonar.projectVersion = $ {MAVEN_VERSION} - $ {} BUILD_NUMBER

如果詹金斯没有得到变量,尽量安装: https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin



Answer 2:

您可以使用此功能詹金斯: https://github.com/jenkinsci/jenkins/pull/933/files

基本上你可以在制作的访问ENV变量,从Maven的GAV信息詹金斯映射

  • POM_DISPLAYNAME
  • POM_DISPLAYNAME
  • POM_VERSION
  • POM_GROUPID
  • POM_ARTIFACTID
  • POM_PACKAGING
  • POM_RELATIVEPATH


Answer 3:

这是不是一个真正的声纳问题。 这是Maven的项目版本。

Snaphots被设计为动态的。 你会说Maven是节省了时间标记的版本在Maven仓库引擎盖下发现(我不知道这些时间戳是如何被传递到声纳,这也许是你想要什么)。 快照版本是理想的CI工作。 从未使用由非开发软件。

什么是我建议要么停止使用快照(建“放”每次),或只接受一个事实,即有在Maven的2种构建。 我的原则是,如果代码被他人使用那么它不再是一个快照,应被视为释放。 这为像持续部署新的办法挑战.....如果每个构建都要到生产(或生产副本),那么快照变得无关紧要。

构建一个版本,每次并不坏。 首先命名约定的,我建议:

<major>.<minor>.<patch>.<hudson build num>

在Maven的版本插件会自动最痛苦的管理中释放的细节(更新POM,标记您的SCM系统)。 最后还有一个有用的M2_Release插件 ,使您能够触发哈德森GUI释放。



Answer 4:

感谢安德烈指着我我也尝试其他链接,但也陷入了一些问题,如假设我所做的评论中指出仅仅是一个解决办法,有一个更好的解决办法? (我用哈德森),所以我定义在哈德森新的工作(建立一个Maven 2/3的项目(旧))在这里,我所定义的“常规PostBuild”复制链接中的代码,安德烈向我指出:

import hudson.model.*;
import hudson.util.*;

def thr = Thread.currentThread();
def currentBuild = thr?.executable;
def mavenVer = currentBuild.getParent().getModules().toArray()[0].getVersion();
def newParamAction = new hudson.model.ParametersAction(new           
hudson.model.StringParameterValue("MAVEN_VERSION", mavenVer));
currentBuild.addAction(newParamAction);

然后,我“在其他项目上触发参数化建设”,并提到在我的POM希望行家版本mentioend工作

定义的参数 - $ {} MAVEN_VERSION

当时我能够得到的“其他”工作这个参数的值

因此,首先感谢安德烈 - 他为我提供了一个解决方案,我很好奇,想知道这是否是一个好办法另一个问题我已经是(这或许我将开始一个新的线程)是 - 如何哈德逊“自由风格”的工作有所不同一个“Maven的2/3遗产项目”

我想问的原因是“自由风格”的失败,而它的“Maven的遗产”的工作相同的Groovy脚本

谢谢,萨蒂什



Answer 5:

有同样的需求,并为用Groovy解析POM建议解决。

import jenkins.util.*;
import jenkins.model.*;

def thr = Thread.currentThread();
def currentBuild = thr?.executable;
def workspace = currentBuild.getModuleRoot().absolutize().toString();

def project = new XmlSlurper().parse(new File("$workspace/pom.xml"))

def param = new hudson.model.StringParameterValue("project.version", project.version.toString())
currentBuild.addAction(new hudson.model.ParametersAction(param));

添加此脚本类型的后工序“执行系统Groovy脚本”(所以安装的Groovy是没有必要的),并粘贴在“常规命令”的代码。



文章来源: project version from maven to sonar using hudson