Udostępnij za pośrednictwem


Dostosowywanie potoków języka Python

W tym artykule opisano sposób dostosowywania tworzenia, testowania, pakowania i dostarczania aplikacji i kodu języka Python w usłudze Azure Pipelines. Aby utworzyć pierwszy potok przy użyciu języka Python, zobacz przewodnik Szybki start dla języka Python.

Za pomocą agentów hostowanych przez firmę Microsoft w usłudze Azure Pipelines możesz tworzyć aplikacje języka Python bez konieczności konfigurowania własnej infrastruktury. Narzędzia, których często używasz do kompilowania, testowania i uruchamiania aplikacji języka Python, w tym pip, są wstępnie zainstalowane.

Może być konieczne zażądanie bezpłatnego udzielenia zadań równoległych lub zakup zadania równoległego w celu uruchomienia potoków.

Aby tworzyć aplikacje języka Python przy użyciu usługi Azure Pipelines, potrzebny jest własny agent z zainstalowanym językiem Python. Aby zainstalować język Python na agencie, zobacz UsePythonVersion.

Korzystanie z określonej wersji języka Python

Aby użyć określonej wersji języka Python w potoku, dodaj zadanie Użyj wersji języka Python, aby azure-pipelines.yml. W poniższym przykładzie definicja potoku YAML ustawia potok do używania języka Python 3.11.

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

Korzystanie z wielu wersji języka Python

Aby uruchomić potok z wieloma wersjami języka Python, na przykład w celu przetestowania pakietu względem tych wersji, zdefiniuj job element z matrix wersjami języka Python. Następnie ustaw zadanie, UsePythonVersion aby odwoływać się do zmiennej matrix . Na przykład:

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

Zadania korzystające z każdej wersji języka Python można dodawać w macierzy.

Uruchamianie skryptów języka Python

Aby uruchomić skrypty języka Python z repozytorium, użyj script elementu i określ nazwę pliku. Na przykład:

- script: python src/example.py

Możesz również użyć zadania skryptu języka Python do uruchamiania wbudowanych skryptów języka Python.

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

Aby sparametryzować wykonywanie skryptu, użyj PythonScript zadania z wartościami arguments , aby przekazać argumenty do uruchomionego procesu. Aby przeanalizować argumenty, można użyć sys.argv lub bardziej zaawansowanej argparse biblioteki.

- 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

Instalowanie zależności

Skrypty umożliwiają zainstalowanie określonych pakietów PyPI za pomocą polecenia pip. Poniższy przykład instaluje lub uaktualnia pip setuptools pakiety i .wheel

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

Wymagania dotyczące instalacji

Po zaktualizowaniu pip i przyjaciołom typowym następnym krokiem jest zainstalowanie zależności z requirements.txt.

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

Uruchom testy

Skrypty umożliwiają instalowanie i uruchamianie różnych testów w potoku.

Uruchamianie testów lint za pomocą flake8

Poniższy kod YAML instaluje lub uaktualnia flake8 i używa go do uruchamiania testów lint.

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

Testowanie za pomocą narzędzia pytest i zbieranie metryk pokrycia za pomocą narzędzia pytest-cov

Poniższy kod YAML instaluje pytest i pytest-cov uruchamia testy, wyprowadzając wyniki testu w formacie JUnit i wyświetlając wyniki pokrycia kodu w formacie 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'

Uruchamianie testów za pomocą narzędzia Tox

Usługa Azure Pipelines może uruchamiać równoległe zadania testowe tox, aby podzielić pracę. Na komputerze programistycznym należy uruchomić środowiska testowe w serii. W poniższym przykładzie użyto tox -e py polecenia , aby uruchomić dowolną wersję języka Python, która jest aktywna dla bieżącego zadania.

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

Publikowanie wyników testu

Dodaj zadanie Publikuj wyniki testu, aby opublikować wyniki testów JUnit lub xUnit na serwerze.

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

Publikowanie wyników pokrycia kodu

Dodaj zadanie Publikowanie wyników pokrycia kodu, aby opublikować wyniki pokrycia kodu na serwerze. Metryki pokrycia można wyświetlić w podsumowaniu kompilacji i pobrać raporty HTML w celu dalszej analizy.

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

Pakowanie i dostarczanie kodu

Aby uwierzytelnić się twinew programie , użyj zadania uwierzytelniania przekazywania bliźniaczej reprezentacji języka Python w celu przechowywania poświadczeń uwierzytelniania w zmiennej środowiskowej PYPIRC_PATH .

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

Następnie dodaj skrypt niestandardowy używany twine do publikowania pakietów.

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

Za pomocą usługi Azure Pipelines można również utworzyć obraz dla aplikacji w języku Python i wypchnąć go do rejestru kontenerów.