ダウンロードが完了するまでwgetコマンドを強制的に待機させるのに問題があります。問題はJenkinsの内部で発生しますsh '''script place '''
。スクリプトを.sh
ファイルに書きましたが、問題なく実行されますが、Jenkinsに移動した後、ダウンロードが完了する前にJenkinsの他のコマンドが実行されます。
私が使用するスクリプトは次のとおりです。
sh '''
ssh -i "${keyfile}" -v -o StrictHostKeyChecking=no myuser@myVM << ENDSSH
cd /toFolder
ls -l
echo
if [ -f *.zip ]
then
echo "zip file already exists. Aborting"
exit 1
fi
wget ${URL}
sleep 1
export ZIP_FILENAME=`ls *.zip`
echo run: deployment.sh -j $ZIP_FILENAME
echo
deployment.sh -j $ZIP_FILENAME
ENDSSH
'''
ENDSSH
このコードをここに貼り付けるために、デプロイスクリプトの下の最後の行に移動し、コードブロック内に残しました。 (スクリプトの一番左にある必要があることを知っています)
だから私の問題は、ダウンロードが完了する前にDeployment.shを使用してデプロイする必要があるファイル名を見つけることです。
wait
commandも使ってみましたsleep
が、最善の方法ではないようですが、waitコマンドがまったく待たず、sleepコマンドが時々動作することがあります。 curl
動作はまったく同じです。私はLinuxスクリプトの知識が不足しているので、どんな提案でもありがとうございます。
ベストアンサー1
wget
(またはどのコマンドも)バックグラウンドで送信されないと、シェルはそのコマンドが完了するのを待ち、次のコマンドを早く開始しません。これがシェルがどのように機能するかです。あなたの実際の問題はURLと参照不足だと思います。たとえば、URLにシェルを欺くことができる特殊文字が含まれている場合は、次のコマンドを実行できます。
wget http://example.com&arg=1
これには&
charが含まれているので、引用を防ぐためにwgetがバックグラウンドで(切り捨てられたURLで)実行されます。
wget "http://example.com&arg=1"
コードで変数を使用します。
wget "${URL}"