La realización de análisis de código estático ahorra tiempo al descubrir problemas ocultos. PHPStan es una herramienta de análisis estático para PHP que le ayuda a aumentar la calidad de su base de código. A continuación, se explica cómo ejecutar PHPStan en sus canalizaciones de CI de GitLab.
Es bueno ejecutar PHPStan con regularidad a medida que desarrolla nuevas funciones. Usarlo localmente solo te lleva hasta cierto punto. Confíe en que los demás miembros de su equipo son tan disciplinados como usted. La integración del análisis estático en un flujo de trabajo de CI / CD garantiza que el código no se pueda fusionar si rompe la rama principal del proyecto.
Obtenga la instalación con PHPStan
CONTENIDOS DE LA PAGINA
Primero debe agregar PHPStan a su proyecto. Ya tenemos una guía detallada sobre la instalación y configuración de PHPStan, por lo que solo cubriremos los conceptos básicos aquí.
Primero, use Composer para instalar PHPStan:
composer require --dev phpstan/phpstan
Luego, crea un archivo básico phpstan.neon
archivo de configuración en su proyecto:
parameters: level: max paths: - src - tests tmpDir: .tmp
El directorio temporal se sobrescribe para ayudar con el almacenamiento en caché de GitLab CI, configurado a continuación.
Ahora puede ejecutar PHPStan localmente para verificar que su configuración funcione:
vendor/bin/phpstan analyse
En esta etapa, no importa si se pasan las pruebas.
Configuración de GitLab para CI
Asegúrese de haber enviado el código a un proyecto en su servidor de GitLab. Deberá verificar que la función Pipeline esté habilitada para su proyecto; si ve «CI / CD» en la barra lateral izquierda, está listo para comenzar.
Para habilitar el sistema de CI del proyecto, haga clic en el botón «Configuración» en la barra lateral. Expanda la sección «Visibilidad, características del proyecto, permisos» y habilite la función «Pipeline».
Si usa las solicitudes de combinación (MR) de GitLab de manera disciplinada, ahora puede configurar GitLab para evitar que las MR se fusionen a menos que tengan una canalización exitosa. Expanda la sección de configuración «Solicitudes de combinación» y seleccione el botón de alternancia «Las ejecuciones deben realizarse correctamente». Haga clic en «Guardar» para confirmar. Esto evitará fusionar accidentalmente un MR cuando PHPStan falla con sus modificaciones.
Para usar GitLab CI, debe tener un GitLab Runner definido a nivel de instancia, grupo o proyecto. Los corredores son responsables de ejecutar los trabajos de CI creados por el sistema GitLab.
Usaremos la imagen PHPStan Docker para ejecutar PHPStan en nuestra canalización de CI. Esto requiere el uso de un GitLab Runner que use el ejecutor de Docker. Si está en una instancia autogestionada y necesita configurar un nuevo Runner, siga las instrucciones en nuestro artículo de configuración de GitLab CI.
Crear una canalización de CI de GitLab
GitLab CI se configura mediante un archivo .gitlab-ci.yml
archivo en la raíz del proyecto. Las canalizaciones de CI admiten múltiples etapas secuenciales. Los trabajos de cada etapa se realizan en paralelo. Para nuestros propósitos de ejecución de PHPStan, necesitamos un solo paso que funcione.
stages: - phpstan cache: key: $CI_COMMIT_REF_SLUG paths: - .tmp/ - vendor/ phpstan: stage: phpstan image: ghcr.io/phpstan/phpstan script: - analyse --no-progress --error-format gitlab > phpstan.json artifacts: when: always reports: codequality: phpstan.json
Este archivo CI de GitLab contiene todo lo que necesitamos para ejecutar PHPStan dentro de nuestra canalización. Definamos una fase, phpstan
, que contiene una obra también llamada phpstan
. El trabajo utiliza la imagen oficial PHPStan Docker del registro de contenedores de GitHub.
La caché de CI de GitLab está configurada para almacenar en caché el archivo .tmp
es vendor
directorio. Esto mejorará el rendimiento de las ejecuciones posteriores en la misma rama. La caché se restablecerá automáticamente. De vuelta en el nuestro phpstan.neon
, configuramos el tmpDir
para .tmp
por esta razón, significa que ahora podemos hacer referencia con confianza en la configuración de caché de canalización de CI.
También tenemos caché vendor
para evitar reinstalar innecesariamente las dependencias de Composer en cada ejecución. Tenga en cuenta que no tiene que apresurarse composer install
manualmente: la imagen oficial PHPStan Docker lo llama automáticamente.
los --error-format
la bandera se pasa a PHPStan’s analyse
mando. Esto configura PHPStan para crear un archivo JSON en el formato aceptado por el Informe de calidad del código de GitLab. Abajo en el artifacts
sección, este archivo se carga en GitLab al final del trabajo.
Usando la tubería
Comprometa el tuyo .gitlab-ci.yml
y envíelo a su servidor GitLab. El sistema CI debería comenzar ahora y crear su primera canalización. Utilice el enlace «CI / CD» en la barra de navegación izquierda para ver el progreso de la canalización.
Si obtiene una marca verde, ¡las pruebas PHPStan han pasado! Su sucursal está en buena forma y lista para unirse. Si aparece una cruz roja, tiene otro trabajo que hacer. PHPStan y GitLab CI simplemente impidieron fusionar código potencialmente dañado.
Puede obtener la lista de errores haciendo clic en el icono de descarga a la derecha de la canalización. Seleccione el elemento de calidad del código PHPStan para obtener el informe JSON de los errores detectados por PHPStan.
Usar con solicitudes de fusión
Leer JSON manualmente no es una gran experiencia. Sin embargo, las solicitudes de combinación de GitLab exponen automáticamente el contenido del informe. Dado que el informe está marcado como un artefacto de calidad del código de GitLab, GitLab sabe cómo presentar la información que contiene.
Las solicitudes de combinación con una canalización fallida deben mostrar una sección expandible «Calidad del código». Indica el número de errores encontrados. Expanda la sección para ver una lista completa de los problemas detectados por PHPStan.
Después de solucionar los problemas, envíe sus cambios a GitLab. La canalización se ejecutará nuevamente. Una vez completado, verá el nuevo estado en la pantalla Pipelines y en el widget de calidad del código de su solicitud de fusión.
Conclusión
PHPStan le ayuda a escribir mejor PHP, que es menos susceptible a problemas ocultos. Para aprovecharlo al máximo, la herramienta debe incorporarse al flujo de trabajo de desarrollo de tal manera que no se pueda omitir ni omitir.
Usar PHPStan con GitLab CI le brinda la consistencia que necesita para estar seguro de su código. Configurar GitLab para bloquear MR con una tubería fallida significa que los cambios no pueden ingresar a la rama principal sin pasar una ejecución de PHPStan. El soporte completo de PHPStan para los informes de calidad del código de GitLab facilita la evaluación de errores sin salir de la interfaz de usuario web, lo que le ayuda a resolver rápidamente cualquier problema que descubra.