martes, 12 de febrero de 2019

Construir, probar y lanzar aplicaciones usando solo Jenkins , Docker,Tomcat





Construir, probar y lanzar aplicaciones usando solo Jenkins y Docker

Aprenderemos a levantar un servidor de Docker y cómo construir, probar y lanzar una aplicación de Node.





¿Qué es Jenkins?

Jenkins es un servidor que se puede usar para automatizar todo tipo de tareas relacionadas con la construcción, prueba y entrega o lanzamiento de software, es una herramienta que te permite realizar Continuous Integration y Continuous Delivery de nuestros proyectos de software.

¿Qué es Continuous Integration y Continuous Delivery?

Son practicas comunes en la ingeniería de software:
Continuos Integration, nos permite probar nuestro código de manera aislada para detectar problemas y errores.
Continuos Delivery es la capacidad de lanzar aplicaciones a producción en cualquier momento.

¿Por qué son importantes los términos Continuous Integration y Continuous Delivery?

Imaginemos que tenemos un proyecto de software en el que 3 personas hacen cambios constantemente, fusionamos las ramas sin conflictos y el sistema de pagos quedo roto, pero nadie se percató de ello. En el mejor de los casos el tester se dará cuenta del problema, pero en el peor de los casos el usuario tendrá un problema a la hora de querer realizar los pagos. Ahora imaginemos un equipo de 20 personas o cientos, los errores pueden ser muy grandes, así que al final lo mas favorable es utilizar CI.





Continuos Delivery, este proceso es igual de importante debes de tener la capacidad de lanzar tus aplicaciones a producción en cualquier momento de ser necesario. Imaginemos que tenemos un problema en producción que nos hace perder millones, ya identificamos el error y es solo una linea de código, deberíamos poder lanzar el fix lo antes posible.

Ya estoy convencido ¿ahora como le entro?

  • Instala Docker
  • Crea una cuenta de Github
  • Sigue las instrucciones…

Abre una terminal y corre este comando, te ayudará a crear una carpeta y después entrar a ella:
mkdir -p jenkins-local
cd jenkins-local
Lo siguiente sera correr este comando, el cual creará un contenedor de Docker con Jenkins y dejará el puerto 8080 abierto para que podamos acceder a él:
docker run \
  --rm \
  -u root \
  -p 8080:8080 \
  -v "$PWD":/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean
docker run \
  --rm \  -u root \  -p 8080:8090 \  -v "$PWD":/var/jenkins_home \  -v /var/run/docker.sock:/var/run/docker.sock \  jenkinsci/blueocean

Esperaremos hasta ver la linea marcada con verde:




Y copiamos la clave de la linea roja, que enseguida la necesitaremos, entramos a:
http://localhost:8080/
Y veremos lo siguiente:




Pegamos la clave que nos proporcionaron en la terminal en la linea roja y damos en “Continue”.




En la siguiente pantalla seleccionar los plugins que necesitas, en este caso instalaremos los sugeridos pero recomiendo escogerlos según tus necesidades:




Esperamos a que cambie de pantalla y creamos nuestro usuario:




Le damos en “Save en Finish”.




Damos en “Restart”, esperamos a que termine e iniciamos sesion.




Y listo ya tenemos Jenkins instalado para empezar a usarlo.




¿Cómo configuro una app?

Le damos click donde dice “create new jobs”, asignamos un nombre y en este caso haremos un pipeline.




Y en la parte de la configuración introducimos lo siguiente:




Y en la parte del repository url:
https://github.com/AxelMonroyX/simple-node-js-react-npm-app
Guardamos y ¡listo!




En este repo existe un Jenkinsfile:
agent {
  docker {
   image 'node:6-alpine'
   args '-p 3000:3000'
  }
}
environment {
  CI = 'true'
}
stages {
   stage('Build') {
      steps {
         sh 'npm install'
      }
   stage('Test') {
      steps {
          sh './jenkins/scripts/test.sh
      }
    }
........
En el cual indicamos que nuestra app utilizará una imagen de Docker para construirla node:6-alpine, abrir el puerto por el que debe correr.
El environment son variables de entorno que estarán disponibles durante todo el proceso.
Los stages, son las etapas de tu proceso para construir, testear y lanzar las apps.
Después buscamos la siguiente sección:




Y nos mostrará esta pantalla, damos en “Run”:




Al terminar con el proceso tendremos esta pantalla:




Ahora podemos acceder a:
http://localhost:3000/
Y tendremos nuestra app corriendo.




Conclusión y siguientes pasos

Como podemos ver es muy sencillo configurar y correr una aplicación usando CI y CD, basta con tener Jenkins instalado en algún servidor, crear el Jenkinsfile que es realmente sencillo -aún más si utilizas Docker en tu proceso de desarrollo-, configurar el repositorio y realizar todo de forma automatizada.
Lo siguiente seria crear un servidor con Jenkins disponible para tu equipo y deployar a tus clientes con el provider de tu elección.

¿Qué es Tomcat?

Apache Tomcat (o simplemente Tomcat) es un servidor web de código abierto y un contenedor de servlets desarrollado por Apache Software Foundation (ASF). Tomcat implementa las especificaciones Java Servlet y JavaServer Pages (JSP) de Oracle, y proporciona un entorno de servidor web HTTP "Java puro" para que se ejecute el código Java. En la configuración más sencilla, Tomcat se ejecuta en un solo proceso de sistema operativo. El proceso ejecuta una máquina virtual Java (JVM). Cada solicitud HTTP única desde un navegador a Tomcat se procesa en el proceso de Tomcat en un hilo separado.
logo

Cómo utilizar esta imagen.

Ejecuta el servidor Tomcat predeterminado ( CMD ["catalina.sh", "run"]):
$ docker run -it --rm tomcat:8.0
Puede probarlo visitando http://container-ip:8080en un navegador o, si necesita acceso fuera del host, en el puerto 8888:
$ docker run -it --rm -p 8888:8080 tomcat:8.0
A continuación, puede ir http://localhost:8888ao http://host-ip:8888en un navegador.
El entorno Tomcat predeterminado en la imagen para las versiones 7 y 8 es:
CATALINA_BASE:   /usr/local/tomcat
CATALINA_HOME:   /usr/local/tomcat
CATALINA_TMPDIR: /usr/local/tomcat/temp
JRE_HOME:        /usr
CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
El entorno Tomcat predeterminado en la imagen para la versión 6 es:
CATALINA_BASE:   /usr/local/tomcat
CATALINA_HOME:   /usr/local/tomcat
CATALINA_TMPDIR: /usr/local/tomcat/temp
JRE_HOME:        /usr
CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar
Los archivos de configuración están disponibles en /usr/local/tomcat/conf/Por defecto, ningún usuario está incluido en el rol "manager-gui" requerido para operar la aplicación web "/ manager / html". Si desea utilizar esta aplicación, debe definir dicho usuario en tomcat-users.xml.

Variantes de imagen

Las tomcatimágenes vienen en muchos sabores, cada uno diseñado para un caso de uso específico.

tomcat:<version>

Esta es la imagen de facto. Si no está seguro de cuáles son sus necesidades, probablemente quiera usar esta. Está diseñado para ser utilizado como un contenedor desechable (monte su código fuente y comience el contenedor para iniciar su aplicación), así como la base para construir otras imágenes a partir de.

tomcat:<version>-slim

Esta imagen no contiene los paquetes comunes contenidos en la etiqueta predeterminada y solo contiene los paquetes mínimos necesarios para ejecutar tomcatA menos que esté trabajando en un entorno donde solotomcat se desplegará la imagen y tiene limitaciones de espacio, le recomendamos que utilice la imagen predeterminada de este repositorio.

tomcat:<version>-alpine

Esta imagen se basa en el popular proyecto Alpine Linux , disponible en la alpineimagen oficial . Alpine Linux es mucho más pequeño que la mayoría de las imágenes de la base de distribución (~ 5 MB) y, por lo tanto, conduce a imágenes mucho más delgadas en general.
Esta variante es muy recomendable cuando se desea que el tamaño de imagen final sea lo más pequeño posible. La principal advertencia a tener en cuenta es que utiliza musl libc en lugar de glibc y sus amigos , por lo que cierto software puede tener problemas dependiendo de la profundidad de sus requisitos libc. Sin embargo, la mayoría del software no tiene un problema con esto, por lo que esta variante suele ser una opción muy segura. Vea este hilo de comentarios de Hacker News para conocer más sobre los problemas que pueden surgir y algunas comparaciones a favor / en contra del uso de imágenes basadas en Alpine.
Para minimizar el tamaño de la imagen, es poco común que se incluyan herramientas relacionadas adicionales (como gitbash) en imágenes basadas en Alpine. Usando esta imagen como base, agregue las cosas que necesita en su propio Dockerfile (vea la alpinedescripción de la imagen para ver ejemplos de cómo instalar paquetes si no está familiarizado).

Licencia

Ver información de licencia para el software contenido en esta imagen.
Al igual que con todas las imágenes de Docker, es probable que también contengan otro software que pueda estar bajo otras licencias (como Bash, etc., de la distribución base, junto con cualquier dependencia directa o indirecta del software principal que se contiene).
Parte de la información adicional de licencia que fue capaz de detectar automáticamente podría encontrarse en la repo-infodel repositorio de tomcat/directorio .
Al igual que para cualquier uso de imagen pre-construido, es responsabilidad del usuario de la imagen asegurarse de que el uso de esta imagen cumpla con todas las licencias relevantes para todo el software contenido en el mismo.
Share:

0 comentarios:

Publicar un comentario