Este entorno de desarrollo basado en Docker es para nuevos contribuyentes de las advertencias de Jenkins y complementos de cobertura para reducir el tiempo de aumento inicial. Consiste en las siguientes partes:
Presenté este entorno de desarrollo en una reunión en línea de Jenkins registrada en enero de 2022.
El entorno de desarrollo se ha probado en MacOS, Ubuntu Linux (en una máquina virtual que se ejecuta en macOS) y Windows. Las solicitudes de extracción siempre son bienvenidas.
Última versión de las siguientes herramientas:
Además, se requieren las últimas versiones de las siguientes herramientas:
Si se producen errores, tenga en cuenta que la solución de problemas sugiere a continuación. Para usuarios de Windows: use el Git Bash para ejecutar los scripts de shell.
./bin/clone-repos-https.sh (o ./bin/clone-repos.sh si ya ha configurado una tecla SSH en GitHub). Debe esperar hasta que la construcción tenga éxito antes de abrir IntelliJ, de lo contrario, IntelliJ no encontrará todas las clases generadas. Los usuarios de Maven por primera vez deben esperar un par de minutos hasta que todas las dependencias se hayan descargado de Maven Central.warnings-ng-plugin-devenv./bin/jenkins.sh . Este comando construye la imagen de Jenkins Docker, descarga todos los complementos registrados e inicializa el espacio de trabajo de Jenkins con algunos trabajos. Esto también requiere algunos minutos (ver paso 9). Si todas las descargas han tenido éxito, pero la instalación falló debido a los errores, solucionarlas y ejecutar mvn -V -U -e install –DskipTests para volver a intentar solo la instalación.
Si la línea de comando de error es demasiado larga ". ocurre, ejecute los siguientes pasos:
@argfile (Java9+)Si las pruebas fallan debido a un tiempo de espera de la prueba de Jenkins, ejecute los siguientes pasos:
-Djenkins.test.timeout=1000 . Esto aumenta el límite de tiempo de espera de 1000 segundos. Puede usar un script de shell simple ( ./bin/clone-repos.sh ) para clonar y construir los módulos en un solo paso. El script verifica los siguientes módulos utilizando el protocolo GIT SSH. Esto requiere que haya registrado su clave pública en GitHub. Si no tiene claves en GitHub, puede usar alternativamente el script ./bin/clone-repos-https.sh que usa el protocolo HTTPS.
Cuando planea proporcionar una solicitud de extracción de uno de los complementos, necesita crear una bifurcación del repositorio y realizar todos los cambios en esta bifurcación. Creé una documentación de colaboración GitHub en mi proyecto de estilo de codificación.
IntelliJ (Ultimate) es el principal entorno de desarrollo apoyado para el complemento de advertencias. Se almacena un proyecto predefinido en la carpeta .idea que hace referencia a todos los módulos del complemento de advertencias. Este proyecto contiene presets de mi estilo de codificación y algunas otras configuraciones útiles.
Debería ser posible usar otros IDE (Eclipse, NetBeans, Visual Studio Code) también.
Use las configuraciones de ejecución de IntelliJ proporcionadas All in [module-name] para ejecutar las pruebas de unidad e integraciones del módulo correspondiente. Estas configuraciones ya están configuradas para registrar la cobertura de la rama de los paquetes de módulos correspondientes (use la acción Run with Coverage ).
Antes de que pueda depurar sus cambios, primero debe averiguar dónde se ejecuta su código: ¿en el controlador o en el agente? Si no está seguro, ejecute ambos depuradores remotos, configure algunos puntos de interrupción y espere a que se detenga el depurador correspondiente.
La configuración de Docker Compose inicia el controlador Jenkins automáticamente en modo 'Depurar', es decir, está escuchando solicitudes de depuración remota. Si su código se ejecuta en el controlador, debe adjuntar un depurador remoto en localhost:8000 (asignado al mismo puerto en el contenedor Docker). Use la configuración de depuración Jenkins Controller (Remote Debugger) proporcionado para conectar un depurador en IntelliJ.
La configuración de Docker Compose también inicia el agente Jenkins automáticamente en modo 'Depurar', es decir, está escuchando solicitudes de depuración remota. Adjunte un depurador remoto en localhost:8001 (asignado al mismo puerto en el contenedor Docker) para depurar el código que se ejecuta en el agente. Utilice la configuración de depuración Jenkins Agent (Remote Debugger) proporcionado para conectar un depurador en IntelliJ.
Las pruebas de UI se pueden comenzar utilizando las UI Tests [module] (Firefox) o UI Tests [module] (Chrome) . Tenga en cuenta que ambos lanzadores requieren una instalación de los controladores de selenio correspondientes. Si estos controladores no están instalados en /opt/bin en su máquina local, entonces debe adaptar las configuraciones del lanzador para que coincidan con su configuración.
Todas las pruebas de interfaz de usuario requieren funcionar dentro de un sujeto determinado bajo prueba (es decir, Jenkins bajo prueba, jut), consulte el proyecto de arnés de prueba de aceptación para obtener más detalles.
Este entorno de desarrollo contiene una instalación personalizada de Jenkins en la que puede implementar sus complementos modificados, para que pueda ver sus cambios directamente en algunos trabajos preconfigurados que usan estos complementos.
Inicie el controlador Jenkins proporcionado en este proyecto (necesita instalar Docker y Docker-Compose). Abra una terminal y ejecute ./jenkins.sh en la carpeta de nivel superior. Este comando es un envoltorio para docker-compose up : utiliza la configuración correcta de usuario y grupo para que los permisos del volumen de Docker para la carpeta de inicio de Jenkins se establezcan correctamente. Este comando crea un contenedor Docker para el controlador Jenkins y uno para el agente Java. Esto requerirá algo de tiempo cuando se llame por primera vez ya que las imágenes de Docker estarán compuestas. Después de que se hayan creado las imágenes, se iniciarán los siguientes dos contenedores:
Luego puede abrir Jenkins en la URL http: // localhost: 8080/. Use las siguientes credenciales para iniciar sesión como administrador:
El directorio de inicio del controlador Jenkins (jenkins_home) está montado como un volumen de Docker. Es decir, es visible en el host como un directorio normal en ./docker/volumes/jenkins-controller . Sobrevivirá sesiones y se puede cambiar directamente en el host, consulte la documentación oficial para más detalles. Esto ayuda a inspeccionar los archivos creados por el controlador Jenkins.
Debido a un problema de rendimiento en el complemento DSL de trabajo de Jenkins, configurar la nueva instancia de Jenkins es muy lenta. Por lo tanto, tiene sentido eliminar la parte de configuración del trabajo de su archivo jenkins.yaml después de que se hayan creado los trabajos. Puede sobrescribir el contenido del archivo ./docker/volumes/jenkins-home/jenkins.yaml en su instancia de Jenkins recién creada con el contenido en jenkins-no-jobs.yaml .
Los volúmenes bajo macOS son bastante lentos. En mi MacBook que ejecuta el trabajo de Jenkins proporcionado del analysis-model en el contenedor Docker es más lento que ejecutar el mismo trabajo de Jenkins en un contenedor Docker que se ejecuta en una máquina virtual de Linux en la misma MacBook (¿suena un poco absurdo?).
Una vez que haya terminado sus cambios de desarrollo local (es decir, las pruebas unitarias son todas verdes), debe probar sus cambios en Jenkins. Esto también ayuda a preparar una prueba de integración o prueba de interfaz de usuario para su cambio.
Si solo tiene cambios en el módulo analysis-model (y no agregó nuevos métodos API), entonces debe reconstruir e instalar el módulo Maven analysis-model.jar y luego reconstruir el analysis-model-api-plugin . Este complemento debe implementarse en Jenkins.
Este proceso se simplifica ejecutando el script ./bin/go.sh En el módulo de análisis analysis-model , instalará el módulo analysis-model.jar en su repositorio maven local. Luego, este script construirá el complemento real y lo implementará en Jenkins.
Si solo tiene cambios en el complemento de advertencias-NG, entonces debe reconstruir las warnings-ng.jpi e implementarlo en Jenkins. Puede usar uno de los siguientes scripts de shell para esta tarea:
./bin/clean.sh : construye el complemento usando mvn clean install y lo implementa en el éxito en la instancia de Jenkins../bin/go.sh : construye el complemento con mvn clean install -DskipITs (omita las pruebas de integración) y lo implementa en el éxito en el Jenkins Instace../bin/skip.sh : construye el complemento usando mvn clean install -DskipTests (omita todas las pruebas y análisis estáticos) y lo implementa en el éxito en la instancia de Jenkins.HACER
Si tiene cambios en uno de los complementos de Foresics (implementación API o GIT), debe reconstruir estos complementos de Jenkins e implementarlos en la instancia de Jenkins.
Para simplificar este proceso, ejecute el script ./go.sh en la carpeta de complementos correspondiente, creará el complemento e implementará en el éxito a Jenkins.
Antes de hacer cambios de ruptura, póngase en contacto conmigo. Por lo general, es posible hacer que los cambios sean compatibles con retroceso.
Los scripts de compilación de la última sección también se pueden comenzar a usar uno de los lanzadores IntelliJ Build and Deploy [module-name] . Estos lanzadores crean el complemento correspondiente y lo implementan en Jenkins.
Las pruebas de interfaz de usuario se pueden comenzar a usar una configuración de lanzador IntelliJ o utilizando un script de línea de comandos. Como ya se mencionó, todas las pruebas de IU requieren ejecutarse dentro de un sujeto dado bajo prueba. En nuestro caso, utilizamos la última versión de Jenkins LTS disponible y el conjunto predefinido de complementos de nuestra imagen Docker.
Las pruebas de UI se pueden comenzar utilizando las UI Tests Warnings (Firefox) o UI Warnings Tests (Chrome) . Tenga en cuenta que ambos lanzadores requieren una instalación de los controladores de selenio correspondientes. Si estos controladores no están instalados en /opt/bin en su máquina local, entonces debe adaptar las configuraciones del lanzador para que coincidan con su configuración.
También puede iniciar las pruebas de IU utilizando el shell screps proporcionados testFirefox.sh o testChrome.sh . Tenga en cuenta que es posible que también necesite adaptar estos scripts (ver sección anterior).