it-swarm.com.de

So führen Sie lokale Python-Skripts in der Jenkins-Benutzeroberfläche aus

Ich bin neu bei Jenkins und möchte vor kurzem einen Job einplanen, um ein lokales Python-Skript auszuführen. Ich habe noch keine Quellcodeverwaltung, also habe ich beim Erstellen des Jobs in der Jenkins-Benutzeroberfläche im Quellcode-Management "Keine" ausgewählt. 

Ich recherchierte über die Ausführung von Python-Skripten in der Jenkins-Benutzeroberfläche und versuchte, Python-Plugin zu verwenden, um Python-Skripts als Erstellungsschritte auszuführen. Aber es ist fehlgeschlagen. (Aber ich möchte dieses Plugin eigentlich nicht verwenden, da mein Skript Eingabeargumente benötigt. Ich denke, ich muss etwas wie "Shell ausführen" im Feld BUILD auswählen - ich habe es versucht, aber auch gescheitert.) ein lokales Python-Skript ordnungsgemäß ausführen/aufrufen?

PS: Mir ist auch der Jenkins Workspace und seine Funktionsweise nicht klar. Ist angebracht, wenn jemand es für mich klären könnte. 

Hier ist die Console-Ausgabe, die ich nach dem Fail-Build erhalten habe:

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
7
Austin Chen

Erstellen Sie einen Jenkins-Job, und führen Sie Ihre Skripts als Shell-Skript von jenkins Job aus

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

anstatt die lokale Skriptdatei auf jedem Server zu behandeln, können Sie tatsächlich das gesamte Python-Skript in die "Execute-Shell" unter dem Abschnitt "Build" kopieren. Es muss mit dem entsprechenden Python-Shebang beginnen. Zum Beispiel:

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

sie können dem Job auch Parameter hinzufügen und Umgebungsvariablen in Ihrem Python-Skript verwenden. zum Beispiel

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

Eine andere Möglichkeit besteht darin, pipeline zu erstellen und den Befehl sh auszuführen, der auf Ihr Python-Skript zeigt. Sie können Parameter auch über die Jenkins-Benutzeroberfläche übergeben, als dsaydon in seiner Antwort erwähnt.

Der Befehl sh kann wie folgt aussehen (wird wie in der Befehlszeile ausgeführt):

sh 'python.exe myscript.py'

Beispiel-Pipeline-Schritt zum Erstellen einer neuen virtuellen Umgebung und Ausführen eines Skripts nach der Installation aller Anforderungen

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+'''"
        '''
}

woher

sh ''' 
   your command here
   ''' 

bedeutet mehrzeiliger Shell-Befehl (wenn Sie es wirklich brauchen)

Sie können auch Variablen aus Ihrer Pipeline (groovy-script) an den Befehl sh und folglich an Ihr Python-Skript als Argumente übergeben. Verwenden Sie diesen Weg '''+argument_value+''' (mit drei Anführungszeichen und einem Pluszeichen um den Variablennamen)

Beispiel: Ihr Python-Skript akzeptiert das optionale Argument path und Sie möchten es mit einem bestimmten Wert ausführen, den Sie in Ihre Jenkins-Benutzeroberfläche eingeben möchten. Dann sollte Ihr Shell-Befehl in groovigem Skript folgendermaßen lauten:

// 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