Documentos de Académico
Documentos de Profesional
Documentos de Cultura
➢ 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
- 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
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
<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
Repositorio
Remoto
Repositorio Interno
➢ Repositorio corporativo
➢ Suele hacer también de proxy
Repositorio
Local
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
➢ $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
<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.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
➢ 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