1 00:00:01,010 --> 00:00:03,890 Bueno, vamos a ver lo que es un entorno de integración continua. 2 00:00:04,209 --> 00:00:14,009 Un entorno de integración continua es un programa que automatiza la tarea de construir y testear un proyecto. 3 00:00:15,310 --> 00:00:22,309 Se hicieron porque se dieron cuenta de que si el proyecto lo construías y lo testeabas frecuentemente, 4 00:00:22,829 --> 00:00:26,050 encontrabas los errores más rápidamente. 5 00:00:26,050 --> 00:00:36,049 Hay muchas aplicaciones que diariamente, semanalmente, te generan una versión de prueba de la aplicación que la gente puede probar. 6 00:00:36,049 --> 00:00:56,670 Yo que sé, en Firefox están las Nightly, pues Firefox Nightly es simplemente una versión de Firefox que cada poco tiempo te la sacan con los nuevos cambios, las nuevas versiones. 7 00:00:56,670 --> 00:01:01,990 Entonces, claro, tiene el problema, o sea, esto lo hacen cada noche, como pone ahí Naily. 8 00:01:02,710 --> 00:01:06,170 Esto tiene el problema de que estás prácticamente sin testear. 9 00:01:06,250 --> 00:01:07,189 El tester eres tú. 10 00:01:07,730 --> 00:01:10,609 Entonces, pues, lo usan para encontrar fallos. 11 00:01:10,609 --> 00:01:15,390 La ventaja de cada usuario es que te puedes encontrar nuevas funcionalidades 12 00:01:15,390 --> 00:01:18,609 que no están disponibles para el resto de los mortales. 13 00:01:19,530 --> 00:01:22,049 Bueno, pues vamos a ver un entorno de integración continua, 14 00:01:22,450 --> 00:01:24,510 que en nuestro caso se llama Jenkins. 15 00:01:26,670 --> 00:01:45,409 En este Jenkins, le damos aquí, aquí tenemos a Jenkins. Esto es una aplicación web y está muy, muy orientada a Linux. Entonces, pues eso, es mejor ejecutarla en Linux. 16 00:01:45,409 --> 00:01:56,700 ¿Se puede ejecutar en otros sistemas operativos? Sí, pero vamos a tener que usar Docker y cosas similares. Como es una aplicación web, necesita un servidor web. Vamos a descargar Tomcat. 17 00:01:58,040 --> 00:01:59,939 tonka, aquí lo tenemos 18 00:01:59,939 --> 00:02:02,420 apache tonka, veis que pone aquí 19 00:02:02,420 --> 00:02:04,560 download y nos vamos a ir 20 00:02:04,560 --> 00:02:06,120 a la versión 10 21 00:02:06,120 --> 00:02:08,639 por aquí abajo veis que pone 22 00:02:08,639 --> 00:02:09,259 un tarje z 23 00:02:09,259 --> 00:02:12,699 tarje z es una forma de comprimir 24 00:02:12,699 --> 00:02:14,500 archivos, muy típica de 25 00:02:14,500 --> 00:02:14,939 Unix 26 00:02:14,939 --> 00:02:17,020 descargamos 27 00:02:17,020 --> 00:02:20,479 se usa porque guarda los permisos 28 00:02:20,479 --> 00:02:22,580 los zip no suelen guardar los permisos 29 00:02:22,580 --> 00:02:23,939 bueno, se habrá descargado entero 30 00:02:23,939 --> 00:02:26,000 parece que sí 31 00:02:26,000 --> 00:02:27,939 vale, lo extraigo 32 00:02:27,939 --> 00:02:32,400 de acuerdo, ahí lo tengo extraído 33 00:02:32,400 --> 00:02:34,879 y ahora necesito descargar Jenkins 34 00:02:34,879 --> 00:02:36,639 me voy aquí Jenkins 35 00:02:36,639 --> 00:02:38,199 donde pone aquí download 36 00:02:38,199 --> 00:02:40,080 pues esta página tengo dos versiones 37 00:02:40,080 --> 00:02:42,840 la estable o la semanal 38 00:02:42,840 --> 00:02:44,199 esta es la que os decía que 39 00:02:44,199 --> 00:02:46,360 hacen pues cada poco tiempo 40 00:02:46,360 --> 00:02:47,740 para encontrar fallos y demás 41 00:02:47,740 --> 00:02:49,639 vamos a descargarnos la semanal 42 00:02:49,639 --> 00:02:52,479 aquí me puedo encontrar fallos, pero bueno, para lo que vamos a hacer 43 00:02:52,479 --> 00:02:54,199 nosotros, pues no creo que 44 00:02:54,199 --> 00:02:55,840 de mucho problema, veis que aquí 45 00:02:55,840 --> 00:02:58,400 pone descargar un paquete de 46 00:02:58,400 --> 00:03:03,919 java world o lo descargamos a muy importante muy importante tenéis que 47 00:03:03,919 --> 00:03:08,280 tener instalado java en vuestro equipo si no lo tenéis está instalado tenéis 48 00:03:08,280 --> 00:03:16,259 que tener teclea sudo apt install open jdk 49 00:03:16,259 --> 00:03:22,879 bueno aquí probar la 23 a ver si cuela sino del 22 y si no el 17 vale y 50 00:03:22,879 --> 00:03:24,719 probando, si funciona el 23 51 00:03:24,719 --> 00:03:26,240 pues genial 52 00:03:26,240 --> 00:03:28,979 si no el 22, si no el 17 53 00:03:28,979 --> 00:03:29,819 la que funciona 54 00:03:29,819 --> 00:03:32,500 yo me he instalado la 23 55 00:03:32,500 --> 00:03:34,219 para saber que versión tienes instalada 56 00:03:34,219 --> 00:03:36,639 tecleas Java-version 57 00:03:36,639 --> 00:03:41,810 me dice que yo tengo la 23 58 00:03:41,810 --> 00:03:44,090 bueno pues 59 00:03:44,090 --> 00:03:45,789 me he descargado ya Jenkins 60 00:03:45,789 --> 00:03:48,349 me he descargado ya Jenkins 61 00:03:48,349 --> 00:03:49,090 aquí está Jenkins 62 00:03:49,090 --> 00:03:51,849 bueno pues me coge este fichito 63 00:03:51,849 --> 00:03:54,009 que me he descargado, copiar 64 00:03:54,009 --> 00:03:56,370 me voy aquí al servidor web 65 00:03:56,370 --> 00:03:58,349 y veis que me he metido 66 00:03:58,349 --> 00:04:00,210 la carpeta dentro del servidor 67 00:04:00,210 --> 00:04:01,229 web apps 68 00:04:01,229 --> 00:04:02,789 pues la pego 69 00:04:02,789 --> 00:04:06,189 ya está instalado Jenkins, bueno, falta configurar 70 00:04:06,189 --> 00:04:08,090 pero la instalación ya la hemos hecho 71 00:04:08,090 --> 00:04:09,530 para arrancar 72 00:04:09,530 --> 00:04:11,349 el servidor web Apache 73 00:04:11,349 --> 00:04:14,189 bueno, pues me meto en Apache 74 00:04:14,189 --> 00:04:14,689 Tomcat 75 00:04:14,689 --> 00:04:16,589 lo he descargado 76 00:04:16,589 --> 00:04:18,769 y me meto en la carpeta 77 00:04:18,769 --> 00:04:20,389 bin, vale 78 00:04:20,389 --> 00:04:22,029 y aquí hay un archivo que se llama 79 00:04:22,029 --> 00:04:24,790 Catalina. Pues voy a ejecutar 80 00:04:24,790 --> 00:04:26,449 Catalina. Punto barra 81 00:04:26,449 --> 00:04:29,050 Catalina. Bueno, si lo ejecuto así, sin parámetros, 82 00:04:29,129 --> 00:04:30,189 me va a decir, ¿qué quieres hacer? 83 00:04:30,810 --> 00:04:32,990 Ejecutarlo, pararlo. Voy a poner un Catalina 84 00:04:32,990 --> 00:04:33,930 RAM. 85 00:04:36,019 --> 00:04:37,519 ¿De acuerdo? He ejecutado Catalina RAM. 86 00:04:39,360 --> 00:04:40,040 Bueno, que ya 87 00:04:40,040 --> 00:04:41,220 me ha soltado un montón de cosas, ¿veis? 88 00:04:41,879 --> 00:04:42,879 Ejecutado Catalina RAM. 89 00:04:43,740 --> 00:04:45,899 Aquí me está soltando un montón de mensajes 90 00:04:45,899 --> 00:04:47,420 del servidor, que no está funcionando. 91 00:04:48,379 --> 00:04:49,439 ¿Veis que está aquí? 92 00:04:50,000 --> 00:04:51,759 ¿Lo veis? Bueno, está haciendo 93 00:04:51,759 --> 00:04:53,079 el despliegue. Ah, 94 00:04:53,399 --> 00:04:58,819 Bueno, por aquí 95 00:04:58,819 --> 00:05:00,819 Veis que ponía 96 00:05:00,819 --> 00:05:02,720 Desplegando Jenkins 97 00:05:02,720 --> 00:05:05,019 Desplegando Jenkins 98 00:05:05,019 --> 00:05:06,980 Lo ha desplegado 99 00:05:06,980 --> 00:05:09,259 Parece ser que no he visto que haya errores 100 00:05:09,259 --> 00:05:12,600 Sí, pero ha habido errores 101 00:05:12,600 --> 00:05:14,660 ¿Veis? Aquí ha habido errores 102 00:05:14,660 --> 00:05:16,939 Esto es una... Acordaos que hemos bajado 103 00:05:16,939 --> 00:05:18,300 La versión de prueba de Tomcat, o sea 104 00:05:18,300 --> 00:05:21,240 No, perdón, hemos bajado la versión de prueba 105 00:05:21,240 --> 00:05:23,220 De Jenkins, o sea que puede haber errores 106 00:05:23,220 --> 00:05:24,779 Vamos a ver si el invento funciona 107 00:05:24,779 --> 00:05:38,100 para saber si el invento funciona, voy aquí, te creo, localhost 2.8080 barra Jenkins, ¿de acuerdo? 108 00:05:39,560 --> 00:05:42,980 Esto puede tardar un ratito, ¿eh? Esto puede tardar. 109 00:05:45,389 --> 00:05:53,790 Ah, vale, me está funcionando, me está funcionando porque yo ya los tenía instalado de antes. 110 00:05:53,790 --> 00:05:56,970 me voy a cargar la instalación 111 00:05:56,970 --> 00:06:00,089 me voy a cargar la instalación 112 00:06:00,089 --> 00:06:02,350 para eso me abro un terminal 113 00:06:02,350 --> 00:06:07,139 eso no tendría que haber salido 114 00:06:07,139 --> 00:06:08,540 tiene que salirte un mensajito 115 00:06:08,540 --> 00:06:10,560 de que 116 00:06:10,560 --> 00:06:12,459 de que Jenkins 117 00:06:12,459 --> 00:06:14,899 no está 118 00:06:14,899 --> 00:06:16,939 bueno 119 00:06:16,939 --> 00:06:20,319 un momentito que voy a parar la grabación 120 00:06:20,319 --> 00:06:22,819 voy a destruir mi anterior 121 00:06:22,819 --> 00:06:24,720 versión de Jenkins y ahora 122 00:06:24,720 --> 00:06:25,819 continuar 123 00:06:25,819 --> 00:06:31,319 Bueno, vamos a continuar usando la máscara, la edición de vídeo. 124 00:06:34,139 --> 00:06:36,639 Bueno, he desinstalado mi versión anterior de Jenkins. 125 00:06:36,819 --> 00:06:39,500 Si os pasa, tenéis que borrar el servidor web. 126 00:06:42,610 --> 00:06:47,350 Bueno, repetir todo el proceso, borrar el servidor web, volveros a descargarlo, volveros a bajar Jenkins 127 00:06:47,350 --> 00:06:49,509 y antes de hacer todo eso, ejecutar este comando. 128 00:06:49,730 --> 00:06:52,750 O sea, esto que borra la versión anterior de Jenkins. 129 00:06:52,750 --> 00:06:56,029 bueno pues ya estoy en Jenkins 130 00:06:56,029 --> 00:06:57,990 y me dice que para instalarlo 131 00:06:57,990 --> 00:07:00,370 tengo que, veis que me está diciendo 132 00:07:00,370 --> 00:07:01,029 aquí un archivo 133 00:07:01,029 --> 00:07:03,910 por seguridad me dice que 134 00:07:03,910 --> 00:07:06,490 aquí ha escrito una contraseña 135 00:07:06,490 --> 00:07:08,250 y la tengo que copiar aquí, vale 136 00:07:08,250 --> 00:07:10,209 pues la copio, copio ese 137 00:07:10,209 --> 00:07:16,180 archivo, bueno estoy 138 00:07:16,180 --> 00:07:17,819 haciendo un less, veis 139 00:07:17,819 --> 00:07:19,240 aquí me sale la 140 00:07:19,240 --> 00:07:22,319 la contraseña que tengo que copiar 141 00:07:22,319 --> 00:07:23,519 y pegar, pues la copio 142 00:07:23,519 --> 00:07:26,420 y la pego 143 00:07:26,680 --> 00:07:54,889 Continuo. Vale. Muy importante tener la versión adecuada de Java. Si no ha funcionado puede ser que no tengáis instalado Java. Para instalar Java sudo apt install openjdk-23. Si funciona, si no funciona la 22 y si no funciona la 17. Vale. 144 00:07:54,889 --> 00:08:12,750 Esto yo como ya lo tengo hecho, pues nada. Bueno, ya me está diciendo que estoy bienvenido a Jenkins. Instalar los plugins. Vale, pues voy a instalar los plugins sugeridos. Jenkins se basa en plugins y puedo instalar plugins ya por defecto o nuevos que haya hecho la gente. 145 00:08:12,750 --> 00:08:30,110 Fijaros que aquí está instalando un plugin para manejar WeHub, otro para manejar WIP, otro para mandar correos electrónicos. ¿Qué más tiene? Bueno, distintos tipos de autentificación. 146 00:08:30,110 --> 00:08:47,529 Esto del pipeline case, ves que he hablado mucho del pipeline y del lenguaje Groovy. Hay como dos formas de crear scripts. Lo que vamos a hacer en Jenkins es crear scripts, él los va a ejecutar cuando nosotros le programemos. 147 00:08:47,529 --> 00:09:01,929 Podemos bien ejecutarlos manualmente o decir, venga, cada noche me lo ejecutas, que es lo que hacen, por ejemplo, aquí en el Jenkins semanal, ¿no? Tendrán puesto un proceso que semanalmente lo ejecute y lo suba a la página web. 148 00:09:01,929 --> 00:09:19,399 Parece que ya ha terminado la instalación. Bueno, está terminando la instalación. Pues eso, tengo dos formas de crear los scripts de BAS que conozco de siempre o usar este lenguaje que se llama Groovy. 149 00:09:19,399 --> 00:09:36,559 No lo vamos a meter en Groovy porque esto es una versión muy pequeñita, pero vamos a crear nuestro primer usuario. Aquí ponéis vuestro nombre, PP, contraseña, PP, PP, seguridad máximo, nombre PP, aquí ponéis vuestro nombre, aquí no me pongáis PP, ponéis vuestro nombre. 150 00:09:36,559 --> 00:09:58,320 Y aquí abajo, en dirección de email, ponéis la dirección, ¿de acuerdo? Vale, pues ponemos aquí el usuario, la contraseña, el nombre y la dirección de email. Salvar y continuar. Y me dice que Jenkins ya está funcionando, he instalado Jenkins, voy a poder acceder siempre tecleando esta dirección. 151 00:09:58,320 --> 00:10:00,080 salvamos 152 00:10:00,080 --> 00:10:02,779 y vamos a empezar a usar Jenkins 153 00:10:02,779 --> 00:10:07,240 ahora, entre ejecuciones 154 00:10:07,240 --> 00:10:09,100 acordaros que para poder usar Jenkins 155 00:10:09,100 --> 00:10:11,419 tenéis que primero lanzar el servidor 156 00:10:11,419 --> 00:10:13,399 lanzar Catalina, si no lanzáis Catalina 157 00:10:13,399 --> 00:10:15,519 primero pues no vais a poder acceder aquí 158 00:10:15,519 --> 00:10:17,039 bueno, aquí puedo crear 159 00:10:17,039 --> 00:10:18,899 una nueva tarea 160 00:10:18,899 --> 00:10:21,019 creo una nueva tarea 161 00:10:21,019 --> 00:10:23,440 bueno, puedo crear 162 00:10:23,440 --> 00:10:25,500 un proyecto de estilo libre o un 163 00:10:25,500 --> 00:10:25,879 pipeline 164 00:10:25,879 --> 00:10:27,919 el pipeline 165 00:10:27,919 --> 00:10:30,200 el pipeline 166 00:10:30,200 --> 00:10:36,190 los pasos de un pipeline 167 00:10:36,190 --> 00:10:39,970 los pasos de un pipeline 168 00:10:39,970 --> 00:10:45,740 un momentito que los tengo aquí 169 00:10:45,740 --> 00:10:49,429 no he puesto los pasos de un pipeline 170 00:10:49,429 --> 00:10:55,620 no he puesto los pasos de un pipeline 171 00:10:55,620 --> 00:10:58,139 no he puesto los pasos de un pipeline 172 00:10:58,139 --> 00:11:00,200 para unos apuntillos 173 00:11:00,200 --> 00:11:01,259 no he puesto los pasos de un pipeline 174 00:11:01,259 --> 00:11:03,139 los pasos de un pipeline 175 00:11:03,139 --> 00:11:05,779 van a ser en general 176 00:11:05,779 --> 00:11:07,799 bajarme el proyecto 177 00:11:07,799 --> 00:11:09,279 ejecutar 178 00:11:09,279 --> 00:11:11,340 un constructor 179 00:11:11,340 --> 00:11:14,779 si ese constructor no ha tenido fallos 180 00:11:14,779 --> 00:11:15,940 hacer los tests 181 00:11:15,940 --> 00:11:18,759 si no hay errores en los tests 182 00:11:18,759 --> 00:11:20,740 liberar 183 00:11:20,740 --> 00:11:22,980 la aplicación o mandar un mensaje 184 00:11:22,980 --> 00:11:24,700 ¿de acuerdo? o sea, los pasos de un 185 00:11:24,700 --> 00:11:30,110 pipeline, los pasos de un 186 00:11:30,110 --> 00:11:31,110 pipeline son 187 00:11:31,110 --> 00:11:38,440 descargar 188 00:11:38,440 --> 00:11:42,559 el proyecto 189 00:11:42,559 --> 00:11:44,879 que puede ser de width, por ejemplo 190 00:11:44,879 --> 00:11:46,940 de width 191 00:11:46,940 --> 00:11:49,559 el segundo paso es construir 192 00:11:49,559 --> 00:11:55,000 build en inglés 193 00:11:55,000 --> 00:11:57,220 que va a ser generalmente 194 00:11:57,220 --> 00:11:59,100 ejecutar un make 195 00:11:59,100 --> 00:12:00,399 o un build.sh 196 00:12:00,399 --> 00:12:02,980 que es un archivo que ya 197 00:12:02,980 --> 00:12:04,720 estará dentro del git 198 00:12:04,720 --> 00:12:06,779 una vez terminada de construir 199 00:12:06,779 --> 00:12:08,039 hacer los tests 200 00:12:08,039 --> 00:12:10,259 que esto todavía no lo hemos visto 201 00:12:10,259 --> 00:12:13,360 y si los tests no dan errores 202 00:12:13,360 --> 00:12:14,879 lo que llaman deploy 203 00:12:14,879 --> 00:12:17,100 que es liberar la aplicación 204 00:12:17,100 --> 00:12:22,899 liberar la aplicación 205 00:12:22,899 --> 00:12:24,200 o mandar un mensaje 206 00:12:24,200 --> 00:12:28,679 que está correcto 207 00:12:28,679 --> 00:12:31,039 estos son los pasos de un pipeline 208 00:12:31,039 --> 00:12:35,100 ¿vale? nosotros vamos a crear 209 00:12:35,100 --> 00:12:36,820 un proyecto de estilo libre, le vamos a poner un nombre 210 00:12:36,820 --> 00:12:37,539 que va a ser prueba 211 00:12:37,539 --> 00:12:40,940 prueba, y vamos a crear un proyecto 212 00:12:40,940 --> 00:12:42,980 de estilo libre aquí, le damos 213 00:12:42,980 --> 00:12:48,679 ok, le damos 214 00:12:48,679 --> 00:12:53,039 aquí está, bueno 215 00:12:53,039 --> 00:12:55,019 le puedo poner, ya estoy en la configuración 216 00:12:55,019 --> 00:12:57,159 le puedo poner una descripción 217 00:12:57,159 --> 00:13:00,519 proyecto de prueba 218 00:13:00,519 --> 00:13:03,419 y aquí me vienen un montón 219 00:13:03,419 --> 00:13:05,480 de opciones, pues mira, puede ser por ejemplo 220 00:13:05,480 --> 00:13:07,879 un proyecto de WeHub. Aquí me pone 221 00:13:07,879 --> 00:13:09,539 unas pequeñas 222 00:13:09,539 --> 00:13:11,419 instrucciones. Desechar 223 00:13:11,419 --> 00:13:13,659 ejecuciones antiguas. Bueno, está muy claro que va a 224 00:13:13,659 --> 00:13:14,679 ahorrar el entorno de trabajo 225 00:13:14,679 --> 00:13:17,500 y me lo va a poner a funcionar. 226 00:13:21,659 --> 00:13:23,519 El origen del código fuente 227 00:13:23,519 --> 00:13:25,360 puede ser ninguno o un 228 00:13:25,360 --> 00:13:27,500 WIT. ¿De acuerdo? Pues si es un WIT, tengo que 229 00:13:27,500 --> 00:13:29,539 decir repositorio y aquí añadirle 230 00:13:29,539 --> 00:13:31,379 las credenciales. O sea, tiene que 231 00:13:31,379 --> 00:13:33,639 poner el usuario y el token correspondiente. 232 00:13:33,639 --> 00:13:43,799 puedo ejecutarlo en equipos remotos, Jenkins está pensado para ser usado en máquinas en la nube. 233 00:13:44,340 --> 00:13:51,519 Esto está pensado para que llegue Jenkins, lance un montón de máquinas virtuales en la nube, 234 00:13:52,179 --> 00:13:57,679 a cada una le da una tarea, pues tú vas a compilar, tú vas a hacer test, tú vas a lo que sea. 235 00:13:57,679 --> 00:14:02,840 Y cuando acaban, pues él junta los resultados y apaga esas máquinas virtuales. 236 00:14:02,840 --> 00:14:04,000 Nosotros lo vamos a hacer en local. 237 00:14:04,799 --> 00:14:05,620 Entorno de ejecución. 238 00:14:06,360 --> 00:14:10,919 Esta opción es interesante, borrar el workspace antes de hacer la construcción. 239 00:14:11,320 --> 00:14:16,860 Si activamos esta opción, vais a ver que se pueden crear archivos durante la ejecución. 240 00:14:17,059 --> 00:14:21,899 O sea, por ejemplo, cuando te bajas un width, cuando haces un width pool y te bajas el repositorio, 241 00:14:22,220 --> 00:14:22,740 pues ahí se queda. 242 00:14:22,960 --> 00:14:24,460 Lo puedo borrar antes de empezar. 243 00:14:25,659 --> 00:14:27,139 En el momento lo voy a dejar sin marcar. 244 00:14:27,139 --> 00:14:56,039 Y aquí vienen las partes importantes, los build steps y las acciones finales. Build steps. Aquí puedo añadir yo mis sell scripts para ejecutar. Bueno, pues puedo decir que, por ejemplo, hago un echo, hola mundo, y un echo, adiós mundo. ¿De acuerdo? Este va a ser mi script. 245 00:14:56,039 --> 00:15:13,759 Una vez que tengo escrito mi script, puedo decidir qué acciones hacer al final. Pues mira, puedo subir por Git el proyecto a algún sitio o puedo ejecutar otros proyectos o puedo mandarme un correo electrónico. 246 00:15:13,759 --> 00:15:17,799 Vale, pues hay un montón de opciones. 247 00:15:17,940 --> 00:15:19,860 Si, por ejemplo, digo que me lo publiqué en Wit, 248 00:15:20,639 --> 00:15:25,399 pues me va a decir, mira, que hazlo si solamente ha sido un bueno, 249 00:15:25,679 --> 00:15:31,139 que haga un merge de resultados, que añade una etiqueta, una run, etcétera, etcétera, etcétera. 250 00:15:31,220 --> 00:15:32,519 Lo voy a quitar, ¿vale? 251 00:15:32,519 --> 00:15:33,460 Lo voy a dejar de momento así. 252 00:15:34,080 --> 00:15:34,759 Lo voy a guardar. 253 00:15:35,740 --> 00:15:37,200 Ya tengo mi script, ¿vale? 254 00:15:37,379 --> 00:15:38,440 Y ahora lo arranco. 255 00:15:42,299 --> 00:15:43,399 ¿Veis qué me ha dado aquí? 256 00:15:43,639 --> 00:15:46,320 Bueno, aquí en la zona de builds, si no os habéis fijado, 257 00:15:46,799 --> 00:15:48,279 Ha salido esto. Le voy a dar otra vez. 258 00:15:51,500 --> 00:15:52,360 Ahí está. ¿Veis? 259 00:15:52,720 --> 00:15:55,799 Bueno, me lo pone en verde diciendo que la ejecución ha sido correcta. 260 00:15:56,159 --> 00:15:57,740 Es distinto pulsar aquí que pulsar aquí. 261 00:15:57,879 --> 00:16:03,500 Si pulso aquí en el número, me dice que cuánto tiempo ha tardado, etcétera, etcétera, etcétera. 262 00:16:03,679 --> 00:16:04,360 Vuelvo para atrás. 263 00:16:05,019 --> 00:16:09,659 Si pulso aquí en el símbolo verde, me suelta la salida de la consola, 264 00:16:09,659 --> 00:16:13,000 que efectivamente ha sido un éxito porque este script no tiene errores. 265 00:16:13,139 --> 00:16:14,600 ¿Qué pasa si hay errores? 266 00:16:15,299 --> 00:16:15,940 Voy a volver. 267 00:16:17,179 --> 00:16:18,179 ¿Qué pasa si hay errores? 268 00:16:18,799 --> 00:16:20,200 Bueno, pues me voy aquí a configurar. 269 00:16:20,539 --> 00:16:25,000 Siempre podéis, si pincháis ahí en el nombre del proyecto y le dais a configurar, 270 00:16:25,360 --> 00:16:27,620 pues siempre podéis volver aquí a la configuración de cambiar cosas. 271 00:16:28,100 --> 00:16:28,200 ¿Vale? 272 00:16:28,980 --> 00:16:33,379 Vamos a suponer que voy a borrar un archivo que no existe. 273 00:16:34,620 --> 00:16:35,200 ¿De acuerdo? 274 00:16:35,899 --> 00:16:37,139 Claro, este archivo no existe. 275 00:16:37,899 --> 00:16:38,580 Esto es un error. 276 00:16:39,279 --> 00:16:42,360 Si lo guardo, vais a ver que la ejecución ahora va a falto. 277 00:16:46,529 --> 00:16:47,350 ¿Veis? Ha fallado. 278 00:16:47,350 --> 00:16:48,110 Lo ponen rojo. 279 00:16:48,110 --> 00:16:55,190 y cuando pincho en el símbolo, ves que dice, mira, que aquí no se puede borrar este archivo, entre otras cosas, porque no existe. 280 00:16:56,450 --> 00:17:02,769 Y me informa. A ver... Vamos a otra vez a la configuración. Vamos a hacer que no falle. 281 00:17:05,140 --> 00:17:14,180 Vamos a hacer que no falle. Voy a coger y le voy a hacer un touch. Ahora no va a fallar, ¿no? 282 00:17:14,740 --> 00:17:18,160 Va a caer el archivo y después lo va a borrar. No va a fallar la ejecución. 283 00:17:18,160 --> 00:17:26,690 ¿Veis? Ahora ya no da error porque el archivo es X 284 00:17:26,690 --> 00:17:32,670 Bueno, y hasta aquí nuestro pequeño curso de Jenkins 285 00:17:32,670 --> 00:17:36,210 Bueno, aquí en el panel de control puedo controlar los trabajos 286 00:17:36,210 --> 00:17:38,890 Aquí he creado uno, pero puedo crear todos los que quiera 287 00:17:38,890 --> 00:17:40,609 Aquí en administrar Jenkins 288 00:17:40,609 --> 00:17:43,509 Es que esto ya se escapa de este tutorial 289 00:17:43,509 --> 00:17:47,390 Pues puedo cargarle plugins, puedo controlar las nubes 290 00:17:47,390 --> 00:17:48,690 ¿Veis? Esto de nodos 291 00:17:48,690 --> 00:17:52,049 Puedo añadir un nodo, es otro equipo en la nube 292 00:17:52,049 --> 00:18:04,049 a que yo me puedo enchufar y mandarle opciones, pues mira, aquí puedo generar las credenciales de acceso a esos nodos o generar nubes, ¿de acuerdo? 293 00:18:04,089 --> 00:18:14,150 Porque esto está pensado para ejecutarlo en una red. Más cositas interesantes, ah, se me olvidaba, bueno, cuando entréis vais a entrar aquí directamente, 294 00:18:14,309 --> 00:18:19,690 bueno, no vais a entrar aquí directamente, te va a pedir tu usuario y contraseña, porque esto funciona con usuario y contraseña, 295 00:18:19,690 --> 00:18:44,349 Si me desconecto, ¿veis que me pide entrar otra vez? ¿De acuerdo? Vale, pues entro. Y entro directamente a este entorno de pro. Puedo ejecutar otras tareas. ¿De acuerdo? Fijaos que no la he programado. No la he programado. De momento vamos a quedarnos aquí, pero puedo programar su ejecución. No lo vamos a ver, pero se puede hacer. 296 00:18:44,349 --> 00:19:05,890 Y una última cosa que decir es que no es habitual poner los scripts aquí directamente. Lo que vamos a hacer es, en nuestro git, en nuestro widget, en nuestro proyecto, vamos a poner un build.sh y lo que vamos a hacer es directamente ejecutar ese build.sh. ¿De acuerdo? 297 00:19:05,890 --> 00:19:08,950 ese build.sh 298 00:19:08,950 --> 00:19:11,130 puede generar errores 299 00:19:11,130 --> 00:19:12,869 ¿cómo se generan los errores 300 00:19:12,869 --> 00:19:13,930 en un build.sh? 301 00:19:15,250 --> 00:19:16,849 bueno, aquí descargaría el proyecto 302 00:19:16,849 --> 00:19:17,970 ¿de acuerdo? 303 00:19:18,450 --> 00:19:19,670 haría el cd al proyecto 304 00:19:19,670 --> 00:19:20,990 cd al proyecto que sea 305 00:19:20,990 --> 00:19:21,809 cd proyecto 306 00:19:21,809 --> 00:19:25,119 con pwd 307 00:19:25,119 --> 00:19:28,180 y con ls podéis ver 308 00:19:28,180 --> 00:19:30,440 lo que hay 309 00:19:30,440 --> 00:19:32,059 ¿de acuerdo? cuando lo ejecutéis 310 00:19:32,059 --> 00:19:33,160 ¿de acuerdo? 311 00:19:34,480 --> 00:19:35,319 sería más bien aquí 312 00:19:35,319 --> 00:19:38,099 o sea, imaginaos que es un git 313 00:19:38,099 --> 00:19:40,039 pues ha hecho la descarga 314 00:19:40,039 --> 00:19:41,740 del proyecto 315 00:19:41,740 --> 00:19:43,880 con WD puede ver 316 00:19:43,880 --> 00:19:45,940 donde estáis, con el SBI los archivos 317 00:19:45,940 --> 00:19:48,160 esto es bueno ponerlo para saber donde tengo que entrar 318 00:19:48,160 --> 00:19:50,160 me entro en el proyecto y lo habitual va a ser 319 00:19:50,160 --> 00:19:52,339 ejecutar un .arrapil.sh 320 00:19:52,339 --> 00:19:53,519 y que construya el proyecto 321 00:19:53,519 --> 00:19:56,339 ¿cómo este build puede generar 322 00:19:56,339 --> 00:19:58,240 errores? este build puede generar errores 323 00:19:58,240 --> 00:19:59,059 de la siguiente forma 324 00:19:59,059 --> 00:20:01,279 siempre todo script que acaba 325 00:20:01,279 --> 00:20:03,539 todo script 326 00:20:03,539 --> 00:20:06,769 que tenga un exit 327 00:20:06,769 --> 00:20:08,230 que tenga un exit 328 00:20:08,230 --> 00:20:10,890 puede generar errores 329 00:20:10,890 --> 00:20:12,109 si el exit vale 0 330 00:20:12,109 --> 00:20:14,650 no se genera un error, pero si el exit 331 00:20:14,650 --> 00:20:16,670 vale 1, se genera un error, por ejemplo 332 00:20:16,670 --> 00:20:20,980 si aquí pongo el exit 333 00:20:20,980 --> 00:20:22,519 1, va a generar 334 00:20:22,519 --> 00:20:24,640 un error sí o sí 335 00:20:24,640 --> 00:20:27,829 voy a ir ahora 336 00:20:27,829 --> 00:20:30,750 error, lo veis ahí, me ha dado 337 00:20:30,750 --> 00:20:31,670 un fallido, porque 338 00:20:31,670 --> 00:20:33,890 le he obligado a tener un error 339 00:20:33,890 --> 00:20:38,750 ¿de acuerdo? puedo hacer que no 340 00:20:38,750 --> 00:20:40,210 de errores con un exit 0 341 00:20:40,210 --> 00:20:45,269 si lo ejecuto, vais a ver que exit 342 00:20:45,269 --> 00:20:59,950 pero no produce errores, ahí está, ¿vale? Pues puedo en un script ver si se producen errores, por ejemplo, wget, wget es un comando que sirve para descargar archivos, ¿de acuerdo? 343 00:20:59,950 --> 00:21:12,769 Pues con este código puedo ver si se ha generado un error o no. O sea, esto funciona. IF es el sí en inglés, el sí condicional. 344 00:21:12,769 --> 00:21:30,609 Si no se ha producido un error, o sea, si $interrogación, $interrogación es la salida de un comando. No es igual a 0, ¿de acuerdo? No es igual a 0. Si no es igual a 0, es que se ha producido un error. 345 00:21:30,609 --> 00:21:33,369 entonces se ejecuta 346 00:21:33,369 --> 00:21:35,109 este código que pongo yo aquí 347 00:21:35,109 --> 00:21:36,950 pues hace esto, hace aquello 348 00:21:36,950 --> 00:21:39,009 y luego le puedo decir que haga un exit1 349 00:21:39,009 --> 00:21:40,470 esto lo puedo poner o no 350 00:21:40,470 --> 00:21:43,450 indicando que se ha producido 351 00:21:43,450 --> 00:21:44,849 un error, ¿vale? por ejemplo 352 00:21:44,849 --> 00:21:46,890 estas líneas 353 00:21:46,890 --> 00:21:49,130 suelen ser muy típicas, aquí estoy 354 00:21:49,130 --> 00:21:50,490 descargando una hoja de estilos 355 00:21:50,490 --> 00:21:53,130 de internet y aquí estoy 356 00:21:53,130 --> 00:21:55,089 comprobando si la descarga ha sido correcta, ya sabéis que 357 00:21:55,089 --> 00:21:56,369 a veces las descargas fallan 358 00:21:56,369 --> 00:21:59,430 si ha sido correcta, esto no lo va a hacer 359 00:21:59,430 --> 00:22:05,089 y si ha sido correcta, todo lo que pongo aquí se va a ejecutar, ¿de acuerdo? 360 00:22:05,769 --> 00:22:10,549 Puedo comprobar si un archivo existe en nuestros programas, por ejemplo, 361 00:22:11,529 --> 00:22:16,609 si pongo un if menos 6 el nombre del archivo, esto se va a ejecutar si el archivo existe. 362 00:22:17,309 --> 00:22:20,329 Este cachito de código se ejecuta si el archivo existe. 363 00:22:20,930 --> 00:22:27,009 Else en inglés significa si no, si no puedo ejecutar este código de aquí, ¿de acuerdo? 364 00:22:27,009 --> 00:22:36,230 O sea, si el archivo existe, se va a ejecutar este código de aquí y si no existe, se va a ejecutar este otro código de aquí. 365 00:22:36,650 --> 00:22:40,630 Esto lo puedo usar para comprobar si se ha ido la cosa bien. 366 00:22:40,730 --> 00:22:41,890 Imaginaos que he hecho el comando wit. 367 00:22:42,349 --> 00:22:44,190 Pues compruebo si la carpeta existe. 368 00:22:44,289 --> 00:22:46,269 Si la carpeta existe, pues hago lo que tenga que hacer. 369 00:22:47,130 --> 00:22:49,529 Y si no existe, pues hago otra cosa. 370 00:22:51,049 --> 00:22:53,609 También puedo programar subidas automáticas a wit. 371 00:22:53,609 --> 00:23:21,650 O sea, imaginaos que tengo que hacer una página web y después esa página web subirla a otro sitio. Pues muy fácil, se usan usando estos comandos, commit-a-m y aquí un texto, lo que le estoy diciendo al comando wit es que no me abra el editor de texto y directamente ponga este texto como etiqueta del commit, ¿de acuerdo? 372 00:23:21,650 --> 00:23:39,900 O sea, es automático. Y luego, aquí está haciendo un WIPUS, ¿de acuerdo? Y le puedo decir el usuario que usa, ¿vale? Pues mira, al proyecto tal, me imaginaos que la dirección del proyecto es esta, ¿no? 373 00:23:39,900 --> 00:24:01,619 pues antes de la dirección del proyecto hay que poner el usuario y la contraseña, ¿vale? O sea, si vuestro proyecto es https.withapp.com barra pp barra proyecto.wit, pues entre el withapp y el barra barra tenemos que poner esto, el usuario, dos puntos y el token y luego un arroba. 374 00:24:01,619 --> 00:24:04,400 esto es un origen, el origen 375 00:24:04,400 --> 00:24:05,619 de muchos fallos, porque 376 00:24:05,619 --> 00:24:07,359 de muchos errores 377 00:24:07,359 --> 00:24:10,500 de seguridad, muchas veces 378 00:24:10,500 --> 00:24:12,539 la gente no se da cuenta y el token acaba por ahí 379 00:24:12,539 --> 00:24:14,700 y ese token se acaba desperdigando 380 00:24:14,700 --> 00:24:16,680 por un 381 00:24:16,680 --> 00:24:18,359 proyecto, llega 382 00:24:18,359 --> 00:24:20,480 una persona malintencionada, se encuentra 383 00:24:20,480 --> 00:24:22,240 el usuario y el token y lo usa 384 00:24:22,240 --> 00:24:24,539 y a veces pues cuelan virus, cuelan 385 00:24:24,539 --> 00:24:26,140 cosas que no debe ser 386 00:24:26,140 --> 00:24:28,240 en proyectos, ¿de acuerdo? 387 00:24:28,759 --> 00:24:30,359 vale, pues ahora 388 00:24:30,359 --> 00:24:30,940 sí que es todo