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ę twine
w 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.