Herramientas de usuario

Herramientas del sitio


clase:daw:daw:2eval:tema09

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:daw:daw:2eval:tema09 [2020/12/08 12:05]
admin borrado
clase:daw:daw:2eval:tema09 [2021/01/24 08:12]
admin [Crear un Job]
Línea 1: Línea 1:
-====== 9. Documentación ======+====== 9. Despliegue continuo ======
  
-===== Contenidos ===== 
  
-  * Generacion automática de documentación +===== Introducción =====
-  * Documentación de API +
-  * Diagramas UML+
  
-===== Material =====+  * [[https://blog.develat.io/pipelines-ci-cd/|Integración continua y despliegue continuo]] 
 +  * [[https://devopsti.wordpress.com/2014/09/26/integracion-continua-ci-entrega-continua-cd-y-despliegue-continuo-cd/|Integración continua (CI), Entrega continua (CD) y Despliegue Continuo (CD)]] 
 +  * [[https://geeks.ms/jorge/2019/02/25/integracion-entrega-y-despliegue-continuo-diferencias-y-similitudes/|Integración, entrega y despliegue continuo. Diferencias y similitudes]] 
 + 
 + 
 +===== Contenedor con Jenkins ===== 
 +Jenkins es lo que se llama un "Servidor de automatización".  
 + 
 +{{:clase:daw:daw:2eval:jenkins_logo.png?200|}} 
 + 
 +Hay abundante documentación sobre él , en los siguientes enlaces: 
 +  * [[https://www.jenkins.io/|Jenkins]]: Página del proyecto. 
 +  * [[https://www.javiergarzas.com/2014/05/jenkins.html|¿Qué es Jenkins? Explicado en menos de 10 min para quienes no lo conocen de nada]] 
 +  * [[https://www.arsys.es/blog/programacion/jenkins-cloud-integracion-continua/|Automatiza las tareas de desarrollo e integración continua con Jenkins]] 
 +  * [[https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/jenkins-tutorial/|Jenkins: tutorial para esta herramienta de CI]] 
 + 
 +Aunque Jenkins pueda parecer sencillo o superfluo, usar Jenkins //**es el camino**// para hacer software de calidad.: 
 + 
 +{{:clase:daw:daw:2eval:jenkins-is-the-way.png?100|}} {{:clase:daw:daw:2eval:the_mandalorian.jpg?100|}} 
 + 
 +En ejercicios de temas anteriores hemos visto como instalar Jenkins.Ahora vamos a ejecutar un Script desde Jenkins  en la máquina real. 
 + 
 +===== root por SSH ===== 
 +Antes que nada debemos permitir que se pueda acceder por SSH como root desde la máquina real. Esto lo vamos a necesitar ya que desde Jenkins vamos a ejecutar "npm run deploy" en la máquina real y para ello necesitamos ser root. 
 + 
 +Para permitirlo hay que lanzar las siguientes órdenes: 
 + 
 +  sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config 
 +  sudo systemctl restart ssh.service 
 + 
 +Despues habrá que cambiar la contraseña a root con la siguiente orden: 
 + 
 +    sudo passwd root 
 + 
 +<note warning> 
 +En un entorno real o sin que haya un cortafuegos delante de la máquina, nunca deberíamos permitir que con root se pueda acceder a la máquina real. Sin embargo lo vamos nosotros a permitir ya que estamos en un entorno educativo. 
 +</note> 
 + 
 +===== Plugin SSH2 Easy ===== 
 +Otra cosa que necesitamos hacer es instalar y configurar el plugin "SSH2 Easy" para poder acceder por SSH a la máquina real y así lanzar las órdenes en la máquina real. 
 + 
 +  * Instalar en Jenkis el plugin "SSH2 Easy": 
 +    * En Jenkins pulsa "Administrar Jenkins" ,  "Administrar Plugins" y "Todos los plugins" 
 +    * En el campo de búsqueda, escribe "SSH2 Easy" 
 +    * Marca el plugin "SSH2 Easy" y pulsa "Instalar sin reiniciar" 
 +    * Espera unos segundos y pulsa en "Volver al inicio de la página" 
 +\\ 
 +\\ 
 + 
 + 
 +  * Configurar el plugin "SSH2 Easy": 
 +    * Vuelve a "Administrar Jenkins" y pulsa en "Configurar el sistema" 
 +    * Ves al apartado de "Server Groups Center" 
 +    * En el apartado "Server Group List" pulsa en Añadir y rellena lo siguiente 
 +      * Group Name: Máquina Real 
 +      * Password: La contraseña de root de tu máquina real. 
 +    * Pulsa en el botón "Guardar" que hay al final de la página. 
 +    * Vuelve a "Administrar Jenkins" y pulsa en "Configurar el sistema" 
 +    * Ves al apartado de "Server Groups Center" 
 +    * En el apartado "Server List" pulsa en Añadir y rellena lo siguiente: 
 +      * Server Group: Máquina real. 
 +      * Server Name: maquina-real 
 +      * Server IP: La IP de la máquina real. 
 + 
 + 
 +===== Crear un Job ===== 
 +Vamos ahora a crear una tarea para poder ejecutar un script desde Jenkins en la máquina real. 
 + 
 +  * Pulsa en "Nueva Tarea" , escribe "Desplegar" , selecciona "Crear un proyecto de estilo libre" y luego pulsa  el botón "OK"
 +  * Ves al apartado de "Ejecutar" y en el desplegable de "Añadir una acción", selecciona "Remote shell"
 +  * El el campo "shell" , escribe las ordenes de Linux que quieres que se ejecuten en la máquina real como root. 
 +  * Pulsa el botón de "Guardar"
 +  * Pulsa en "Construir ahora" y si todo ha ido bien, en tu máquina real se deberá haber ejecutado el Script 
 + 
 + 
 + 
 +<note tip> 
 +Los Script que querremos ejecutar lo normal es que sean los siguientes: 
 + 
 +  cd /carpeta del proyecto 
 +  git fetch --prune 
 +  git checkout master 
 +  git merge --ff-only origin/master 
 +  npm run deploy 
 + 
 +</note> 
 + 
 + 
 +===== GitHub Actions ===== 
 +Ahora vamos a ver con configurar Jenkins y GitHub para que al hacer un cambios en "main" se ejecute el Job que despliega la aplicación. Para ello vamos a usar una funcionalidad de GitHub llamada GitHub Actions que son acciones que se ejecutan cuando hay algún cambio en el repositorio.  
 + 
 + 
 +En Jenkins vamos a creara un Token (Es como una contraseña del usuario) 
 +  * Pulsa en nuestro nombre de usuario en la parte superior derecha. 
 +  * En el menu lateral, ves a "Configurar"
 +  * Pulsa en el botón de "Add new Token" y en el botón "Generate" 
 +  * Copia en algún lugar seguro el Token generado 
 +  * Pulsa en el botón "Guardar" que hay al final de la página. 
 + 
 +Ves al Job y en "configurar" 
 +  * Ves al apartado "Disparadores de ejecuciones" 
 +  * Marca la opción "Lanzar ejecuciones remotas (ejem: desde 'scripts')" 
 +  * Escribe el Token que habías generado antes. 
 + 
 +En el código fuente del proyecto , añade el fichero ''.github/workflows/main.yml'' con el siguiente contenido: 
 + 
 +<sxh yml> 
 +name: deploy 
 +on: 
 +  push: 
 +    branches: 
 +      - main 
 +jobs: 
 +  build: 
 +    name: desplegar 
 +    runs-on: ubuntu-latest 
 +    steps: 
 +    - name: trigger single Job 
 +      uses: appleboy/jenkins-action@master 
 +      with: 
 +        url: "URL del servidor de Jenkins" 
 +        user: "nombre del usuario de Jenkins" 
 +        token: "El Token que has generado antes" 
 +        job: "nombre del Job a ejecutar" 
 +</sxh> 
 + 
 +Ahora al hacer cualquier cambio en la rama ''main'' se ejecutará el Job de Jenkins 
 +===== Ejercicios ===== 
 + 
 +==== Ejercicio 1 ==== 
 +Ahora vamos a automatizar la ejecución del Script anterior usando Jenkins 
 + 
 +  * Crea un nuevo contenedor de Jenkins de forma que la carpeta ''/var/jenkins_home'' se almacene dentro de ''/opt/tuNombre/docker/jenkins'' 
 +  * Instala Jenkins 
 +  * Instala el plugin de SSH2 Easy sabiendo que la IP es la de la máquina real de Linux de Francia. La contraseña es la misma que la del usuario ''alumno''
 +  * Crea un Job llamado ''Desplegar'' que ejecute lo siguiente en la máquina real 
 + 
 +  cd /opt/tuNombre/ejemplodaw 
 +  git fetch --prune --force 
 +  git checkout master 
 +  git merge --ff-only origin/master 
 +  npm run deploy 
 + 
 +Ahora haz un cambio en el SASS en master , súbelos a GitHub y ejecuta el Job de Jenkins.Prueba a navegar a <nowiki>http://tuNombre.daw2.pve2.fpmislata.com</nowiki>  y se verán los cambios. 
 +Ahora haz un cambio en el HTML en master , súbelos a GitHub y ejecuta el Job de Jenkins.Prueba a navegar a <nowiki>http://tuNombre.daw2.pve2.fpmislata.com</nowiki>  y se verán los cambios. 
 + 
 +==== Ejercicio 2 ==== 
 +Ahora vamos a automatizar todo el proceso de despliegue de forma que cuando haya un cambio en master que se despliegue automáticamente el código. 
 + 
 + 
 +==== Ejercicio 3 ==== 
 +Mira lo que son en GitHub los "secrets" en [[https://docs.github.com/es/free-pro-team@latest/actions/reference/encrypted-secrets|Encrypted secrets]] 
 + 
 +Ahora modifica el fichero ''.github/workflows/main.yml'' para que no se vea el Token
  
-  * Generacion automática de documentación 
-    * [[http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html| JavaDoc]] 
-    * [[http://usejsdoc.org/|JSDoc]] 
-  * Documentación de API 
-    * [[http://swagger.io/|Swagger]] 
-    * [[http://raml.org/|RAML]] 
-  * Diagramas UML 
-    * [[http://plantuml.com/|PlantUML]] 
-    * [[https://yuml.me/|yUML]] 
clase/daw/daw/2eval/tema09.txt · Última modificación: 2021/01/24 08:12 por admin