Anpassen von Python-Pipelines
In diesem Artikel wird beschrieben, wie Sie Das Erstellen, Testen, Verpacken und Bereitstellen von Python-Apps und -Code in Azure-Pipelines anpassen. Informationen zum Erstellen Ihrer ersten Pipeline mit Python finden Sie in der Python-Schnellstartanleitung.
Mit von Microsoft gehosteten Agents in Azure Pipelines können Sie Ihre Python-Apps erstellen, ohne Ihre eigene Infrastruktur einrichten zu müssen. Tools, die Sie häufig zum Erstellen, Testen und Ausführen von Python-Apps verwenden, einschließlich pip
, sind vorinstalliert.
Möglicherweise müssen Sie die kostenlose Gewährung paralleler Aufträge anfordern oder einen parallelen Auftrag erwerben, um Ihre Pipelines auszuführen.
Zum Erstellen von Python-Apps mit Azure Pipelines benötigen Sie einen selbst gehosteten Agent , auf dem Python installiert ist. Informationen zum Installieren von Python auf Ihrem Agent finden Sie unter UsePythonVersion.
Verwenden einer bestimmten Python-Version
Um eine bestimmte Version von Python in Ihrer Pipeline zu verwenden, fügen Sie die Aufgabe "Python-Version verwenden" zum azure-pipelines.yml hinzu. Im folgenden Beispiel für die YAML-Pipelinedefinition wird die Pipeline so festgelegt, dass Python 3.11 verwendet wird.
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.11'
Verwenden mehrerer Python-Versionen
Um eine Pipeline mit mehreren Python-Versionen auszuführen, z. B. um ein Paket mit diesen Versionen zu testen, definieren Sie einen job
mit einer matrix
der Python-Versionen. Legen Sie dann die UsePythonVersion
-Aufgabe fest, um auf die Variable matrix
zu verweisen. Zum Beispiel:
jobs:
- job: 'Test'
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
Sie können Aufgaben hinzufügen, die jede Python-Version in der Matrix verwenden.
Ausführen von Python-Skripts
Wenn Sie Python-Skripts aus Ihrem Repository ausführen möchten, verwenden Sie ein script
Element, und geben Sie einen Dateinamen an. Zum Beispiel:
- script: python src/example.py
Sie können auch die Python-Skriptaufgabe verwenden, um Inline-Python-Skripts auszuführen.
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
Verwenden Sie zum Parametrisieren der Skriptausführung die PythonScript
Aufgabe mit arguments
Werten, um Argumente an den ausgeführten Prozess zu übergeben. Sie können die Argumente mithilfe von sys.argv
oder der komplexeren argparse
-Bibliothek analysieren.
- task: PythonScript@0
inputs:
scriptSource: inline
script: |
import sys
print ('Executing script file is:', str(sys.argv[0]))
print ('The arguments are:', str(sys.argv))
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--world", help="Provide the name of the world to greet.")
args = parser.parse_args()
print ('Hello ', args.world)
arguments: --world Venus
Installieren von Abhängigkeiten
Sie können Skripts verwenden, um bestimmte PyPI-Pakete mit pip
zu installieren. Das folgende Beispiel installiert oder aktualisiert pip
und die setuptools
Pakete wheel
.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Installationsanforderungen
Nach dem Aktualisieren pip
und Freunden besteht ein typischer nächster Schritt darin, Abhängigkeiten von requirements.txt zu installieren.
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Tests durchführen
Sie können Skripts verwenden, um verschiedene Tests in Ihrer Pipeline zu installieren und auszuführen.
Ausführen von Linttests mit flake8
Der folgende YAML-Code installiert oder aktualisiert flake8
und verwendet ihn zum Ausführen von Linttests.
- script: |
python -m pip install flake8
flake8 .
displayName: 'Run lint tests'
Testen mit Pytest und Sammeln von Abdeckungsmetriken mit „pytest-cov“
Der folgende YAML-Code installiert pytest
und pytest-cov
führt Tests aus, gibt Testergebnisse im JUnit-Format aus und gibt Codeabdeckungsergebnisse im Cobertura-XML-Format aus.
- script: |
pip install pytest pytest-azurepipelines
pip install pytest-cov
pytest --doctest-modules --junitxml=junit/test-results.xml --cov=. --cov-report=xml
displayName: 'pytest'
Ausführen von Tests mit Tox
Azure Pipelines kann parallele Tox-Testaufträge ausführen, um die Arbeit aufzuteilen. Auf einem Entwicklungscomputer müssen Sie Ihre Testumgebungen in Serie ausführen. Im folgenden Beispiel wird verwendet tox -e py
, um auszuführen, welche Version von Python für den aktuellen Auftrag aktiv ist.
- job:
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'
steps:
- task: UsePythonVersion@0
displayName: 'Use Python $(python.version)'
inputs:
versionSpec: '$(python.version)'
- script: pip install tox
displayName: 'Install Tox'
- script: tox -e py
displayName: 'Run Tox'
Testergebnisse veröffentlichen
Fügen Sie die Aufgabe Testergebnisse veröffentlichen hinzu, um JUnit- oder xUnit-Testergebnisse auf dem Server zu veröffentlichen.
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for Python $(python.version)'
Veröffentlichen von Code Coverage-Ergebnissen
Fügen Sie die Aufgabe zum Veröffentlichen von Codeabdeckungsergebnissen hinzu, um Codeabdeckungsergebnisse auf dem Server zu veröffentlichen. Sie können Abdeckungsmetriken in der Buildzusammenfassung anzeigen und HTML-Berichte zur weiteren Analyse herunterladen.
- task: PublishCodeCoverageResults@2
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
Packen und Übermitteln von Code
Verwenden Sie zum Authentifizieren mit twine
der Python Twine Upload-Authentifizierungsaufgabe die Authentifizierungsanmeldeinformationen in der PYPIRC_PATH
Umgebungsvariable.
- task: TwineAuthenticate@0
inputs:
artifactFeed: '<Azure Artifacts feed name>'
pythonUploadServiceConnection: '<twine service connection from external organization>'
Fügen Sie dann ein benutzerdefiniertes Skript hinzu, das zum Veröffentlichen Ihrer Pakete verwendet twine
wird.
- script: |
twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>
Sie können Azure Pipelines auch verwenden, um ein Image für Ihre Python-App zu erstellen und es in eine Containerregistrierung zu pushen.