web-dev-qa-db-ja.com

Jenkinsでpythonスクリプトを実行できません

私は数年前からJenkinsを使用しており、最近新しいWindows 10 PCを購入しました。 Jenkins 2.89.2、Visual Studio 2017、およびPython 3.6をインストールし、以前のWindows 7 PCからいくつかのJenkinsジョブをコピーしました。

私が遭遇した問題は、フリースタイルのJenkinsジョブのすべてのpythonスクリプトが今は何もしないことです。

これらのpythonスクリプトを実行する同様のコマンドラインバッチファイルがあり、新しいPCのコマンドウィンドウで正常に動作します。

また、ftypeとのファイルの関連付けを確認し、最終的にそれを変更しました。

ftype Python.File
Python.File="D:\Python36_64\python.exe" "%L" %*

私の回避策は次のとおりです:

Windows 7で動作するサンプル行:

CreateBuildNumber.py <= PATHを使用してこのファイルを検索し、次にファイルの関連付けを使用してpythonを実行します

交換ラインは、Windows 10で機能する必要があります。

python .\Scripts\CreateBuildNumber.py <= PATHを使用してPythonを検索します。

スクリプトで明示的なパスを回避するにはどうすればよいですか?

更新:

D:\project>assoc | findstr -i python
.py=Python.File
.pyc=Python.CompiledFile
.pyd=Python.Extension
.pyo=Python.CompiledFile
.pyw=Python.NoConFile
.pyz=Python.ArchiveFile
.pyzw=Python.NoConArchiveFile

echo %PATH%
D:\Python36_64;D:\Python36_64\Scripts;.\Scripts;"C:\Program Files\CppCheck";C:\windows\system32

詳細情報

%PATH%から。\ Scriptsを削除してジョブを再実行しましたが、demo.pyも。\ Scriptsに移動したので、何もせずにエラーは発生しません。

'demo.py' is not recognized as an internal or external command, operable program or batch file.

これは、Windows [〜#〜] is [〜#〜]スクリプトを探して見つけるpythonスクリプトを実行するのに失敗していることを意味します。次のステップとファイルの関連付けを使用して、実行する実行可能プログラムを検索し、ファイルをパラメーターとして取得しますか?

更新:

これですべてが正常に機能し、理由はわかりません。

私は最近、2年以上ランニングもタッチもしていない、Jenkinsで別のジョブを使い始めました。そのジョブは変更なしで機能しました。それ以来、問題の仕事に戻り、すべての変更を元に戻しましたが、この変更も機能します。

私の推測では、Windows 10にパッチが適用されています。

17
quamrana

「demo.py」が「...は内部コマンドまたは外部コマンドとして認識されません」というメッセージを表示するという事実は、スクリプトが実行可能ファイルとして認識されていることを私に納得させません。コマンドプロンプトウィンドウに「turkey.abc」と入力すると、同じエラーが発生し、「。abc」ファイルを実行するためのツールがありません。

ここには2つの可能性があります。

1)バッチスクリプトでは、実行可能拡張子がPATHEXTと呼ばれる環境変数に表示される必要がある場合があります。

Jenkinsバッチスクリプトで、スクリプトの上部近くに「set」コマンドを追加して、実行中のスクリプトの環境変数をJenkinsビルドログにダンプします(これがデバッグされたら、setコマンドを削除できます)。ビルドを実行します。 PATHの定義だけでなく、PATHEXTも調べてください。 「.py」はそこにリストされている拡張子の1つですか?

私はPerlスクリプトでこの問題を経験しました。ただし、Windows 10のホームPCでのテストでは、PATHEXTにない場合でも.pyスクリプトを正常に実行しているため、これを明確に主張しているため、試してみる必要がありますが、そうではない可能性があります。

2)別の可能性として、サービスが実行されている環境が、デスクトップでコマンドプロンプトを開いたときに取得する環境とは異なる場合があります(Jenkinsサービスは、ログインしたユーザーとは異なるユーザーとして実行されるためです)。

Jenkinsバッチコマンドに「set」を追加すると、Jenkinsスクリプトが実行されている環境が表示されるため、これもデバッグに役立ちます。次に、PATHを調べて、スクリプトフォルダーが見つかっているかどうかを確認できます。

Pythonのファイルの関連付けがすべてのユーザーではなく、ユーザーのみにインストールされた(つまり、HKEY_LOCAL_MACHINEの代わりにレジストリのHKEY_CURRENT_USERに)インストールされた可能性もあります)。 Jenkinsのログ-「reg」コマンドで実行できますが、必要なすべてのものを取得するために数回の試行が必要になります。レジストリを調べるだけでそれを理解できる場合があります。「。py」を検索してください。それ以外のHKEY_LOCAL_MACHINEで発生します; HKEY_CURRENT_USERで発生した場合、それは少なくとも問題の一部です。

1
John Elion

これで問題が解決するかどうかはわかりませんが、PATH環境変数に相対パスを含めることはできません。

。\ ScriptsをPATH変数から削除した後、もう一度試すことができますか? (新しい新しい端末を開くことを忘れないでください新しい%PATH%値を取得します)

0
Lyyn

問題は、PATH変数にあなたのパスが含まれていないことですpythonスクリプト。Scriptsディレクトリの完全パスが必要です。相対パスではありません.\Scripts

0
Hetzroni