Anpassen von Python für Azure Pipelines
Sie können Azure Pipelines verwenden, um Ihre Python-Apps zu erstellen, ohne eine eigene Infrastruktur einrichten zu müssen. Tools, die Sie häufig zum Erstellen, Testen und Ausführen von Python-Apps verwenden, werden auf von Microsoft gehosteten Agents in Azure Pipelines vorinstalliert.
Informationen zum Erstellen Ihrer ersten Pipeline mit Python finden Sie in der Python-Schnellstartanleitung.
Verwenden einer bestimmten Python-Version
Um eine bestimmte Version von Python in Ihrer Pipeline zu verwenden, fügen Sie azure-pipelines.yml die Aufgabe „Python-Version verwenden“ hinzu. Dieser Codeausschnitt legt die Pipeline so fest, 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.
jobs:
- job: 'Test'
pool:
vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-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 mit jeder Python-Version in der Matrix ausgeführt werden.
Ausführen von Python-Skripts
Verwenden Sie zum Ausführen von Python-Skripts in Ihrem Repository ein script
-Element, und geben Sie einen Dateinamen an. Beispiel:
- script: python src/example.py
Sie können auch Inline-Python-Skripts mit der Aufgabe „Python-Skript“ ausführen:
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
Um die Skriptausführung zu parametrisieren, verwenden Sie die PythonScript
-Aufgabe mit arguments
-Werten, um Argumente an den Ausführungsprozess 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. Beispielsweise installiert oder upgradet diese YAML pip
und die Pakete setuptools
und wheel
.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Installationsanforderungen
Nachdem pip
und die restlichen Elemente aktualisiert wurden, installieren Sie als Nächstes die Abhängigkeiten von requirements.txt:
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Ausführen von Tests
Verwenden Sie Skripts, um verschiedene Tests in Ihrer Pipeline zu installieren und auszuführen.
Ausführen von Linttests mit flake8
Um flake8
zu installieren und upzugraden und zum Ausführen von Linttests zu verwenden, verwenden Sie folgenden YAML-Code:
- script: |
python -m pip install flake8
flake8 .
displayName: 'Run lint tests'
Testen mit Pytest und Sammeln von Abdeckungsmetriken mit „pytest-cov“
Verwenden Sie diesen YAML-Code zum Installieren von pytest
und pytest-cov
, zum Ausführen von Tests, zum Ausgeben von Testergebnissen im JUnit-Format und von Code Coverage im Cobertura-XML-Format:
- 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. In diesem Beispiel wird tox -e py
verwendet, um die Version von Python auszuführen, die 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 Code Coverage-Ergebnisse veröffentlichen hinzu, um Code Coverage-Ergebnisse auf dem Server zu veröffentlichen. Sie können Coverage-Metriken in der Buildzusammenfassung einsehen und HTML-Berichte zur weiteren Analyse herunterladen.
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
Packen und Übermitteln von Code
Verwenden Sie zur Authentifizierung bei twine
die Aufgabe Twine-Authentifizierung, um Authentifizierungsanmeldeinformationen in der Umgebungsvariable PYPIRC_PATH
zu speichern.
- 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 twine
zum Veröffentlichen Ihrer Pakete verwendet.
- 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.
Zugehörige Erweiterungen
- Azure DevOps-Plug-In für PyCharm (IntelliJ) (Microsoft)
- Python in Visual Studio Code (Microsoft)
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für