Recomendaciones para usar la integración continua
Se aplica a esta recomendación de lista de comprobación de excelencia operativa del marco de trabajo bien diseñado de Azure:
OE:04 | Optimice los procesos de desarrollo de software y control de calidad mediante procedimientos aprobados del sector para desarrollo y pruebas. Para una designación clara de roles, normalice las prácticas entre componentes, como herramientas, control de código fuente, patrones de diseño de aplicaciones, documentación y guías de estilo. |
---|
Guía relacionada: Mejorar la velocidad | de compilación Estandarizar herramientas y procesos
A medida que el código se desarrolla, se actualiza o incluso se quita, disponer de un método intuitivo y seguro para integrar estos cambios en la rama principal del código permite a los desarrolladores aportar valor.
Como desarrollador, puede realizar pequeños cambios en el código, insertar estos cambios en un repositorio de código y obtener comentarios casi instantáneos sobre la calidad, la cobertura de pruebas y los errores introducidos. Este proceso le permite trabajar más rápido y con más confianza y menos riesgo.
La integración continua (CI) es una práctica en la que se integran los sistemas de control de código fuente y las canalizaciones de implementación de software para proporcionar mecanismos automatizados de compilación, prueba y comentarios para los equipos de desarrollo de software.
Estrategias de diseño principales
La integración continua es una práctica de desarrollo de software que los desarrolladores usan para integrar las actualizaciones de software en un sistema de control de código fuente en una cadencia regular.
El proceso de integración continua se inicia cuando un ingeniero crea una solicitud de incorporación de cambios de GitHub para indicar al sistema de CI que los cambios de código están listos para integrarse. Idealmente, el proceso de integración valida el código en varias líneas base y pruebas. A continuación, proporciona comentarios al ingeniero solicitante sobre el estado de estas pruebas.
Si las comprobaciones de línea de base y las pruebas van bien, el proceso de integración genera y almacena en fases los recursos que implementarán el software actualizado. Estos recursos incluyen código compilado e imágenes de contenedor.
La integración continua puede ayudarle a ofrecer software de alta calidad más rápidamente mediante la realización de las siguientes acciones:
- Ejecute pruebas automatizadas en el código para proporcionar detección temprana de cambios importantes.
- Ejecutar análisis de código para garantizar los estándares, la calidad y la configuración del código.
- Ejecute comprobaciones de cumplimiento y seguridad para asegurarse de que el software no tiene vulnerabilidades conocidas.
- Ejecute pruebas funcionales o de aceptación para asegurarse de que el software funciona según lo previsto.
- Proporcione comentarios rápidos sobre los problemas detectados.
- Si procede, crear recursos o paquetes que se pueden implementar y que incluyen el código actualizado.
Automatización de la integración continua con canalizaciones
Para lograr la integración continua, use soluciones de software para administrar, integrar y automatizar el proceso. Una práctica habitual es usar una canalización de integración continua.
Una canalización de integración continua implica un fragmento de software (a menudo hospedado en la nube) que proporciona:
- Una plataforma para ejecutar pruebas automatizadas.
- Exámenes de cumplimiento.
- Generación de informes.
- Todos los demás componentes que componen el proceso de integración continua.
En la mayoría de los casos, el software de canalización se adjunta al control de código fuente de forma que, cuando se crean solicitudes de incorporación de cambios o el software se combina en una rama específica, se ejecuta la canalización de integración continua. La integración del control de código fuente también proporciona la oportunidad de proporcionar comentarios de CI directamente sobre las solicitudes de incorporación de cambios.
Muchas soluciones, como Azure Pipelines o Acciones de GitHub, proporcionan las funcionalidades de las canalizaciones de integración continua.
Integración de canalizaciones con control de código fuente
La integración de la canalización de integración continua con el sistema de control de código fuente es clave para permitir contribuciones rápidas y de autoservicio de código.
La canalización de CI se ejecuta en una solicitud de incorporación de cambios recién creada. La canalización incluye todas las pruebas, las evaluaciones de seguridad y otras comprobaciones. Los resultados de las pruebas de CI aparecen directamente en la solicitud de incorporación de cambios para permitir comentarios casi en tiempo real sobre la calidad.
Otra práctica popular es crear pequeños informes o distintivos que se pueden presentar en el control de código fuente para que los estados de compilación actuales sean visibles.
En la imagen siguiente se muestra la integración entre GitHub y una canalización de Azure DevOps. En este ejemplo, la creación de una solicitud de incorporación de cambios desencadena una canalización de Azure DevOps. El estado de la canalización aparece en la solicitud de incorporación de cambios.
Incorporación de pruebas automatizadas
Un elemento clave de la integración continua es la creación y prueba continuas de código a medida que los desarrolladores realizan contribuciones de código. Las pruebas de solicitudes de incorporación de cambios a medida que se crean proporcionan comentarios rápidos que la confirmación no ha introducido cambios importantes. La ventaja es que las pruebas de la canalización de integración continua pueden ser las mismas que se ejecutan durante el desarrollo controlado por pruebas.
En el fragmento de código siguiente se muestra un paso de prueba de una canalización de Azure DevOps. El paso tiene dos tareas:
- La primera tarea usa un conocido marco de pruebas de Python para ejecutar pruebas de CI. Estas pruebas residen en el control de código fuente junto con el código de Python. Los resultados de la prueba van a un archivo denominado test-results.xml.
- La segunda tarea consume los resultados de la prueba y los publica en la canalización de Azure DevOps como un informe integrado.
- script: |
pip3 install pytest
pytest azure-vote/azure-vote/tests/ --junitxml=junit/test-results.xml
continueOnError: true
- task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '**/test-results.xml'
failTaskOnFailedTests: true
testRunTitle: 'Python $(python.version)'
En la imagen siguiente se muestran los resultados de las pruebas que aparecen en el portal de Azure DevOps.
Pruebas no superadas
Las pruebas con errores deben bloquear temporalmente una implementación y llevar a un análisis más profundo de lo que ha ocurrido. Las pruebas con error también deben dar lugar a un refinamiento de las pruebas o a una mejora en el cambio que provocó que se produzcan errores en las pruebas.
Publicar el estado de compilación
Muchos desarrolladores muestran que su calidad de código es alta mostrando un distintivo de estado en su repositorio. En la imagen siguiente se muestra un distintivo de Azure Pipelines que se muestra en el archivo Léame para un proyecto de código abierto en GitHub.
Facilitación de Azure
Azure DevOps es una colección de servicios que le ayudan a crear una práctica de desarrollo colaborativa, eficaz y coherente.
Azure Pipelines proporciona servicios de compilación y versión para admitir la integración continua y la entrega continua (CI/CD) de las aplicaciones.
GitHub para Acciones para Azure permite la automatización de procesos de CI/CD. Se integra directamente con Azure para simplificar las implementaciones. Puede crear flujos de trabajo que compilen y prueben cada solicitud de incorporación de cambios en el repositorio o que implementen solicitudes de incorporación de cambios combinadas en producción.
Vínculos relacionados
Aprenda a crear una canalización de integración continua mediante GitHub o Azure DevOps:
Obtenga información sobre cómo mostrar distintivos en los repositorios:
- Adición de una notificación de estado de Azure Pipelines al repositorio
- Adición de un distintivo de estado de flujo de trabajo de GitHub al repositorio