Jenkins工作流程:如何并行执行集成测试

时间:2016-03-23 12:33:02

标签: maven jenkins junit workflow jenkins-pipeline

大家好我一直在研究这个问题已经有一段时间了,因为每次都在名为MyProject @ 1,2,3,4的新目录中运行集成测试,我无法找到解决方案......

我已声明我希望它们在特定目录中运行,但这没有帮助。这是我的代码示例。

audio|video.addEventListener("canplaythrough", function(){//your code});

但我仍然在maven中得到错误,pom不可读,并且该目录丢失,因为这个ws命令没有帮助。我的集成测试在MyProject @ 2,@ 3,@ 4等执行......

parallel( FirstSuite: {
    node('master') {
         ws('/opt/.jenkins/workspace/MyProject') {
             sh 'sleep 0 && mvn -s settings.xml -f java/pom.xml integration-test -P dev  -Dmaven.repo.local=.repository -Dit.test=FirstSuite -Djava.io.tmpdir=java/target -Dlog.dir=java/target/log/FirstSuite'
         } 
     }
 }, 
 SecondSuite: {
     node('master') {
         ws('/opt/.jenkins/workspace/MyProject') {
             sh 'sleep 20 && mvn -s settings.xml -f java/pom.xml integration-test -P dev  -Dmaven.repo.local=.repository -Dit.test=SecondSuite -Djava.io.tmpdir=java/target -Dlog.dir=java/target/log/SecondSuite'
         }
     }
 },
 ThirdSuite: {
     node('master') {
         ws('/opt/.jenkins/workspace/MyProject') {
             sh 'sleep 40 && mvn -s settings.xml -f java/pom.xml integration-test -P dev  -Dmaven.repo.local=.repository -Dit.test=ThirdSuite -Djava.io.tmpdir=java/target -Dlog.dir=java/target/log/ThirdSuite' 
         }
     }
 },
 FourthSuite: {
     node('master') {
         ws('/opt/.jenkins/workspace/MyProject') {
             sh 'sleep 60 && mvn -s settings.xml -f java/pom.xml integration-test -P dev  -Dmaven.repo.local=.repository -Dit.test=FourthSuite -Djava.io.tmpdir=java/target -Dlog.dir=java/target/log/FourthSuite' 
         }
     }
 },
 FifthSuite: {
     node('master') {
         ws('/opt/.jenkins/workspace/MyProject') {
             sh 'sleep 80 && mvn -s settings.xml -f java/pom.xml integration-test -P dev  -Dmaven.repo.local=.repository -Dit.test=FifthSuite -Djava.io.tmpdir=java/target -Dlog.dir=java/target/log/FifthSuite' 
         }
     }
 },
 SextSuite: {
     node('master') {
         ws('/opt/.jenkins/workspace/MyProject') {
             sh 'sleep 100 && mvn -s settings.xml -f java/pom.xml integration-test -P dev  -Dmaven.repo.local=.repository -Dit.test=SextSuite -Djava.io.tmpdir=java/target -Dlog.dir=java/target/log/SextSuite' 
         }
     }
 },
 SeventhSuite: {
     node('master') {
         ws('/opt/.jenkins/workspace/MyProject') {
             sh 'sleep 120 && mvn -s settings.xml -f java/pom.xml integration-test -P dev  -Dmaven.repo.local=.repository -Dit.test=SeventhSuite -Djava.io.tmpdir=java/target -Dlog.dir=java/target/log/SeventhSuite' 
         }
     }
 },
 EighthSuite: {
     node('master') {
         ws('/opt/.jenkins/workspace/MyProject') {
             sh 'sleep 140 && mvn -s settings.xml -f java/pom.xml integration-test -P dev  -Dmaven.repo.local=.repository -Dit.test=EighthSuite -Djava.io.tmpdir=java/target -Dlog.dir=java/target/log/EighthSuite' 
         }
     }
 },)

1 个答案:

答案 0 :(得分:1)

这是因为您使用 ws 步骤。而不是使用 dir ,它不会检查路径的唯一性。

来自Jenkins Pipeline Snippet Generator帮助暗示 ws

  

如果并发构建要求相同的工作空间,则可能会锁定带有后缀(如@ 2)的目录。目前没有选择等待锁定所请求的确切目录;如果你需要强制执行该行为,当pwd表明你有一个不同的目录时,你可能会失败(错误),或者你可以通过一些其他方法强制执行这部分构建的连续执行,例如:stage name:' ......',并发:1。

     

如果您不关心锁定,只需使用dir步骤更改当前目录。

此外,如果您的实际意图是在同一节点上执行所有执行流,我建议将节点移出并行。像这样:

node('master') {
    dir('/opt/.jenkins/workspace/MyProject') {
        parallel FirstSuite: { ... },
                 SecondSuite: { ... },
                 <... other suites ... >
    }
}