Anpassa Python-pipelines
Den här artikeln beskriver hur du anpassar skapande, testning, paketering och leverans av Python-appar och -kod i Azure Pipelines. Information om hur du skapar din första pipeline med Python finns i Python-snabbstarten.
Med Microsoft-värdbaserade agenter i Azure Pipelines kan du skapa dina Python-appar utan att behöva konfigurera din egen infrastruktur. Verktyg som du ofta använder för att skapa, testa och köra Python-appar, inklusive pip
, är förinstallerade.
Du kan behöva begära kostnadsfri beviljande av parallella jobb eller köpa ett parallellt jobb för att köra dina pipelines.
Om du vill skapa Python-appar med Azure Pipelines behöver du en lokalt installerad agent med Python installerat. Information om hur du installerar Python på din agent finns i UsePythonVersion.
Använda en specifik Python-version
Om du vill använda en specifik version av Python i din pipeline lägger du till uppgiften Använd Python-version i azure-pipelines.yml. I följande exempel anger YAML-pipelinedefinitionen att pipelinen ska använda Python 3.11.
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.11'
Använda flera Python-versioner
Om du vill köra en pipeline med flera Python-versioner, till exempel för att testa ett paket mot dessa versioner, definierar du en job
med en matrix
av Python-versioner. Ange UsePythonVersion
sedan uppgiften för att referera till variabeln matrix
. Till exempel:
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)'
Du kan lägga till uppgifter som använder varje Python-version i matrisen.
Kör Python-skript
Om du vill köra Python-skript från lagringsplatsen använder du ett script
element och anger ett filnamn. Till exempel:
- script: python src/example.py
Du kan också använda Python-skriptaktiviteten för att köra infogade Python-skript.
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
Om du vill parametrisera skriptkörning använder du PythonScript
uppgiften med arguments
värden för att skicka argument till den process som körs. Du kan använda sys.argv
eller det mer avancerade argparse
biblioteket för att parsa argumenten.
- 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
Installera beroenden
Du kan använda skript för att installera specifika PyPI-paket med pip
. I följande exempel installeras eller uppgraderas pip
och paketen setuptools
och wheel
.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Installationskrav
När du har uppdaterat pip
och vänner är ett vanligt nästa steg att installera beroenden från requirements.txt.
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Köra tester
Du kan använda skript för att installera och köra olika tester i pipelinen.
Kör linttester med flake8
Följande YAML-kod installerar eller uppgraderar flake8
och använder den för att köra linttester.
- script: |
python -m pip install flake8
flake8 .
displayName: 'Run lint tests'
Testa med pytest och samla in täckningsmått med pytest-cov
Följande YAML-kod installerar pytest
och pytest-cov
kör tester, utdata från testresultat i JUnit-format och utdata för kodtäckning resulterar i 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'
Köra tester med Tox
Azure Pipelines kan köra parallella Tox-testjobb för att dela upp arbetet. På en utvecklingsdator måste du köra testmiljöerna i serie. I följande exempel används tox -e py
för att köra den version av Python som är aktiv för det aktuella jobbet.
- 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'
Publicera testresultat
Lägg till uppgiften Publicera testresultat för att publicera JUnit- eller xUnit-testresultat på servern.
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for Python $(python.version)'
Publicera resultat för kodtäckning
Lägg till aktiviteten Publicera kodtäckningsresultat för att publicera kodtäckningsresultat till servern. Du kan se täckningsmått i byggsammanfattningen och ladda ned HTML-rapporter för ytterligare analys.
- task: PublishCodeCoverageResults@2
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
Paketera och leverera kod
Om du vill autentisera med twine
använder du python-twine-uppladdningsuppgiften för att lagra autentiseringsuppgifter i PYPIRC_PATH
miljövariabeln.
- task: TwineAuthenticate@0
inputs:
artifactFeed: '<Azure Artifacts feed name>'
pythonUploadServiceConnection: '<twine service connection from external organization>'
Lägg sedan till ett anpassat skript som använder twine
för att publicera dina paket.
- script: |
twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>
Du kan också använda Azure Pipelines för att skapa en avbildning för din Python-app och skicka den till ett containerregister.