GitHub CI/CD

Para usuarios avanzados, GitHub CI/CD (Integración Continua/Entrega Continua o Despliegue Continuo) puede desplegar automáticamente cambios de código en tu sitio de Kinsta cada vez que se envíe un nuevo commit a la rama designada. Esta configuración permite el despliegue de código sin problemas desde tu entorno local a través de SSH y GitHub actions, permitiendo actualizaciones continuas en tu sitio.

Para seguir estos pasos, debes tener un sitio existente alojado en Kinsta y una cuenta de GitHub.

1. Descarga una copia de seguridad de tu sitio

Puedes descargar una copia de seguridad de tu sitio para configurar el repositorio de GitHub y trabajar en él localmente. Alternativamente, puedes utilizar DevKinsta para extraer tu sitio del servidor Kinsta y trabajar en él localmente.

En MyKinsta, ve a Sitios WordPress > nombre del sitio > Copias de seguridad > Descargar > Crear copia de seguridad ahora.

Crea una copia de seguridad descargable en MyKinsta.
Crea una copia de seguridad descargable en MyKinsta.

Cuando tu copia de seguridad esté lista, haz clic en Descargar, guárdala en tu ordenador local y descomprime los archivos en una carpeta.

2. Configura el repositorio de GitHub

Abre la carpeta que contiene los archivos de tu sitio en tu editor de código preferido. Para evitar subir archivos innecesarios del core de WordPress, archivos multimedia o información sensible, añade un archivo .gitignore al directorio raíz de tu proyecto. Puedes utilizar una plantilla .gitignore estándar de WordPress, copiar su contenido y guardarlo para asegurarte de que sólo se rastrean los archivos esenciales.

Crea un repositorio GitHub y envía los archivos de tu sitio a GitHub.

3. Configurar secretos de GitHub para Kinsta

Para automatizar los despliegues desde GitHub a Kinsta, necesitas los detalles clave de SSH, incluyendo tu nombre de usuario, contraseña, puerto y dirección IP. Como son sensibles, debes almacenarlos de forma segura como Secretos de GitHub.

Dentro de GitHub ve a tu repositorio, haz clic en Configuración > Secretos y variables > Acciones > Nuevo secreto de repositorio.

Añade los siguientes secretos utilizando los detalles SFTP/SSH de la página de Información de tu sitio en MyKinsta:

Nombre del secretoSecreto
KINSTA_SERVIDOR_IPHost, por ejemplo 12.34.56.78
NOMBRE_USUARIO_KINSTANombre de usuario p.ej. kinstahelp
CONTRASEÑAContraseña
PUERTOPuerto, por ejemplo 12345
Información SSH para añadir secretos a GitHub.
Información SSH para añadir secretos a GitHub.

4. Crear un repositorio Git vacío en Kinsta

Un repositorio Git vacío es un destino remoto al que GitHub enviará tu código. Este repositorio es un repositorio central diseñado para recibir y almacenar tu código.

Abre un nuevo terminal y accede mediante SSH a tu servidor Kinsta utilizando el comando terminal SSH desde la página de Información de tu sitio en MyKinsta.

Comando de terminal SSH para tu sitio.
Comando de terminal SSH para tu sitio.

Introduce la contraseña de tu sitio desde la página de Información en MyKinsta, luego copia la Ruta desde Detalles del entorno.

Navega hasta la carpeta privada de tu servidor sustituyendo public por private y your-site por el nombre de la carpeta de la ruta de tu sitio:

cd /www/your-site/private

Si la carpeta privada no existe, utiliza el siguiente comando para crearla:

mkdir -p /www/your-site/private

Crea el repositorio Git vacío con el siguiente comando, sustituyendo your-repo.git por el nombre de tu repositorio GitHub:

git init --bare your-repo.git

5. Configura el hook post-recepción

El hook post-receive despliega automáticamente el código en tu sitio en producción cada vez que se envían nuevos cambios a la rama main de GitHub.

Navega hasta el directorio hooks en tu repositorio Git vacío, sustituyendo your-site por el nombre de la carpeta de tu sitio y your-repo por el nombre de tu repositorio GitHub:

cd /www/your-site/private/your-repo.git/hooks

Crea y edita el hook post-receive:

nano post-receive

Añade el siguiente script al archivo post-receive. Esto comprueba el último código en el directorio public de tu sitio activo:

#!/bin/bash
TARGET="/www/your-site/public"
GIT_DIR="/www/your-site/private/your-repo.git"

while read oldrev newrev ref
do
    BRANCH=$(git rev-parse --symbolic --abbrev-ref $ref)

    if [[ $BRANCH == "main" ]];
    then
        echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
        git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
    else
        echo "Ref $ref received. Doing nothing: only the main branch may be deployed on this server."
    fi
done

El script despliega el código sólo de la rama main. La variable TARGET apunta al directorio donde se encuentran los archivos de tu sitio activo y la variable GIT_DIR apunta al repositorio Git vacío.

Guarda y sal del archivo pulsando Ctrl + X, luego Y y Enter.

Haz que el script sea ejecutable para que se ejecute automáticamente después de cada envío:

chmod +x post-receive

6. Genera y añade un token de acceso personal (PAT) de GitHub

Cuando envíes código a GitHub a través de SSH, debes utilizar un PAT para autenticarte. Este token permite a GitHub aceptar tus envíos de forma segura.

Para generar el PAT:

  1. Ve a tu cuenta de GitHub, haz clic en tu foto de perfil y selecciona Settings.
  2. Haz clic en  Developer settings > Personal access tokens > Tokens (classic).
  3. Haz clic en Generate new token > Generate new token (classic), y dentro de Note dale un nombre (por ejemplo, «Kinsta Deployment Token»).
  4. En Select scopes, marca repo (para un control total de los repositorios privados).
  5. Haz clic en Generate token, y copia el token. (No podrás volver a verlo)

Ejecuta el siguiente comando para añadir tu repositorio de GitHub como remoto, sustituyendo your-username por tu nombre de usuario de GitHub, YOUR_PERSONAL_ACCESS_TOKEN por el PAT que acabas de generar y your-repo por el nombre de tu repositorio de GitHub:

git remote add origin https://your-username:[email protected]/your-username/your-repo.git

7. Crea el flujo de trabajo GitHub Actions

Este flujo de trabajo despliega los cambios en Kinsta automáticamente cada vez que haces un envío a la rama main. Para automatizar el despliegue, necesitas definir cómo se realizará el despliegue utilizando un archivo YAML.

En tu repositorio de GitHub, crea un nuevo directorio llamado .github/workflows dentro de este directorio, crea un nuevo archivo llamado deploy.yml y añade el siguiente contenido al archivo, sustituyendo your-site por el nombre de la carpeta de la ruta de tu sitio Kinsta y your-repo por el nombre de tu repositorio de GitHub:

name: Deploy to Kinsta

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Deploy to Kinsta via SSH
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.KINSTA_SERVER_IP }}
          username: ${{ secrets.KINSTA_USERNAME }}
          password: ${{ secrets.PASSWORD }}
          port: ${{ secrets.PORT }}
          script: |
            cd /www/your-site/private/your-repo.git  # Navigate to the bare Git repository on Kinsta
            git --work-tree=/www/your-site/public --git-dir=/www/your-site/private/your-repo.git fetch origin main  # Fetch the latest changes from GitHub
            git --work-tree=/www/your-site/public --git-dir=/www/your-site/private/your-repo.git reset --hard origin/main  # Deploy changes to the live site

Este flujo de trabajo hace lo siguiente

  • Trigger: El flujo de trabajo se activa cada vez que se envía código a la rama main de tu repositorio de GitHub.
  • Job: El flujo de trabajo contiene un job llamado deploy, que se ejecuta en una máquina virtual Ubuntu (ubuntu-latest).
  • Checkout code: Utiliza la acción actions/checkout@v2 para extraer el código más reciente de tu repositorio de GitHub.
  • Deploy to Kinsta via SSH: La acción appleboy/ssh-action se utiliza para conectarse de forma segura a tu servidor Kinsta mediante SSH utilizando los secretos que configuraste (IP del servidor, nombre de usuario, contraseña y puerto). El script de este paso ejecuta los siguientes comandos:
    • cd /www/your-site/private/your-repo.git: Navega al repositorio Git vacío en tu servidor Kinsta.
    • git fetch origin main: Obtiene los últimos cambios de la rama main en tu repositorio GitHub.
    • git reset --hard origin/main: Aplica esos cambios actualizando el sitio en producción en el directorio public donde está alojado WordPress.

8. Prueba el flujo de trabajo

Una vez que hayas configurado el flujo de trabajo, puedes probarlo introduciendo un pequeño cambio en la rama main de tu repositorio de GitHub. Cada vez que envíes un cambio, las GitHub Actions activarán automáticamente el despliegue, extrayendo la última versión de tu código y desplegándolo en tu sitio en producción en Kinsta.

Puedes controlar el estado de tu despliegue accediendo a la pestaña Actions de tu repositorio de GitHub. Si el flujo de trabajo encuentra errores, verás registros detallados que te ayudarán a solucionarlos.

¿Este artículo te ha resultado útil?