【发布时间】:2015-08-25 12:58:28
【问题描述】:
我有一个 Jenkins 工作,它接收到一个 maven 项目 的 svn url 作为参数。它执行 groovy 脚本 和一些步骤,如 mvn 包、mvn 部署……但我发现了一个问题,当我第一次启动作业时一切都很好,但是当我再次执行它时时间,我更改了输入项目,Jenkins 或 groovy 似乎正在使用以前执行的 pom.xml,我的意思是,当我尝试在 groovy 中从项目的 pom 中检索 artifactId 时,我总是得到 artifactId在第一个项目中,无论我启动作业多少次,或者我确实清除了当前工作区,它都会返回第一个 pom 值。
我用来读取 pom.xml 值的常规代码是:
def thr = Thread.currentThread() //This line may be the problem?
def currentBuild = thr?.executable
def pomMAIN = currentBuild.getParent().getModules().toArray().size()-1
def mavenVer = currentBuild.getParent().getModules().toArray()[pomMAIN].getVersion()
def mavenArtifactId = currentBuild.getParent().getModules().toArray()[pomMAIN].getArtifactId()
def mavenGroupId = currentBuild.getParent().getModules().toArray()[pomMAIN].getGroupId()
我已尝试删除并再次创建作业,但行为始终相同,它仅在第一次执行期间获得正确的 pom。
有没有办法清理作业/常规数据?
编辑 2015 年 6 月 7 日:
我的工作使用 Source Code Management:
部分检索 svn 代码签出策略应该足以确保代码已更新,但我还检查了作业工作区以确保 pom 是正确的。
【问题讨论】:
-
你有没有试过告诉詹金斯在工作区开始执行之前清理它?您可能需要安装 wiki.jenkins-ci.org/display/JENKINS/Workspace+Cleanup+Plugin 来帮助解决此问题
-
我已经尝试手动清理工作区但没有用,但我会尝试使用该插件,希望对您有所帮助
-
插件没有解决问题
-
如何从 svn 存储库中检索 maven 项目?您确定您的文件已更新吗?
-
我已经用这个信息更新了这个问题,但我认为这不是问题,因为我检查了工作区并找到了正确的 pom,但是 groovy 仍然从以前的构建中读取值。我怀疑
thr = Thread.currentThread()以某种方式导致错误,因为线程没有被更新,但我不知道如何清理/更新它
标签: multithreading groovy jenkins pom.xml