Compilación de aplicaciones de Python
Azure Pipelines
Puede usar Azure Pipelines para compilar, probar e implementar aplicaciones y scripts de Python como parte del sistema de CI/CD. Este artículo se centra en la creación de una canalización sencilla.
Si desea un tutorial completo, consulte Uso de CI/CDpara implementar una aplicación web de Python para Azure App Service en Linux .
Para crear y activar un entorno de Anaconda e instalar paquetes de Anaconda con , consulte Ejecución de canalizaciones condaconda
Cree su primera canalización
¿No está Azure Pipelines? Si es así, se recomienda probar esta sección antes de pasar a otras secciones.
Obtención del código
Importe este repositorio en el repositorio de Git en Azure DevOps Server 2019:
Importe este repositorio en el repositorio de Git:
https://github.com/Microsoft/python-sample-vscode-flask-tutorial
Inicio de sesión en Azure Pipelines
Inicie sesión en Azure Pipelines. Una vez que haya iniciado sesión, el explorador accederá a https://dev.azure.com/my-organization-name y aparecerá el panel de Azure DevOps.
En la organización seleccionada, cree un proyecto. Si no tiene ningún proyecto en la organización, aparecerá la pantalla Cree un proyecto para empezar. De lo contrario, seleccione el botón Crear proyecto en la esquina superior derecha del panel.
Creación de la canalización
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Vaya a Pipelinesy, a continuación, seleccione Nueva canalización.
Siga los pasos del asistente y seleccione primero GitHub como ubicación del código fuente.
Puede que se le redirija a GitHub para iniciar sesión. Si es así, escriba sus credenciales de GitHub.
Cuando aparezca la lista de repositorios, seleccione el que corresponda.
Es posible que se le redirija a GitHub para instalar la aplicación Azure Pipelines. Si es así, seleccione Aprobar instalación.
Cuando aparezca la pestaña Configurar, seleccione Paquete de Python. Esto creará un paquete de Python para probar en varias versiones de Python.
Cuando aparezca la nueva canalización, echa un vistazo a YAML para ver lo que hace. Cuando esté listo, seleccione Guardar y ejecute.

Se le pedirá que confirme un nuevo archivo azure-pipelines.yml en el repositorio. Una vez satisfecho con el mensaje, seleccione Guardar y ejecutar de nuevo.
Si desea ver la canalización en acción, seleccione el trabajo de compilación.
Acaba de crear y ejecutó una canalización que creamos automáticamente, porque el código parece ser una buena coincidencia para la plantilla de paquete de Python.
Ahora tiene una canalización YAML en funcionamiento ( ) en el repositorio que está lista
azure-pipelines.ymlpara personalizar.Cuando esté listo para realizar cambios en la canalización, selecciónelo en la Pipelines y, a continuación, edite el archivo.
Consulte las secciones siguientes para obtener información sobre algunas de las formas más comunes de personalizar la canalización.
YAML
- Agregue un
azure-pipelines.ymlarchivo en el repositorio. Personalice este fragmento de código para la compilación.
trigger:
- master
pool: Default
steps:
- script: python -m pip install --upgrade pip
displayName: 'Install dependencies'
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Cree una canalización (si no sabe cómo, consulte Creación de la primera canalización)y, para la plantilla, seleccione YAML.
Establezca el grupo de agentes y la ruta de acceso del archivo YAML para la canalización.
Guarde la canalización y poner en cola una compilación. Cuando aparezca el mensaje Build #nnnnnnnn.n has been queued (Compilar #nnnnnnnn.n se ha puesto en cola), seleccione el vínculo de número para ver la canalización en acción.
Cuando esté listo para realizar cambios en la canalización, edite.
Consulte las secciones siguientes para obtener información sobre algunas de las formas más comunes de personalizar la canalización.
Entorno de compilación
No tiene que configurar nada para que Azure Pipelines proyectos de Python. Python está preinstalado en agentes de compilación hospedados por Microsoft para Linux, macOS o Windows. Para ver qué versiones de Python están preinstaladas, consulte Uso de un agente hospedado por Microsoft.
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 usar Python 3.6:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.6'
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 con job un de las versiones de matrix Python. A continuación, UsePythonVersion establezca la tarea para hacer referencia a la variable matrix .
jobs:
- job: 'Test'
pool:
vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-latest'
strategy:
matrix:
Python27:
python.version: '2.7'
Python35:
python.version: '3.5'
Python36:
python.version: '3.6'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
Puede agregar tareas para ejecutar 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 script elemento y especifique un nombre de archivo. Por ejemplo:
- script: python src/example.py
También puede ejecutar scripts de Python en línea con la tarea Script de Python:
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
Para parametrizar la ejecución de scripts, use PythonScript la tarea con valores para pasar arguments argumentos al proceso en ejecución. Puede usar sys.argv o la biblioteca más sofisticada para analizar los argparse 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 YAML instala o actualiza pip y los setuptools paquetes y wheel .
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Requisitos de instalación
Después de actualizar pip y a los amigos, un paso siguiente típico es instalar dependencias desde pip:
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Ejecución de las pruebas
Puede usar scripts para instalar y ejecutar varias pruebas en la canalización.
Ejecución de pruebas de 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 YAML para instalar y , ejecutar pruebas, resultados de pruebas de salida en formato JUnit y resultados de cobertura de código de salida pytestpytest-cov 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 ejecutar trabajos de prueba de Tox paralelos para dividir el trabajo. En un equipo de desarrollo, tiene que ejecutar los entornos de prueba en serie. En este ejemplo tox -e py se usa para ejecutar cualquier versión de Python activa para el trabajo actual.
- job:
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
Python27:
python.version: '2.7'
Python35:
python.version: '3.5'
Python36:
python.version: '3.6'
Python37:
python.version: '3.7'
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 resultados de pruebas
Agregue la tarea Publicar Resultados de pruebas para publicar los resultados de pruebas de 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'
Empaquetar y entregar código
Para autenticarse con twine , use la tarea twine para almacenar las credenciales de autenticación en la PYPIRC_PATH variable de 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 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 crear una imagen para la aplicación de Python e insertarla en un registro de contenedor.
Extensiones relacionadas
- PyLint Checker (Darren Fuller)
- Prueba de Python (Darren Fuller)
- Azure DevOps complemento para PyCharm (IntelliJ) (Microsoft)
- Python en Visual Studio Code (Microsoft)