特定のzipファイルが利用可能な場合は、次の手順に進むJenkinsパイプラインでシェルスクリプトを作成しています。 zipファイルが存在しない場合(zipファイルを含むディレクトリ構造が利用できない場合)、何もしません。
次のコードがあります。
sh'''
cd ''' + WORKSPACE + '''/''' + BuildLocation + '''
var=$(find Build/ReleaseKit/Installable/ -regex "$App.*.zip" 2>/dev/null)
echo "$var"
if ! [ -z "$var" ]
then
echo "App zip found"
unzip -o Build/ReleaseKit/Installable/App-*.zip
fi
'''
zipファイルが見つかると、このコードは正しく機能します。
ただし、zipファイルがない場合、対応する親ディレクトリ構造も存在しません。したがって、エラーfind
が発生しましたNo such directory
。エラーを抑制するために2>/dev/null
。
上記のコードを使用すると、zipファイルが存在しない場合は次のエラーが生成されます。
+ cd /home/oracle/jenkins/workspace/RedmineAndReviewboardProject/Deployment/Build
+ pwd
/home/oracle/jenkins/workspace/RedmineAndReviewboardProject/Deployment/Build
++ find Build/ReleaseKit/Installable/ -regex '.*.zip'
+ var=
.
.
ERROR: script returned exit code 1
この状況を処理する方法: ファイルが存在する場合は、その操作を実行します。存在しない場合は何も実行されません。
ノートzipファイルが存在する場合、パスもBuild/ReleaseKit/Installable/
存在します。 zipファイルが存在しない場合、パスも存在しません。
答え1
2>/dev/null
ただ砂に頭を埋めてください。危険をなくすのではなく、隠すだけです。find
エラーを示すために、まだ状態1で終了します。 Jenkinssh
スクリプトはset -e
アクティブな状態で実行されているため、シェルスクリプトはすぐに停止します。
を実行する前に、ディレクトリが存在するかどうかをテストしてくださいfind
。
以下のコードスニペットでは、いくつかの追加の変更を適用しました。
dir
代わりにJenkinsを使用してくださいcd
。find -regex
リテラルを見つけるために渡された正規表現を修正します.
(一致を避けるためwibble.not-a-zip
)。- 二重否定
! [ -z "$var" ]
をに簡素化します[ -n "$var" ]
。
dir(WORKSPACE + '/' + BuildLocation) {
sh '''
if [ -d Build/ReleaseKit/Installable ]; then
var=$(find Build/ReleaseKit/Installable/ -regex "$App.*\\.zip" 2>/dev/null)
echo "$var"
if [ -n "$var" ]
then
echo "App zip found"
unzip -o Build/ReleaseKit/Installable/App-*.zip
fi
'''
}
ファイルは明らかに、Installable
サブ(*)ディレクトリのより深い場所ではなく、ディレクトリ内になければなりませんfind
。
dir(WORKSPACE + '/' + BuildLocation) {
sh '''
set Build/ReleaseKit/Installable/"$App"*.zip
if [ -e "$1" ]; then
echo "App zip found: $1"
unzip -o "$1"
fi
'''
}
Groovyでは、次のコマンドを使用してshにファイルがあるかどうかをテストできます。パイプラインユーティリティステッププラグイン。
dir(WORKSPACE + '/' + BuildLocation) {
def zips = findFiles glob: "Build/ReleaseKit/Installable/${App}*.zip"
if (findFiles.length > 0) {
env.app_zip = zips[0]
sh 'unzip ${app_zip}'
}
}
(すべてのコードスニペットはテストされていません。)