Personalización de Python para Azure Pipelines
Puede usar Azure Pipelines para compilar las aplicaciones de Python sin tener que configurar ninguna infraestructura propia. Las herramientas que se usan normalmente para compilar, probar y ejecutar aplicaciones Python, como pip, se instalan previamente en agentes hospedados por Microsoft en Azure Pipelines.
Para crear la primera canalización con Python, consulte el inicio rápido de Python.
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 a azure-pipelines.yml. Este fragmento de código establece la canalización para que use 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
.
jobs:
- job: 'Test'
pool:
vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-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 para que se ejecuten con cada versión de Python en la matriz.
Ejecución de scripts de Python
Para ejecutar scripts de Python en el repositorio, use un elemento script
y especifique un nombre de archivo. Por ejemplo:
- script: python src/example.py
También puede ejecutar scripts de Python alineados con la tarea Script de Python:
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
Si desea parametrizar la ejecución del script, use la tarea PythonScript
con los valores arguments
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
. Por ejemplo, este archivo YAML instala o actualiza pip
y los paquetes setuptools
y wheel
.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Instalación de requisitos
Después de actualizar pip
, el paso siguiente típico consiste en instalar las dependencias de requirements.txt:
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Ejecución de las pruebas
Use scripts para instalar y ejecutar varias pruebas en la canalización.
Ejecución de pruebas lint con flake8
Para instalar o actualizar flake8
y usarlo para ejecutar pruebas lint, use este código YAML:
- 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
Use este código YAML para instalar pytest
y pytest-cov
, ejecutar pruebas, obtener resultados de pruebas en formato JUnit y obtener resultados de cobertura de código en formato 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 este ejemplo, se usa tox -e py
para ejecutar la versión de Python que esté 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@1
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
Empaquetado y entrega de código
Para autenticarse con twine
, use la tarea Autenticación de Twine para almacenar las credenciales de autenticación en la variable de entorno PYPIRC_PATH
.
- task: TwineAuthenticate@0
inputs:
artifactFeed: '<Azure Artifacts feed name>'
pythonUploadServiceConnection: '<twine service connection from external organization>'
A continuación, agregue un script personalizado que usa 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.
Extensiones relacionadas
- Complemento de Azure DevOps para PyCharm (IntelliJ) (Microsoft)
- Python en Visual Studio Code (Microsoft)
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de