Sdílet prostřednictvím


Přizpůsobení kanálů Pythonu

Tento článek popisuje, jak přizpůsobit sestavování, testování, balení a doručování aplikací a kódu Pythonu ve službě Azure Pipelines. Pokud chcete vytvořit první kanál pomocí Pythonu, prohlédněte si rychlý start k Pythonu.

S agenty hostovanými Microsoftem ve službě Azure Pipelines můžete vytvářet aplikace v Pythonu, aniž byste museli nastavovat vlastní infrastrukturu. Nástroje, které běžně používáte k vytváření, testování a spouštění aplikací Pythonu, včetně pip, jsou předinstalované.

Možná budete muset požádat o bezplatné udělení paralelních úloh nebo zakoupit paralelní úlohu ke spuštění kanálů.

K vytváření aplikací v Pythonu pomocí Azure Pipelines potřebujete agenta v místním prostředí s nainstalovaným Pythonem. Pokud chcete nainstalovat Python do svého agenta, přečtěte si téma UsePythonVersion.

Použití konkrétní verze Pythonu

Pokud chcete ve svém kanálu použít konkrétní verzi Pythonu, přidejte k azure-pipelines.yml úlohu Použít verzi Pythonu. Následující příklad definice kanálu YAML nastaví kanál tak, aby používal Python 3.11.

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

Použití více verzí Pythonu

Pokud chcete spustit kanál s více verzemi Pythonu, například otestovat balíček s těmito verzemi, definujte job balíček s verzemi matrix Pythonu. Pak nastavte UsePythonVersion úkol tak, aby odkaz na proměnnou matrix . Příklad:

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

V matici můžete přidat úlohy, které používají každou verzi Pythonu.

Spouštění skriptů Pythonu

Pokud chcete spustit skripty Pythonu z úložiště, použijte script element a zadejte název souboru. Příklad:

- script: python src/example.py

Pomocí úlohy skriptu Pythonu můžete také spouštět vložené skripty Pythonu.

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

Pokud chcete parametrizovat provádění skriptu, použijte PythonScript úlohu s arguments hodnotami k předání argumentů do spuštěného procesu. K analýze argumentů můžete použít sys.argv nebo propracovanější argparse knihovnu.

- 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

Instalace závislostí

Pomocí skriptů můžete nainstalovat konkrétní balíčky PyPI s pip. Následující příklad nainstaluje nebo upgraduje pip a setuptools wheel balíčky.

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

Požadavky na instalaci

Po aktualizaci pip a přátel je typickým dalším krokem instalace závislostí z requirements.txt.

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

Spouštění testů

Skripty můžete použít k instalaci a spuštění různých testů v kanálu.

Spouštění testů lint s využitím flake8

Následující kód YAML nainstaluje nebo upgraduje flake8 a používá ho ke spuštění testů lint.

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

Testování s využitím pytestu a shromažďování metrik pokrytí pomocí pytest-cov

Následující kód YAML nainstaluje pytest a pytest-cov spustí testy, výstupem výsledků testů ve formátu JUnit a výstupem výsledků pokrytí kódu ve formátu Cobertura XML.

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

Spouštění testů pomocí toxu

Azure Pipelines může spouštět paralelní testovací úlohy Tox, aby se práce rozdělila. Na vývojovém počítači musíte spustit testovací prostředí v řadě. Následující příklad používá tox -e py ke spuštění toho, která verze Pythonu je pro aktuální úlohu aktivní.

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

Publikování výsledků testu

Přidejte úlohu Publikovat výsledky testu pro publikování výsledků testu JUnit nebo xUnit na server.

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

Publikování výsledků pokrytí kódu

Přidejte úlohu Publikování výsledků pokrytí kódu pro publikování výsledků pokrytí kódu na server. Metriky pokrytí můžete zobrazit v souhrnu sestavení a stáhnout sestavy HTML pro další analýzu.

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

Zabalení a doručení kódu

Pokud se chcete ověřit pomocí twinepříkazu , pomocí úlohy ověření nahrání dvojčete Pythonu uložte přihlašovací údaje pro ověřování do PYPIRC_PATH proměnné prostředí.

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

Pak přidejte vlastní skript , který se používá twine k publikování balíčků.

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

Azure Pipelines můžete také použít k vytvoření image pro vaši aplikaci v Pythonu a jeho nasdílení do registru kontejneru.