1

こんにちは、私はしばらくの間この問題に取り組んできましたが、MyProject@1,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' 
         }
     }
 },)

しかし、pomが読み取れないというエラーがmavenでまだ発生しており、このwsコマンドが役に立たないため、そのディレクトリがありません。私の統合テストは MyProject@2、@3、@4 などで実行されます...

[FirstSuite] + 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/FirstSuite
[FirstSuite] Java HotSpot(TM) Server VM warning: ignoring option MaxPermSize=384m; support was removed in 8.0
[FirstSuite] [INFO] Scanning for projects...
[FirstSuite] [ERROR] The build could not read 1 project -> [Help 1]
[PmClientTestsuite] [ERROR]   
[FirstSuite] [ERROR]   The project  (/opt/.jenkins/workspace/MyProject@16/java/pom.xml) has 1 error
[FirstSuite] [ERROR]     Non-readable POM /opt/.jenkins/workspace/MyProject@16/java/pom.xml: /opt/.jenkins/workspace/MyProject@16/java/pom.xml (Datei oder Verzeichnis nicht gefunden)
[FirstSuite] [ERROR] 
[FirstSuite] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[FirstSuite] [ERROR] Re-run Maven using the -X switch to enable full debug logging.
[FirstSuite] [ERROR] 
[FirstSuite] [ERROR] For more information about the errors and possible solutions, please read the following articles:
[FirstSuite] [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
4

1 に答える 1

1

これは、wsステップを使用しているためです。代わりに、パスの一意性をチェックしないdirを使用します。

wsに関する Jenkins Pipeline Snippet Generator ヘルプ ヒントから:

並行ビルドが同じワークスペースを要求する場合、代わりに @2 などのサフィックスを持つディレクトリがロックされる場合があります。現在、要求された正確なディレクトリをロックするのを待つオプションはありません。その動作を強制する必要がある場合は、別のディレクトリを取得したことを pwd が示したときに失敗 (エラー) するか、ステージ名 '…' などの他の方法でビルドのこの部分のシリアル実行を強制することができます。同時実行: 1.

ロックを気にしない場合は、dir ステップを使用して現在のディレクトリを変更してください。

さらに、実際の意図が同じノードですべての実行ストリームを実行することである場合は、ノード並列から移動することをお勧めします。このような:

node('master') {
    dir('/opt/.jenkins/workspace/MyProject') {
        parallel FirstSuite: { ... },
                 SecondSuite: { ... },
                 <... other suites ... >
    }
}
于 2016-03-24T13:18:32.163 に答える