Está en la página 1de 45

Maven e IC

Maven, SonarQube, Artifactory y Jenkins


Presentación
Retos del Desarrollo SW

➢ Proyectos SW grandes y complejos


➢ Cada vez más interoperabilidad
➢ Muchos equipos de trabajo
(remotos)
➢ Planificaciones cortas
➢ Cambios en necesidades y requisitos
Desarrollo Tradicional

➢ Construcción / lanzamiento “por


petición”
➢ Estado de proyecto -> Compila
➢ Bien documentado -> No es una
opción
➢ Revisado -> Alguien ha testeado
Resultado: Falla en numerosas
ocasiones
Desarrollo Ágil
¿Qué necesitamos?

➢ Construcción, pruebas y despliegue


estandarizado
➢ Construcción, pruebas y despliegues
continuos
➢ Asegurar pasos sólidos,
reproducibles y analizables
Integración Continua

➢ Definición -> Práctica de integración


temprana y frecuente para evitar los
problemas de la integración
➢ Objetivo -> Reducir el tiempo de
reconstrucción y por tanto reducir
costes y tiempo
Integración Continua

➢ Trabajo humano
➢ Trabajar en el código
➢ Subir al SCM código y test
➢ Trabajo máquina
➢ Consulta SCM en busca de cambios
➢ Construye a partir del código
➢ Ejecuta los test
➢ Despliega librerías en el repositorio
Integración Continua
Integración Continua

CÓDIGO

BUILD

SCM SERVICIO IC

CÓDIGO
Integración Continua
¿Qué es Maven? - Definición

✓ "Software project management and


comprehension tool"
✓ "An attempt to apply patterns to a
project's build infrastructure in order
to promote comprehension and
productivity."

- maven.apache.org
¿Qué es Maven?

➢ Herramienta de construcción
➢ Enfocada a la simplicidad
➢ Creación (arquetipos) y gestión (valores
por defecto)
➢ Cubre fases de construcción
➢ Build Management
➢ Testing
➢ Release Versioning
➢ Deployment
¿Qué es Maven? - Proyecto

➢ Proyecto Open Source de Apache


➢ Desarrollo iniciado en 2001
➢ Surgió a partir de ficheros Ant de otros
proyectos Apache
➢ Ha pasado por muchas iteraciones
➢ La versión actual es Maven 3

http://maven.apache.org
Principios de Maven

➢ Orientado a proyecto
➢ Convención sobre configuración
➢ Gestión de dependencias
➢ Internas y externas
➢ Reutilización a través de repositorios
➢ Internos y externos
➢ Extensible a través de plugins
Orientado a Proyecto

➢ Maven modela las construcciones


como un Project Object Model (POM)
➢ Definido en XML en pom.xml
➢ Soporta herencia simple de tipo árbol
➢ Todo POM extiende del Super POM
Convención sobre Configuración

<project>

<groupId>com.projectsexception</groupId>
<artifactId>redmine-api</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
</project>
Gestión de Dependencias
<dependencies> ➢ Escribir una vez
<dependency>
<groupId>org.springframework</groupId>
➢ Mejorar las
<artifactId>spring-orm</artifactId> dependencias anidadas
<version>${spring.version}</version>
</dependency> ➢ Dependencias
<dependency>
<groupId>org.hibernate</groupId> consistentes
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
➢ Evitar la búsqueda de
</dependency> JARs
</dependencies>
➢ Evitar la búsqueda de
versiones
➢ Evitar la autogestión de
librerías
➢ Gestión por ámbitos
Repositorios

➢ Almacenan artefactos y dependencias


➢ Repositorio Local
➢ Caché local de artefactos
➢ Puede eliminarse completamente
➢ Útil para construcciones offline
➢ Reside en el directorio .m2 del usuario
➢ Repositorio Remoto
Repositorio Remoto

➢ Central Repository almacena todos los


artefactos
➢ El local descarga del central
(maven.org)
Repositorio
Local
Orden de búsqueda

Repositorio
Remoto
Repositorio Interno

➢ Repositorio corporativo
➢ Suele hacer también de proxy
Repositorio
Local

Repositorio Orden de búsqueda


Interno

Repositorio
Remoto
Repositorios
<repositories>
<repository>
<id>LocalRepo</id>
<name>LocalRepo</name>
<url>file://${project.basedir}/lib</url>
</repository>
<repository>
<id>IntraRepo</id>
<name>IntraRepo</name>
<url>http://intranet/repo</url>
</repository>
<repository>
<id>java-net</id>
<url>https://oss.sonatype.org/content/repositories/java-net/</url>
</repository>
</repositories>
Plugins

➢ Ant: Ejecutar tareas AND


➢ Hibernate3: Generar POJO's, DAO y
XML Mappings basado en esquemas
remotos
➢ Javadoc: Generate javadoc del código
http://maven.apache.org/plugins/
http://mojo.codehaus.org/plugins.html
Propiedades

➢ $MAVEN_HOME/conf/settings.xml
➢ $USER_HOME/.m2/settings.xml
➢ $PROJECT_HOME/pom.xml
<project>

<groupId>com.projectsexception</groupId>
<artifactId>redmine-api</artifactId>
<packaging>war</packaging> ${basedir}
<version>1.0-SNAPSHOT</version>
<properties> ${project.groupId}
<greeting>hello</greeting>
</properties>
${greeting}
</project>
Perfiles

➢ Variables específicas del despliegue


➢ Cambia URLs en base al entorno de
despliegue
➢ Cambia código a través de filtrado
según el perfil
➢ Simplifica y unifica métodos de
despliegue
Perfiles - Definición

<profile>
<id>dev</id>
<properties>
<name>DEVELOPMENT</name>
<filter>dev-filter</filter>
<include>dev-includes</include>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<name>PRODUCTION</name>
<filter>pro-filter</filter>
<include>pro-includes</include>
</properties>
</profile>
Perfiles - Filtrar recursos

<filters>
<filter>src/main/filters/${filter}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>config.properties</include>
<includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>

<excludes><exclude>config.properties</exclude></excludes>
</resource>
</resources>
Perfiles - Filtrar recursos web

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<webResources>
<resource>
<directory>${basedir}/src/main/webapp/META-INF</directory>
<filtering>true</filtering>
<targetPath>META-INF</targetPath>
<includes>
<include>context.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
Perfiles - Filtrar recursos web

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<webResources>
<resource>
<directory>${basedir}/src/main/includes/${include}</directory>
<filtering>true</filtering>
<targetPath>WEB-INF</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
Artifactory

➢ Es un repositorio Maven
➢ Lo usaremos si:
➢ Necesitamos almacenar nuestras propias
librerías
➢ Poner nuestras librerías disponibles en la
red
➢ Podemos controlar el acceso
➢ Actúa como proxy de forma
automática
SonarQube

➢ SonarQube is the central place to


manage code quality, offering visual
reporting on and across projects and
enabling to replay the past to follow
metrics evolution

- sonarqube.org
SonarQube

➢ Servidor web
➢ Proyectos envían los datos
➢ SonarQube almacena dichos datos
➢ Panel de control que permite ver los
datos y la evolución a través de las
versiones
➢ Extensible a través de plugins
SonarQube

➢ CheckStyle - checkstyle.sourceforge.net
➢ Findbugs - findbugs.sourceforge.net
➢ PMD - pmd.sourceforge.net
➢ Más a través de Plugins:
➢ Android
➢ JavaScript
➢ PHP
➢ MADEJA:www.juntadeandalucia.es/servicios/
madeja/contenido/recurso/828
Jenkins

➢ Jenkins provides an easy-to-use


so-called continuous integration
system, making it easier for
developers to integrate changes to
the project, and making it easier for
users to obtain a fresh build.
-jenkins-ci.org
Alternativas CI

➢ Hudson (mantenido by Oracle)


➢ Travis CI (Solution alojada por
Github)
➢ Bamboo (Atlassian)
➢ TeamCity (JetBrains)
➢ Jenkins (fork de Hudson)
➢ Popular
➢ Versátil (más de 600 plugins)
➢ Desarrollo y comunidad activa (LTS)
Jenkins

➢ Testing
➢ Unitarios, funcionales, de integración, de
rendimiento, análisis estático
➢ Construcción
➢ Empaquetado, lanzamiento y publicación
➢ Despliegue
➢ Y más tareas repetitivas...
Jenkins

➢ SCM
➢ CVS, Subversion, Git, Mercurial,
Clearcase...
➢ Ejecuta
➢ Apache Ant, Apache Maven, shell scripts y
comandos batch de Windows
➢ Inicio
➢ Commit, cron, otras construcciones,
petición URL o manualmente
Crear un “job” en Jenkins
Crear un “job” en Jenkins
Crear un “job” en Jenkins
Crear un “job” en Jenkins
¿Cómo monto yo todo esto?
Instalaciones

➢ Maven
➢ Descomprime y añade al PATH
➢ SonarQube
➢ Descargar y ejecutar
➢ Jenkins
➢ WAR o paquete para Windows,
Ubuntu/Debian, Red Hat/Fedora/CentOS,
Mac OS X, openSUSE, FreeBSD, OpenBSD,
Solaris/OpenIndiana y Gentoo
Solución “ready to use”

clinkerhq.com
Preguntas

@FedeProEx

También podría gustarte