Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Python-Apps erstellen, ohne Ihre eigene Infrastruktur einzurichten. Tools, die Sie häufig zum Erstellen, Testen und Ausführen von Python-Apps verwenden, einschließlich pip, sind vorinstalliert.
Um die kostenlose Gewährung von parallelen Aufträgen zu erhalten, aktivieren Sie die kostenlose Stufe. Oder kaufen Sie einen parallelen Einzelvorgang, 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
Abhängigkeiten installieren
Sie können Skripts verwenden, um bestimmte PyPI-Pakete mit pip zu installieren. Das folgende Beispiel installiert oder aktualisiert pip sowie die Pakete setuptools und wheel.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Installationsanforderungen
Nachdem Sie pip und Co. aktualisiert haben, ist ein typischer nächster Schritt, Abhängigkeiten aus 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.
Führen Sie Lint-Tests mit flake8 aus.
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
Führen Sie die Authentifizierung bei twine mithilfe der Python-Twine-Upload-Authentifizierungsaufgabe durch, um die Authentifizierungsdaten in der PYPIRC_PATH-Umgebungsvariablen zu speichern.
- task: TwineAuthenticate@1
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.