いくつかの素晴らしいコマンド ライン スクリプトを使用して作業を自動化しようとしています。jenkins_cli.sh
Jenkins サーバーと通信するスクリプトが 1 つあり ( )、次のようになります。
cd $1
if [ -z ${JENKINS_CREDENTIALS+x} -o -z ${JENKINS_SERVER+x} ]
then
JENKINS_SERVER=$(<jenkins_url.txt)
JENKINS_CREDENTIALS=$(<credentials.txt)
fi
java -jar jenkins-cli.jar -s $JENKINS_SERVER -auth $JENKINS_CREDENTIALS ${@:2}
これはうまくいきます。
たとえば、電話をかける./jenkins_cli.sh localhost/ list-jobs
と、ローカルの Jenkins サーバーで現在実行中のジョブのリストが取得されます。ただし、もっと凝ったことをしようとすると (たとえば./jenkins_cli.sh localhost/ list-jobs | xargs -L1 ./jenkins-cli localhost/ delete-job
、次のエラーが表示されます: 'RROR: No such job 'test_job
. ジョブtest_job
は存在します。ジョブは存在'test_job
しません。'
コマンドでこのキャラクターはどのようになりますか?
これは、Windows 用の GIT に同梱されている bash を使用していること、または改行の処理方法、またはスクリプトなどでパラメーターを処理する方法と関係があると推測しています。実行する./jenkins_cli.sh localhost/ list-jobs | xargs -L1 echo
と、期待どおりの結果が得られます。引用符なしで..これをさらにデバッグする方法が本当にわかりません。ジョブ リストをファイルに書き込んでから各行を読み取ってカスタム スクリプトに渡すというこの問題の解決策がありますが、実際には次のように実装したいと思いますxargs
:)
jenkins
コマンドからの出力が DOS の行末スタイル ( \r\n
) を使用していることに問題があると思いますが、git シェル コマンドは古典的な UNIX の行末スタイル ( \n
) を想定しています。
問題は、行末でxargs
迷子\r
を特殊文字と見なし、それらをエスケープしようとすることです。しかし、その後、すべてがうまくいけ場合でも、次のコマンドの引数はなりませんtest_job
が、test_job\r
(\r
目に見えないかもしれません)。
簡単な解決策は次を使用することdos2unix
です。
java -jar jenkins-cli.jar -s $JENKINS_SERVER -auth $JENKINS_CREDENTIALS ${@:2} | dos2unix
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加