Herramientas de usuario

Herramientas del sitio


clase:daw:daw:tema07

Diferencias

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

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
clase:daw:daw:tema07 [2026/10/29 18:57] – Runners: ejemplo de despliegue con el runner de GitHub (SSH + deploy.sh) y ubuntu-24.04 fijado en vez de ubuntu-latest claudeclase:daw:daw:tema07 [2026/10/29 19:16] (actual) – [Runners] claude
Línea 96: Línea 96:
 {{:clase:daw:daw:runner-github.png?800|Con el runner de GitHub: crea el runner y entra en el servidor por VPN y SSH}} {{:clase:daw:daw:runner-github.png?800|Con el runner de GitHub: crea el runner y entra en el servidor por VPN y SSH}}
  
-La clave privada SSH para entrar en el servidor ([[clase:daw:proyecto:1eval:tema01#conexion_con_claves_publica_privada|Proyecto 1]]) se guarda como secreto ''SSH_KEY'', y el usuario y el servidor como ''SSH_USER'' y ''SSH_HOST''. El workflow entra por SSH y lanza allí ''deploy.sh'':+La clave privada SSH para entrar en el servidor ([[clase:daw:proyecto:1eval:tema01#conexion_con_claves_publica_privada|Proyecto 1]]) se guarda como secreto ''SSH_KEY'', y el usuario y el servidor como ''SSH_USER'' y ''SSH_HOST''. El workflow entra por SSH y ejecuta ''deploy.sh'', que está en el //home// del usuario en el servidor:
  
-<sxh yaml;title:.github/workflows/desplegar.yml>+<sxh yaml;title:.github/workflows/desplegar.yml;highlight:[11,17]>
 name: Desplegar name: Desplegar
  
Línea 115: Línea 115:
           echo "${{ secrets.SSH_KEY }}" > clave           echo "${{ secrets.SSH_KEY }}" > clave
           chmod 600 clave           chmod 600 clave
-          ssh -i clave -o StrictHostKeyChecking=accept-new ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "rm -rf DesplegarFacturasDocker && git clone https://github.com/lgonzalezmislata/DesplegarFacturasDocker.git && cd DesplegarFacturasDocker && ./deploy.sh"+          ssh -i clave -o StrictHostKeyChecking=accept-new ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "~/deploy.sh"
 </sxh> </sxh>
   * ''echo'' y ''chmod'': ''ssh'' lee la clave de un fichero, así que se escribe el secreto en uno.   * ''echo'' y ''chmod'': ''ssh'' lee la clave de un fichero, así que se escribe el secreto en uno.
   * ''StrictHostKeyChecking=accept-new'': el runner es nuevo y no conoce el servidor. Sin esto, ''ssh'' pregunta si se fía de él y el workflow se queda parado esperando la respuesta.   * ''StrictHostKeyChecking=accept-new'': el runner es nuevo y no conoce el servidor. Sin esto, ''ssh'' pregunta si se fía de él y el workflow se queda parado esperando la respuesta.
-  * Lo que va entre comillas se ejecuta en el servidor: clonar el repositorio de despliegue y lanzar ''deploy.sh''.+  * ''"~/deploy.sh"'': la orden que se le pasa a ''ssh'' detrás del servidor se ejecuta en el servidor, no en el runner. Va entre comillas para que ''~'' sea el //home// del servidor y no el del runner.
  
-Solo funciona si el servidor acepta SSH desde Internet. Si está detrás del router del instituto o de la empresa, antes hay que conectar la VPN en otro paso, con más secretos.+Solo funciona si el servidor acepta SSH desde Internet. Si está detrás del router del instituto o de la empresa, antes hay que conectar la VPN en otro paso, con más secretos. O quizás ni se pueda si no hay una VPN
  
 ==== Con un runner propio ==== ==== Con un runner propio ====
Línea 132: Línea 132:
 Un runner se registra en **un** repositorio y solo ejecuta sus workflows. Se instala en el servidor con el usuario que va a desplegar, no con ''root'': Un runner se registra en **un** repositorio y solo ejecuta sus workflows. Se instala en el servidor con el usuario que va a desplegar, no con ''root'':
  
-  - En el repositorio, //Settings → Actions → Runners → New self-hosted runner//, con //Linux// y //x64//. GitHub muestra las órdenes de los pasos siguientes con el token ya puesto. El token caduca en una hora.+  - En el repositorio, //Settings → Actions → Runners → New self-hosted runner//, con //Linux// y //x64//. GitHub muestra las órdenes de los pasos siguientes: se copian de esa página, porque la de ''config.sh'' lleva el token.
   - Descargarlo:<sxh bash>   - Descargarlo:<sxh bash>
 mkdir actions-runner && cd actions-runner mkdir actions-runner && cd actions-runner
Línea 138: Línea 138:
 tar xzf ./actions-runner-linux-x64-2.338.2.tar.gz tar xzf ./actions-runner-linux-x64-2.338.2.tar.gz
 </sxh> </sxh>
-  - Registrarlo en el repositorio. Pregunta el grupo, el nombre y las etiquetas: con //Enter// se queda lo que propone.<sxh bash>+  - Registrarlo en el repositorio. ''--url'' es el repositorio y ''--token'' un **token de registro** que GitHub genera al abrir la página de //New self-hosted runner//: está en la orden ''config.sh'' del apartado //Configure// de esa página. Pregunta el grupo, el nombre y las etiquetas: con //Enter// se queda lo que propone.<sxh bash>
 ./config.sh --url https://github.com/lgonzalezmislata/Facturas --token AXQKZ7MBV3LN2RCYEUHJ4PDTD6Y2W ./config.sh --url https://github.com/lgonzalezmislata/Facturas --token AXQKZ7MBV3LN2RCYEUHJ4PDTD6Y2W
 </sxh> </sxh>
Línea 147: Línea 147:
 </sxh> </sxh>
   - En //Settings → Actions → Runners// tiene que salir como //Idle//.   - En //Settings → Actions → Runners// tiene que salir como //Idle//.
 +
 +<note important>El token de registro **no es un token personal** de GitHub ni hay que crearlo: lo da esa página, solo sirve para registrar el runner una vez y **caduca en una hora**. Si ''config.sh'' dice que el token no vale, se recarga la página y se copia el nuevo.</note>
  
 ==== Configurar un workflow para usar un runner ==== ==== Configurar un workflow para usar un runner ====
-El workflow de despliegue, en el repositorio del proyecto, se queda en clonar el repositorio de despliegue y lanzar ''deploy.sh'':+El workflow es el mismo que con el [[#con_el_runner_de_github|runner de GitHub]], pero sin SSH: el runner ya está en el servidor y ejecuta ''deploy.sh'' allí mismo.
  
 <sxh yaml;title:.github/workflows/desplegar.yml;highlight:[11]> <sxh yaml;title:.github/workflows/desplegar.yml;highlight:[11]>
Línea 165: Línea 167:
     steps:     steps:
       - name: Desplegar       - name: Desplegar
-        run: | +        run: ~/deploy.sh
-          rm -rf DesplegarFacturasDocker +
-          git clone https://github.com/lgonzalezmislata/DesplegarFacturasDocker.git +
-          cd DesplegarFacturasDocker && ./deploy.sh+
 </sxh> </sxh>
  
-Son las mismas órdenes que con el [[#con_el_runner_de_github|runner de GitHub]], pero sin SSH: el runner ya está en el servidor y las ejecuta allí mismo. Lo que hace que el job se ejecute en nuestro servidor es ''runs-on: self-hosted''. Los pasos se ejecutan **con el usuario que instaló el runner** y sin terminal para escribir la contraseña de ''sudo'', así que si ''deploy.sh'' usa Docker, ese usuario tiene que estar en el grupo ''docker'' (''sudo usermod -aG docker $USER'' y reiniciar el servicio). Además, el runner propio **no empieza vacío**: lo que deja una ejecución sigue ahí en la siguiente, en ''actions-runner/_work'', y por eso el workflow borra la carpeta antes de clonar. Y solo se usa en **repositorios privados**: en uno público, cualquiera que abra un //pull request// puede hacer que ejecute su código en tu servidor.+Lo que hace que el job se ejecute en nuestro servidor es ''runs-on: self-hosted''. Los pasos se ejecutan **con el usuario que instaló el runner**
  
 Más información: Más información:
clase/daw/daw/tema07.1793296643.txt.gz · Última modificación: por claude