Jenkins sh:wgetダウンロードが完了するのを待ちます。

Jenkins sh:wgetダウンロードが完了するのを待ちます。

ダウンロードが完了するまで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を使用してデプロイする必要があるファイル名を見つけることです。

waitcommandも使ってみました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}"

おすすめ記事