Megosztás a következőn keresztül:


Python-folyamatok testreszabása

Ez a cikk bemutatja, hogyan szabhatja testre a Python-alkalmazások és -kódok készítését, tesztelését, csomagolását és továbbítását az Azure Pipelinesban. Az első folyamat Pythonnal való létrehozásához tekintse meg a Python rövid útmutatóját.

A Microsoft által üzemeltetett Azure Pipelines-ügynökökkel anélkül hozhatja létre Python-alkalmazásait, hogy saját infrastruktúrát kellene beállítania. A Python-alkalmazások , többek között pipa pythonos alkalmazások létrehozásához, teszteléséhez és futtatásához gyakran használt eszközök előre telepítve vannak.

Előfordulhat, hogy a párhuzamos feladatok ingyenes megadását kell kérnie, vagy meg kell vásárolnia egy párhuzamos feladatot a folyamatok futtatásához.

Ha Python-alkalmazásokat szeretne létrehozni az Azure Pipelines használatával, szüksége van egy saját üzemeltetésű ügynökre , amelyen telepítve van a Python. Ha telepíteni szeretné a Pythont az ügynökén, olvassa el a UsePythonVersion című témakört.

Adott Python-verzió használata

Ha a Python egy adott verzióját szeretné használni a folyamatban, adja hozzá a Python-verzió használata feladatot a azure-pipelines.yml. Az alábbi példa YAML-folyamatdefiníció a python 3.11 használatára állítja be a folyamatot.

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

Több Python-verzió használata

Ha több Python-verziót tartalmazó folyamatot szeretne futtatni, például egy csomagot tesztelni ezeken a verziókon, definiáljon egy job Python-verziót matrix . Ezután állítsa be a UsePythonVersion feladatot a matrix változóra való hivatkozásra. Példa:

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

A mátrixban az egyes Python-verziót használó feladatokat is hozzáadhatja.

Python-szkriptek futtatása

Python-szkriptek adattárból való futtatásához használjon egy script elemet, és adjon meg egy fájlnevet. Példa:

- script: python src/example.py

A Python-szkriptfeladat használatával beágyazott Python-szkripteket is futtathat.

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

A szkript végrehajtásának paraméterezéséhez használja a PythonScript feladatot értékekkel arguments , hogy argumentumokat adjon át a futó folyamatnak. Az argumentumok elemzéséhez használhatja sys.argv vagy a kifinomultabb argparse kódtárat.

- 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

Függőségek telepítése

Szkriptek használatával telepíthet adott PyPI-csomagokat a következővel pip: . Az alábbi példa telepíti vagy frissíti a csomagokat pip és wheel a setuptools csomagokat.

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

Telepítési követelmények

A frissítés pip és a barátok frissítése után egy tipikus következő lépés a függőségek telepítése requirements.txt.

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

Tesztek futtatása

Szkriptekkel különböző teszteket telepíthet és futtathat a folyamatban.

Szösztesztek futtatása a flake8 használatával

A következő YAML-kód telepíti vagy frissíti flake8 , és lint tesztek futtatására használja.

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

Teszt pytesttel és lefedettségi metrikák gyűjtése pytest-cov használatával

Az alábbi YAML-kód telepíti és pytest-cov futtatja a teszteket, a teszteredményeket pytest JUnit formátumban adja ki, és a kódlefedettségi eredményeket Cobertura XML formátumban adja ki.

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

Tesztek futtatása a Tox használatával

Az Azure Pipelines párhuzamos Tox-tesztfeladatokat futtathat a munka felosztásához. Fejlesztői számítógépen sorozatban kell futtatnia a tesztkörnyezeteket. Az alábbi példa a Python bármelyik verziójának futtatását használja tox -e py az aktuális feladathoz.

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

Teszteredmények közzététele

Adja hozzá a Teszteredmények közzététele feladatot a JUnit vagy az xUnit teszteredmények kiszolgálón való közzétételéhez.

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

Kódlefedettségi eredmények közzététele

Adja hozzá a Kódlefedettségi eredmények közzététele feladatot a kódlefedettségi eredmények kiszolgálón való közzétételéhez. A lefedettségi metrikákat a build összegzésében tekintheti meg, és további elemzés céljából HTML-jelentéseket tölthet le.

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

Kód csomagolása és kézbesítése

A hitelesítéshez twinehasználja a Python twine upload authentication feladatot a hitelesítési hitelesítő adatok környezeti változóban való PYPIRC_PATH tárolásához.

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

Ezután adjon hozzá egy egyéni szkriptet , amely a csomagok közzétételére használja twine .

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

Az Azure Pipelines használatával is létrehozhat egy lemezképet a Python-alkalmazáshoz, és leküldheti azt egy tárolóregisztrációs adatbázisba.