Erstellen von Python-Apps
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019
Sie können Azure Pipelines verwenden, um Python-Apps und -Skripts als Teil Ihres CI/CD-Systems zu erstellen, zu testen und bereitzustellen. Dieser Artikel konzentriert sich auf das Erstellen einer grundlegenden Pipeline.
Wenn Sie ein End-to-End-Lernprogramm benötigen, lesen Sie die Verwendung von CI/CD zum Bereitstellen einer Python-Web-App für Azure App Service unter Linux.
Informationen zum Erstellen und Aktivieren einer Anaconda-Umgebung und zum Installieren von Anaconda-Paketen finden conda
Sie unter Ausführen von Pipelines mit Anaconda-Umgebungen.
Erstellen Ihrer ersten Pipeline
Neu bei Azure Pipelines? Wenn ja, empfehlen wir Ihnen, diesen Abschnitt zu versuchen, bevor Sie zu anderen Abschnitten wechseln.
Abrufen des Codes
Importieren Sie dieses Repository in Ihr Git-Repo in Azure DevOps Server 2019:
Importieren Sie dieses Repository in Ihr Git-Repo:
https://github.com/Microsoft/python-sample-vscode-flask-tutorial
Anmelden bei Azure Pipelines
Melden Sie sich bei Azure Pipelines an. Nach der Anmeldung wechselt Ihr Browser zu https://dev.azure.com/my-organization-name
und zeigt Ihr Azure DevOps-Dashboard an.
Erstellen Sie in Ihrer ausgewählten Organisation ein Projekt. Sollten in Ihrer Organisation noch keine Projekte vorhanden sein, wird der Bildschirm Erstellen Sie als ersten Schritt ein Projekt. angezeigt. Wählen Sie andernfalls die Schaltfläche "Neue Project" in der oberen rechten Ecke des Dashboards aus.
Erstellen der Pipeline
Melden Sie sich bei Ihrer Azure DevOps Organisation an, und wechseln Sie zu Ihrem Projekt.
Navigieren Sie zu Pipelines, und wählen Sie Neue Pipeline aus.
Führen Sie die Schritte des Assistenten aus. Dabei wählen Sie zuerst GitHub als Speicherort Ihres Quellcodes aus.
Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein.
Wenn die Liste der Repositorys angezeigt wird, wählen Sie Ihr Repository aus.
Sie werden möglicherweise zu GitHub weitergeleitet, um die Azure Pipelines-App zu installieren. Wählen Sie in diesem Fall Genehmigen und installieren aus.
Wenn die Registerkarte "Konfigurieren " angezeigt wird, wählen Sie Python-Paket aus, um ein Python-Paket zu erstellen, das auf mehreren Python-Versionen getestet werden soll.
Wenn Ihre neue Pipeline angezeigt wird, schauen Sie sich die YAML an, um zu sehen, was sie tut. Wenn Sie so weit sind, wählen Sie Speichern und ausführen aus.
Sie werden aufgefordert, eine neue Azure-pipelines.yml-Datei in Ihr Repository zu übernehmen. Nachdem Sie mit der Nachricht zufrieden sind, wählen Sie "Speichern" aus, und führen Sie sie erneut aus .
Wenn Sie Ihre Pipeline in Aktion überwachen möchten, wählen Sie den Buildauftrag aus.
Sie haben gerade eine Pipeline ausgeführt, die wir automatisch für Sie erstellt haben, da Ihr Code eine gute Übereinstimmung für die Python-Paketvorlage darstellt.
Sie haben jetzt eine funktionierende YAML-Pipeline (
azure-pipelines.yml
) in Ihrem Repository, die sie anpassen können!Wenn Sie bereit sind, Änderungen an Ihrer Pipeline vorzunehmen, wählen Sie sie auf der Seite Pipelines aus, und bearbeiten Sie dann die
azure-pipelines.yml
Datei.
Lesen Sie weiter, um einige der gängigeren Methoden zum Anpassen Ihrer Pipeline zu erfahren.
YAML
- Fügen Sie eine
azure-pipelines.yml
Datei in Ihrem Repository hinzu. Passen Sie diesen Codeausschnitt für Ihren Build an.
trigger:
- master
pool: Default
steps:
- script: python -m pip install --upgrade pip
displayName: 'Install dependencies'
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Erstellen Sie eine Pipeline (wenn Sie nicht wissen, wie Sie ihre erste Pipeline erstellen) und wählen Sie YAML für die Vorlage aus.
Legen Sie den Agentpool und den YAML-Dateipfad für Ihre Pipeline fest.
Speichern Sie die Pipeline, und stellen Sie einen Build in die Warteschlange. Wenn die Meldung "Build #nnnnnnnn.n" in die Warteschlange gestellt wurde , wählen Sie den Nummernlink aus, um die Pipeline in Aktion anzuzeigen.
Wenn Sie bereit sind, Änderungen an Ihrer Pipeline vorzunehmen, bearbeiten Sie sie.
Lesen Sie weiter, um einige der gängigeren Methoden zum Anpassen Ihrer Pipeline zu erfahren.
Buildumgebung
Sie müssen nichts für Azure Pipelines einrichten, um Python-Projekte zu erstellen. Python wird auf von Microsoft gehosteten Build-Agents für Linux, macOS oder Windows vorinstalliert. Informationen dazu, welche Python-Versionen vorinstalliert sind, finden Sie unter Verwenden eines von Microsoft gehosteten Agents.
Verwenden einer bestimmten Python-Version
Um eine bestimmte Version von Python in Ihrer Pipeline zu verwenden, fügen Sie die Aufgabe "Python-Version verwenden" zu azure-pipelines.yml hinzu. Dieser Codeausschnitt legt die Pipeline so fest, dass Python 3.6 verwendet wird:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.6'
Verwenden mehrerer Python-Versionen
Um eine Pipeline mit mehreren Python-Versionen auszuführen, z. B. zum Testen eines Pakets mit diesen Versionen, definieren Sie eine job
mit einer matrix
Python-Version. Legen Sie dann die UsePythonVersion
Aufgabe fest, um auf die matrix
Variable zu verweisen.
jobs:
- job: 'Test'
pool:
vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-latest'
strategy:
matrix:
Python27:
python.version: '2.7'
Python35:
python.version: '3.5'
Python36:
python.version: '3.6'
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 sollen.
Ausführen von Python-Skripts
Wenn Sie Python-Skripts in 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 Inline-Python-Skripts mit der Python-Skriptaufgabe ausfü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 Ausführungsprozess zu übergeben. Sie können die Argumente mithilfe 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
. Diese YAML installiert oder aktualisiert pip
z. B. die und wheel
die setuptools
Pakete.
- 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.txtzu installieren:
- 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
Verwenden Sie diese YAML, um Linttests zu installieren oder zu aktualisieren flake8
und zu verwenden:
- script: |
python -m pip install flake8
flake8 .
displayName: 'Run lint tests'
Testen mit Pytest und Sammeln von Abdeckungsmetriken mit pytest-cov
Verwenden Sie dieses YAML zum Installieren pytest
und pytest-cov
Ausführen von Tests, Ausgabetestergebnissen im JUnit-Format und zur Ausgabecodeabdeckung in 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 können 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 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:
Python27:
python.version: '2.7'
Python35:
python.version: '3.5'
Python36:
python.version: '3.6'
Python37:
python.version: '3.7'
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 Codeabdeckungsergebnissen
Fügen Sie die Aufgabe "Codeabdeckungsergebnisse veröffentlichen" hinzu, um Codeabdeckungsergebnisse auf dem Server zu veröffentlichen. Sie können Abdeckungsmetriken in der Buildzusammenfassung sehen und HTML-Berichte zur weiteren Analyse herunterladen.
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
Packen und Übermitteln von Code
Zum Authentifizieren mit twine
, verwenden Sie die Twine Authentication-Aufgabe , um Authentifizierungsanmeldeinformationen in der PYPIRC_PATH
Umgebungsvariable 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 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 auch Azure Pipelines verwenden, um ein Image für Ihre Python-App zu erstellen und an eine Containerregistrierung zu übertragen.
Verwandte Erweiterungen
- Azure DevOps Plug-In für PyCharm (IntelliJ) (Microsoft)
- Python in Visual Studio Code (Microsoft)