詹金斯(或groovy)使用上次执行的pom.xml

jenkins (or groovy) using pom.xml from previous execution

我有一个 Jenkins 作业,它接收作为参数的 svn url 到 maven 项目。它执行 groovy scripts 和 mvn package、mvn deploy 等一些步骤,...但我发现了一个问题,当我第一次启动作业时一切都很好,但是,当我第二次执行它并更改输入项目时,Jenkins 或 groovy 似乎正在使用上一次执行的 pom.xml,我的意思是,当我尝试在 groovy 中检索项目的 pom 中的 artifactId 我总是得到第一个项目的 artifactId,无论我启动作业多少次或者是否清除当前工作区,它总是return 第一个 pom 值。

我用来读取 pom.xml 值的 groovy 代码是:

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。

有没有办法清理 job/groovy 数据?

编辑 2015 年 6 月 7 日:

我的工作使用 源代码管理部分检索 svn 代码:

签出策略应该足以确保代码已更新,但我还检查了作业工作区以确保 pom 是正确的。

我终于找到了解决方案,现在我在作业开始时有一个 groovy 脚本来刷新它:

def jobNameToRefresh = "nameOfMyJob";
def hudson = hudson.model.Hudson.instance;

for(job in hudson.model.Hudson.instance.items) {   
    if (job.name == jobNameToRefresh) {
        def configXMLFile = job.getConfigFile();
        def file = configXMLFile.getFile();
        InputStream is = new FileInputStream(file);
        job.updateByXml(new StreamSource(is));
        job.save();
        return true        
    }      
} 

并且,在工作结束时,我使用 shell 脚本删除了文件夹 "modules",该脚本基本上执行以下操作:

cd..
rm -r modules