Python voor Azure-pijplijnen aanpassen

U kunt Azure Pipelines gebruiken om uw Python-apps te bouwen zonder dat u zelf een infrastructuur hoeft in te stellen. Hulpprogramma's die u vaak gebruikt voor het bouwen, testen en uitvoeren van Python-apps, zoals pip, worden vooraf geïnstalleerd op door Microsoft gehoste agents in Azure Pipelines.

Als u uw eerste pijplijn wilt maken met Python, raadpleegt u de Python-quickstart.

Een specifieke Python-versie gebruiken

Als u een specifieke versie van Python in uw pijplijn wilt gebruiken, voegt u de taak Python-versie gebruiken toe aan azure-pipelines.yml. Met dit fragment stelt u de pijplijn in voor het gebruik van Python 3.11:

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.11'

Meerdere Python-versies gebruiken

Als u een pijplijn met meerdere Python-versies wilt uitvoeren, bijvoorbeeld om een pakket te testen op basis van deze versies, definieert u een job met een matrix van Python-versies. Stel vervolgens de UsePythonVersion taak in om te verwijzen naar de matrix variabele.

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)'

U kunt taken toevoegen om uit te voeren met behulp van elke Python-versie in de matrix.

Python-scripts uitvoeren

Als u Python-scripts wilt uitvoeren in uw opslagplaats, gebruikt u een script -element en geeft u een bestandsnaam op. Bijvoorbeeld:

- script: python src/example.py

U kunt ook inline Python-scripts uitvoeren met de python-scripttaak:

- task: PythonScript@0
  inputs:
    scriptSource: 'inline'
    script: |
      print('Hello world 1')
      print('Hello world 2')

Als u de uitvoering van scripts wilt parameteriseren, gebruikt u de PythonScript taak met arguments waarden om argumenten door te geven aan het uitvoeringsproces. U kunt of de meer geavanceerde argparse bibliotheek gebruiken sys.argv om de argumenten te parseren.

- 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

Afhankelijkheden installeren

U kunt scripts gebruiken om specifieke PyPI-pakketten te installeren met pip. Met deze YAML worden bijvoorbeeld de setuptools pakketten en en wheel geïnstalleerd of bijgewerktpip.

- script: python -m pip install --upgrade pip setuptools wheel
  displayName: 'Install tools'

Installatievereisten

Nadat u en vrienden hebt bijgewerkt pip , is een typische volgende stap het installeren van afhankelijkheden van requirements.txt:

- script: pip install -r requirements.txt
  displayName: 'Install requirements'

Tests uitvoeren

Gebruik scripts om verschillende tests in uw pijplijn te installeren en uit te voeren.

Linttests uitvoeren met vlok8

Als u deze wilt installeren of upgraden flake8 en gebruiken om linttests uit te voeren, gebruikt u deze YAML:

- script: |
    python -m pip install flake8
    flake8 .
  displayName: 'Run lint tests'

Testen met pytest en metrische dekkingsgegevens verzamelen met pytest-cov

Gebruik deze YAML om en te installeren pytest , pytest-covtests uit te voeren, testresultaten uit te voeren in JUnit-indeling en uitvoercodedekkingsresultaten in Cobertura XML-indeling:

- script: |
    pip install pytest pytest-azurepipelines
    pip install pytest-cov
    pytest --doctest-modules --junitxml=junit/test-results.xml --cov=. --cov-report=xml
  displayName: 'pytest'

Tests uitvoeren met Tox

Azure Pipelines kan parallelle Tox-testtaken uitvoeren om het werk op te splitsen. Op een ontwikkelcomputer moet u uw testomgevingen in serie uitvoeren. In dit voorbeeld wordt gebruikt tox -e py om de versie van Python uit te voeren die actief is voor de huidige taak.

- 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'

Testresultaten publiceren

Voeg de taak Testresultaten publiceren toe om JUnit- of xUnit-testresultaten naar de server te publiceren:

- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testResultsFiles: '**/test-*.xml'
    testRunTitle: 'Publish test results for Python $(python.version)'

Resultaten van codedekking publiceren

Voeg de taak Resultaten van codedekking publiceren toe om resultaten van codedekking op de server te publiceren. U kunt metrische dekkingsgegevens bekijken in het buildoverzicht en HTML-rapporten downloaden voor verdere analyse.

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'

Code verpakken en bezorgen

Als u wilt verifiëren met twine, gebruikt u de taak Twine Authenticate om verificatiereferenties op te slaan in de PYPIRC_PATH omgevingsvariabele.

- task: TwineAuthenticate@0
  inputs:
    artifactFeed: '<Azure Artifacts feed name>'
    pythonUploadServiceConnection: '<twine service connection from external organization>'

Voeg vervolgens een aangepast script toe dat wordt gebruikt twine om uw pakketten te publiceren.

- script: |
   twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>

U kunt ook Azure Pipelines gebruiken om een installatiekopieën voor uw Python-app te bouwen en deze naar een containerregister te pushen.