web-dev-qa-db-ja.com

Jenkins UIでローカルpythonスクリプトを実行する方法

私はJenkinsを初めて使用します。最近、ローカルpythonスクリプトを実行するジョブをスケジュールしたいです。私はまだソース管理を持っていないので、Jenkins UIでジョブを作成するときにソースコード管理で「なし」を選択しました。

Jenkins UIでpythonスクリプトを実行する方法についていくつか調査し、Pythonプラグインを使用してpythonスクリプトをビルドステップとして実行しようとしました。しかし、失敗しました。 (実際、スクリプトは入力引数を取るため、このプラグインを使用したくないので、BUILDフィールドで「シェルを実行」のようなものを選択する必要があると思います-試しましたが失敗しました)ローカルpythonスクリプトを適切に実行/呼び出すには?

PS:Jenkins Workspaceとその仕組みについてもわかりません。誰かが私のためにそれを明確にすることができれば適切です。

ビルド失敗後に取得したコンソール出力は次のとおりです。

Started by user Yiming Chen
[EnvInject] - Loading node environment variables.
Building in workspace D:\Application\Jenkins\workspace\downloader
[downloader] $ sh -xe C:\windows\TEMP\hudson3430410121213277597.sh
The system cannot find the file specified
FATAL: command execution failed
Java.io.IOException: Cannot run program "sh" (in directory     "D:\Application\Jenkins\workspace\downloader"): CreateProcess error=2, The system cannot find the file specified
at Java.lang.ProcessBuilder.start(Unknown Source)
at hudson.Proc$LocalProc.<init>(Proc.Java:245)
at hudson.Proc$LocalProc.<init>(Proc.Java:214)
at hudson.Launcher$LocalLauncher.launch(Launcher.Java:846)
at hudson.Launcher$ProcStarter.start(Launcher.Java:384)
at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.Java:108)
at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.Java:65)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.Java:20)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.Java:779)
at hudson.model.Build$BuildExecution.build(Build.Java:205)
at hudson.model.Build$BuildExecution.doRun(Build.Java:162)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.Java:534)
at hudson.model.Run.execute(Run.Java:1728)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.Java:43)
at hudson.model.ResourceController.execute(ResourceController.Java:98)
at hudson.model.Executor.run(Executor.Java:404)
Caused by: Java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at Java.lang.ProcessImpl.create(Native Method)
at Java.lang.ProcessImpl.<init>(Unknown Source)
at Java.lang.ProcessImpl.start(Unknown Source)
... 16 more
Build step 'Execute Shell' marked build as failure
Finished: FAILURE
8
PIZZA PIZZA

Jenkinsジョブを作成し、jenkinsジョブからシェルスクリプトとしてスクリプトを実行します。このような

#!/bin/sh
python <absolute_path_of_python_script>.py
12
Avinash

各サーバーのローカルスクリプトファイルを処理する代わりに、すべてのpythonスクリプトをBuildセクションの下の「execute Shell」にコピーできます。関連するpython Shebang。たとえば:

#!/usr/bin/env python
your script...

また、ジョブにパラメーターを追加し、pythonスクリプトで環境変数を使用できます。たとえば、

parameter1 = os.environ['parameter1']
9
dsaydon

別の方法は、pipelineを作成し、pythonスクリプトを指すshコマンドを実行します。JenkinsUI経由でパラメーターを渡すこともできます dsaydon 彼の答えに言及されています。

shコマンドは次のようになります(コマンドラインで実行するようなものです)。

sh 'python.exe myscript.py'

新しい仮想環境を作成し、すべての要件のインストール後にスクリプトを実行するパイプラインステップの例

stage('Running python script'){
sh      '''
        echo "executing python script"
        "'''+python_exec_path+'''" -m venv "'''+venv+'''" && "'''+venv+'''\\Scripts\\python.exe" -m pip install --upgrade pip && "'''+venv+'''\\Scripts\\pip" install -r "'''+pathToScript+'''\\requirements.txt" && "'''+venv+'''\\Scripts\\python.exe" "'''+pathToScript+'''\\my_script.py" --path "'''+PathFromJenkinsUI+'''"
        '''
}

どこで

sh ''' 
   your command here
   ''' 

複数行のシェルコマンドを意味します(本当に必要な場合)

パイプライン(groovy-script)からshコマンドに変数を渡すこともできます。そのため、pythonスクリプトに引数として。この方法で使用します'''+argument_value+'''(3つの引用符と変数名の前後のプラス)

例:pythonスクリプトはオプションの引数pathを受け入れ、Jenkins UIに入力したい特定の値で実行したい場合。groovyのシェルコマンドスクリプトは次のようになります。

// getting parameter from UI into `pathValue` variable of pipeline script
// and executing Shell command with passed `pathValue` variable into it.

pathValue = getProperty('pathValue') 
sh '"\\pathTo\\python.exe" "my\\script.py" --path "'''+pathValue+'''"' 
1
Sysanin