Personalización de canalizaciones de Python
En este artículo se describe cómo personalizar la compilación, las pruebas, el empaquetado y la entrega de aplicaciones y código de Python en Azure Pipelines. Para crear la primera canalización con Python, consulte el inicio rápido de Python.
Con los agentes hospedados por Microsoft en Azure Pipelines, puede compilar sus aplicaciones de Python sin tener que configurar su propia infraestructura. Las herramientas que se usan normalmente para compilar, probar y ejecutar aplicaciones de Python, incluidas pip
, están preinstaladas.
Es posible que tenga que solicitar la concesión gratuita de trabajos paralelos o comprar un trabajo paralelo para ejecutar las canalizaciones.
Para compilar aplicaciones de Python con Azure Pipelines, necesita un agente autohospedado con Python instalado. Para instalar Python en el agente, consulte UsePythonVersion.
Uso de una versión específica de Python
Para usar una versión específica de Python en la canalización, agregue la tarea Usar versión de Python para azure-pipelines.yml. En el ejemplo siguiente, la definición de canalización YAML establece la canalización para usar Python 3.11.
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.11'
Uso de varias versiones de Python
Para ejecutar una canalización con varias versiones de Python, por ejemplo para probar un paquete con esas versiones, defina un job
con una matrix
de las versiones de Python. A continuación, establezca la tarea UsePythonVersion
para que haga referencia a la variable matrix
. Por ejemplo:
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)'
Puede agregar tareas que usen cada versión de Python en la matriz.
Ejecución de scripts de Python
Para ejecutar scripts de Python desde el repositorio, use un script
elemento y especifique un nombre de archivo. Por ejemplo:
- script: python src/example.py
También puede usar la tarea de script de Python para ejecutar scripts de Python insertados.
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
Para parametrizar la ejecución del script, use la PythonScript
tarea con arguments
valores para pasar argumentos al proceso en ejecución. Puede usar sys.argv
o la biblioteca más sofisticada argparse
para analizar los argumentos.
- 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
Instalar dependencias
Puede usar scripts para instalar paquetes PyPI específicos con pip
. En el ejemplo siguiente se instalan o actualizan pip
y los setuptools
paquetes y wheel
.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Instalación de requisitos
Después de actualizar pip
y amigos, un paso siguiente típico es instalar dependencias desde requirements.txt.
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Ejecutar pruebas
Puede usar scripts para instalar y ejecutar varias pruebas en la canalización.
Ejecución de pruebas lint con flake8
El código YAML siguiente instala o actualiza flake8
y lo usa para ejecutar pruebas lint.
- script: |
python -m pip install flake8
flake8 .
displayName: 'Run lint tests'
Prueba con pytest y recopilación de métricas de cobertura con pytest-cov
El siguiente código YAML instala pytest
y pytest-cov
ejecuta pruebas, lo que genera resultados de pruebas en formato JUnit y la cobertura de código de salida da como resultado 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'
Ejecución de pruebas con Tox
Azure Pipelines puede ejecutar trabajos de prueba de Tox en paralelo para dividir el trabajo. En un equipo de desarrollo, debe ejecutar los entornos de prueba en serie. En el ejemplo siguiente se usa tox -e py
para ejecutar la versión de Python activa para el trabajo actual.
- 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'
Publicación de los resultados de las pruebas
Agregue la tarea Publicar resultados de pruebas para publicar resultados de pruebas JUnit o xUnit en el servidor.
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for Python $(python.version)'
Publicación de resultados de cobertura de código
Agregue la tarea Publicar resultados de cobertura de código para publicar los resultados de cobertura de código en el servidor. Puede ver las métricas de cobertura en el resumen de compilación y descargar informes HTML para su posterior análisis.
- task: PublishCodeCoverageResults@2
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
Empaquetado y entrega de código
Para autenticarse con twine
, use la tarea de autenticación de carga de Python twine para almacenar las credenciales de autenticación en la variable de PYPIRC_PATH
entorno.
- task: TwineAuthenticate@0
inputs:
artifactFeed: '<Azure Artifacts feed name>'
pythonUploadServiceConnection: '<twine service connection from external organization>'
A continuación, agregue un script personalizado que use twine
para publicar los paquetes.
- script: |
twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>
También puede usar Azure Pipelines para compilar una imagen para la aplicación de Python e insertarla en un registro de contenedor.