私は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
Jenkinsジョブを作成し、jenkinsジョブからシェルスクリプトとしてスクリプトを実行します。このような
#!/bin/sh
python <absolute_path_of_python_script>.py
各サーバーのローカルスクリプトファイルを処理する代わりに、すべてのpythonスクリプトをBuildセクションの下の「execute Shell」にコピーできます。関連するpython Shebang。たとえば:
#!/usr/bin/env python
your script...
また、ジョブにパラメーターを追加し、pythonスクリプトで環境変数を使用できます。たとえば、
parameter1 = os.environ['parameter1']
別の方法は、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+'''"'