0

CygpathプラグインがインストールされたJenkinsを使用しています。

Cygwin bash で問題なく動作するスクリプトがいくつかあります

#!/bin/bash

pwd

SCRIPTFILENAME=$(readlink -f $0)
SCRIPTPATH=`dirname $SCRIPTFILENAME`
cd $SCRIPTPATH
(python check_for_clip_duplicates.py) || exit $?

しかし、Jenkinsでビルドしようとすると、エラーが発生します:

$ D:\cygwin\bin\cygpath -w d:\cygwin\bin\bash.exe
[default] $ D:\cygwin\bin\bash.exe -xe C:\Windows\TEMP\hudson2178008588278192726.sh
cygwin warning:
MS-DOS style path detected: C:\Windows\TEMP\hudson2178008588278192726.sh
  Preferred POSIX equivalent is: /cygdrive/c/Windows/TEMP/hudson2178008588278192726.sh
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
+ sh tools/generate_all.sh pc compress reset --use-texture-packer
tools/generate_all.sh: line 2: $'\r': command not found
tools/generate_all.sh: line 3: $'pwd\r': command not found
tools/generate_all.sh: line 4: $'\r': command not found
tools/generate_all.sh: line 7: cd: /cygdrive/d/Jenkins/workspace/default/tools

: No such file or directory
C:\Python27\python.exe: can't open file 'check_for_clip_duplicates.py': [Errno 2] No such     file or directory
tools/generate_all.sh: line 8: exit: 2
: numeric argument required
Build step 'Execute shell' marked build as failure
Finished: FAILURE

シェル実行可能ファイルの Jenkins 構成には、d:\cygwin\bin\bash.exe があります。

主な問題は、cygdrive パスが機能しないことです。

tools/generate_all.sh: line 7: cd: /cygdrive/d/Jenkins/workspace/default/tools

: No such file or directory

何か案は?

4

2 に答える 2

0

ファイルに Windows の行末が含まれているようです - 実行dos2unixしてみてください:

$ dos2unix /cygdrive/c/Windows/TEMP/hudson2178008588278192726.sh

その後、スクリプトを再度実行してみてください。

于 2014-03-18T09:22:33.503 に答える
0

スクリプトが失敗する可能性が最も高いのcd $SCRIPTPATHは、(末尾の文字が原因で) 失敗し、そこにないスクリプトの現在のディレクトリ (ディレクトリではなく)\rを見つけようとするためです。check_for_clip_duplicates.pytools

以前のコマンドがすべて失敗し、最後のコマンドだけが実行されるのはなぜですか? 最後のものには実際には改行がないため、そこにはありません\r

Notepad++をダウンロードします。これは不可欠なツールであり、ファイルの EOL 変換を強力にサポートします ( \r.

  • メモ帳++を開く
  • [ファイル] -> [新規] をクリックします
  • ステータス バーの右下に、Dos\Windows (デフォルトの EOL)が表示されます。
  • [編集] -> [ EOL 変換] -> [ UNIX 形式]をクリックします。
  • ステータス バーの右下に、UNIXと表示されることに注意してください。
  • generate_all.shスクリプトの内容を入力してください (コピー ペーストしないでください)。
  • このファイルを自分のtools/generate_all.sh場所に保存します。違いに気付かないかもしれませんが、通常のビューでは行末は見えません。
  • 重要: SVN または他の SCM を使用して Jenkins のワークスペースにチェックアウトしている場合は、変更を SVN/SCM に保存する必要があります。

最後に、これが再び発生するのを避けるために、トリガーに使用するExecute Shellビルド ステップにdos2unixコマンドを入れることができます。generate_all.sh

dos2unix toos/generate_all.sh
tools/generate_all.sh pc compress reset --use-texture-packer

プロのヒント:
行末を実際に表示するには、Notepad++ で [表示] -> [記号を表示] -> [すべての文字を表示] をクリックします。

編集:
スクリプトから python を呼び出します。これにより、Windows 実行可能ファイルが呼び出されますC:\Python27\python.exe。外部実行可能ファイルであるため、Jenkins プラグイン (cygpath) や Jenkins 自体を認識しません。

あなたの質問をさらに分析すると、そもそも Cygwin の必要性はほとんどありません。通常のExecute Windows Batch コマンドビルド ステップですべてを実行できます。

cdは Windows の に相当しpwdます。
$WORKSPACEジョブのワークスペースのパスを指す環境変数であり、スクリプトがフォルダーにあることがわかっています。で置き換えることができますが、 これがビルドステップ (実際にはスクリプト) の最後の行である場合は完全に冗長です。Jenkins は、ビルド ステップの最後のステートメントの終了コードを、ビルド ステップ全体の終了コードとして使用します。tools
|| exit $?|| exit %ERRORLEVEL%

したがって、次のように、cygwin ビルド ステップ全体を通常のExecute Window Batchビルド ステップに変更します。

cd
cd $WORKSPACE/tools
C:\Python27\python.exe check_for_clip_duplicates.py 

Python ディレクトリが既に%PATH%変数にある場合はpython、フル パスの代わりに単純に使用できます。

于 2014-03-18T15:31:11.837 に答える