これは私の状況です:私のプロジェクトの1つは、サブバージョンリポジトリの異なる場所にあるフロントエンドとバックエンドとしておおまかな複数のサブプロジェクトで構成されています。なぜこのJenkins Pipelineコードは成功しないのですか?
私は既にチェックアウトのために適切にパラメータ化され、関数にcheckout
プラグインを抽出:
def svn(String url, String dir = '.') {
checkout([
$class: 'SubversionSCM',
locations: [[
remote: url,
credentialsId: '...'
local: dir,
]],
workspaceUpdater: [$class: 'UpdateUpdater']
])
}
そのように、私は(簡体字)この手段によって、チェックアウトを行うことができた:
stage "1. Build"
parallel (
"Backend": { node {
svn('https://svn.acme.com/Backend/trunk')
sh 'gradle build'
}},
"Frontend": { node {
svn('https://svn.acme.com/Frontend/trunk')
sh 'gradle build'
}}
)
私はスタックトレースから推測できる限り、チェンジセットXMLファイルで問題を抱えているジェンキンスに非常に似ています。
私もプロジェクト名とそのsvn urlの両方を再利用したいので、マップ上で繰り返し実行して、連続してチェックアウトし、次の並列ビルド専用ステージの最初のステージでファイルを隠すだけです:
stage "1. Checkout"
node {
[
'Backend': 'https://svn.acme.com/Backend/trunk',
'Frontend': 'https://svn.acme.com/Frontend/trunk',
].each { name, url ->
// Checkout in subdirectory
svn(url, name)
// Unstash by project name
dir(name) { stash name }
}
}
stage "2. Build"
// ...
はどういうわけかジェンキンスパイプラインはこれをサポートしていないので、私はシンプルなため、ループの代わりに使用:java.io.NotSerializableException: java.util.LinkedHashMap$Entry
:同様に動作し、例外を除いて、ビルドを終了していない
node {
def projects = [
'Backend': '..'
// ...
]
for (project in projects) {
def name = project.getKey()
def url = project.getValue()
svn(url, name)
dir(name) { stash name }
}
project = projects = name = url = null
}
。ご覧のとおり、すべてのプロパティをnullに設定しています。なぜなら、どこかを読んでいるため、この動作が妨げられるからです。この問題を解決して、ここで何が起こっているのかを説明できますか?
ありがとうございます!
ジェンキンスパイプラインスクリプトエラーをデバッグすることは不可能であると思われるので、これは、非常に迷惑です。しかし、ありがとう! – Jazzschmidt