{"id":69258,"date":"2023-08-21T15:09:06","date_gmt":"2023-08-21T13:09:06","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=69258&#038;preview=true&#038;preview_id=69258"},"modified":"2023-08-25T17:17:19","modified_gmt":"2023-08-25T15:17:19","slug":"como-configurar-pipeline-ci-cd","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/","title":{"rendered":"C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta"},"content":{"rendered":"<p>En el vertiginoso mundo del <a href=\"https:\/\/kinsta.com\/web-development\/\">desarrollo web<\/a>, la integraci\u00f3n continua y el despliegue continuo (<a href=\"https:\/\/kinsta.com\/es\/blog\/herramientas-devops\/#devops-pipeline-cicd-tools\">CI\/CD<\/a>) se han convertido en pr\u00e1cticas indispensables para entregar software de alta calidad de forma eficiente. CI\/CD permite a los desarrolladores automatizar el proceso de creaci\u00f3n, prueba y despliegue de los cambios de c\u00f3digo, reduciendo el riesgo de error humano y permitiendo iteraciones m\u00e1s r\u00e1pidas.<\/p>\n<p>Este art\u00edculo explica la importancia de CI\/CD, c\u00f3mo crear un canal de CI y c\u00f3mo configurar el despliegue continuo en tu canal de CI con la <a href=\"https:\/\/kinsta.com\/es\/docs\/api-kinsta\/\">API de Kinsta<\/a> mediante programaci\u00f3n, todo ello con Acciones de GitHub en tu repositorio de <a href=\"https:\/\/kinsta.com\/es\/blog\/como-enviar-codigo-a-github\/\">GitHub<\/a>.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>\u00bfPor Qu\u00e9 Usar CI\/CD?<\/h2>\n<p>La plataforma de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Alojamiento de Aplicaciones<\/a> de Kinsta siempre ha ofrecido una opci\u00f3n para el despliegue autom\u00e1tico, que se activa cada vez que hay un cambio en una rama espec\u00edfica de tu repositorio Git alojado. Sin embargo, esto puede no ser ideal para grandes proyectos con m\u00faltiples miembros del equipo. Muchos <a href=\"https:\/\/kinsta.com\/es\/blog\/tipos-de-desarrolladores\/\">desarrolladores<\/a> tienden a evitar activar el despliegue autom\u00e1tico por diversas razones.<\/p>\n<p>Una raz\u00f3n es que, en un entorno colaborativo en el que varios desarrolladores trabajan en el mismo proyecto, los despliegues autom\u00e1ticos activados por el cambio de un desarrollador en el repositorio pueden provocar inestabilidad y problemas imprevistos. Sin las pruebas y la validaci\u00f3n adecuadas, incluso un peque\u00f1o cambio en el c\u00f3digo podr\u00eda alterar el sitio en producci\u00f3n, causando potencialmente tiempos de inactividad y experiencias negativas para los usuarios.<\/p>\n<p>Aqu\u00ed es donde entra en juego un pipeline de CI\/CD. Creando un flujo de trabajo CI\/CD cuidadosamente orquestado, los desarrolladores pueden asegurarse de que los cambios de c\u00f3digo se someten a pruebas y validaci\u00f3n antes de desplegarse en el sitio en producci\u00f3n. Hay muchas herramientas disponibles para implementar CI\/CD en el desarrollo de software, utilizaremos <a href=\"https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/understanding-github-actions\">GitHub Actions<\/a> para este tutorial.<\/p>\n<h2>\u00bfQu\u00e9 Es GitHub Actions?<\/h2>\n<p>GitHub Actions es una potente herramienta de automatizaci\u00f3n proporcionada por GitHub. Ofrece a los desarrolladores la posibilidad de automatizar varias tareas, procesos y flujos de trabajo dentro de sus proyectos de desarrollo de software. Se integra con los repositorios de GitHub, lo que facilita su uso.<\/p>\n<p>Con las Acciones de GitHub y la <a href=\"https:\/\/api-docs.kinsta.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">API de Kinsta<\/a>, puedes definir flujos de trabajo personalizados que se adapten a los requisitos de tu proyecto. Puedes configurar un pipeline CI que pruebe tu aplicaci\u00f3n y active el despliegue en Kinsta.<\/p>\n<h2>Primeros Pasos con GitHub Actions<\/h2>\n<p>Las Acciones de GitHub se basan en el concepto de flujos de trabajo, que son conjuntos de tareas automatizadas que se activan por eventos espec\u00edficos o se programan a intervalos regulares. Estos eventos pueden incluir env\u00edos de c\u00f3digo, pull requests, creaci\u00f3n de incidencias, etc. Cuando se produce uno de estos eventos, GitHub Actions ejecuta autom\u00e1ticamente un flujo de trabajo asociado, ejecutando una serie de pasos predefinidos.<\/p>\n<p>Cada paso del flujo de trabajo representa una acci\u00f3n concreta, como construir el c\u00f3digo, ejecutar pruebas, desplegar o enviar notificaciones. Creemos un flujo de trabajo con tres tareas:<\/p>\n<ol start=\"1\">\n<li>Comprobar la sintaxis con ESLint<\/li>\n<li>Ejecutar pruebas<\/li>\n<li>Despliega de nuevo tu aplicaci\u00f3n<\/li>\n<\/ol>\n<h3>Paso 1: Configura Tu Repositorio de GitHub<\/h3>\n<p>Para empezar con las Acciones de GitHub, necesitas un repositorio de GitHub.<\/p>\n<p>Aqu\u00ed, estamos utilizando <a href=\"https:\/\/github.com\/kinsta\/chatgpt-clone\">este repositorio de GitHub<\/a>, desarrollado para el tutorial <a href=\"https:\/\/kinsta.com\/es\/blog\/clon-chatgpt\/\">C\u00f3mo Construir y Desplegar una Aplicaci\u00f3n Clonada de ChatGPT con React y la API OpenAI<\/a>.<\/p>\n<p>Si\u00e9ntete libre de utilizar el repositorio t\u00fa mismo navegando hasta \u00e9l en GitHub y seleccionando: <strong>Use this template<\/strong>\u00a0&gt;\u00a0<strong>Create a new repository<\/strong> (<strong>Usar esta plantilla &gt; Crear un nuevo repositorio<\/strong>).<\/p>\n<p>En esta aplicaci\u00f3n React, se crean pruebas unitarias para probar cada componente. Tambi\u00e9n se utiliza ESLint para que la sintaxis y el formato del c\u00f3digo sean perfectos. El pipeline de CI bloquear\u00e1 un despliegue si un pull request o c\u00f3digo fusionado enviado al repositorio no supera las pruebas del flujo de trabajo<\/p>\n<h3>Paso 2: Crear un Archivo de Flujo de Trabajo<\/h3>\n<p>Define tu flujo de trabajo creando un archivo YAML en el directorio <strong>.github\/workflows<\/strong> de tu repositorio. Este directorio debe estar en el nivel root de tu repositorio. La convenci\u00f3n de nomenclatura para los archivos de flujo de trabajo es <strong>nombre-del-flujo-de-trabajo.yml<\/strong>.<\/p>\n<ol start=\"1\">\n<li>En tu repositorio, crea un directorio <strong>.github<\/strong>.<\/li>\n<li>Dentro del directorio <strong>.github<\/strong>, crea un nuevo directorio llamado <strong>workflows<\/strong>.<\/li>\n<li>Dentro del directorio workflows, crea un nuevo archivo con un nombre como <strong>build-test-deploy.yml<\/strong>.<\/li>\n<\/ol>\n<h3>Paso 3: Escribe el Flujo de Trabajo CI\/CD<\/h3>\n<p>Ahora que has creado tu archivo workflow, define un flujo de trabajo con los pasos necesarios para comprobar la sintaxis con ESLint, ejecutar las pruebas y desplegar la aplicaci\u00f3n.<\/p>\n<h4>Crear Evento CI<\/h4>\n<p>Al crear un flujo de trabajo CI, el primer paso es dar un nombre al flujo de trabajo y, a continuaci\u00f3n, establecer el evento que activar\u00eda el flujo de trabajo. Para este ejemplo, los dos eventos son una solicitud de pull y un push a la rama principal.<\/p>\n<pre><code class=\"language-yaml\">name: Build, Test, and Deploy\n\non:\n  push:\n    branches: \"main\"\n  pull_request:\n    branches: \"main\"<\/code><\/pre>\n<p>Si quieres programar trabajos peri\u00f3dicos (CRON jobs) para tareas espec\u00edficas, puedes a\u00f1adirlos al flujo de trabajo. Por ejemplo, puede que quieras ejecutar ciertas tareas como copias de seguridad de la base de datos, limpieza de datos u otras tareas de mantenimiento peri\u00f3dicas.<\/p>\n<p>Aqu\u00ed tienes un ejemplo de c\u00f3mo puedes a\u00f1adir un CRON job al flujo de trabajo:<\/p>\n<pre><code class=\"language-yaml\">on:\n  # Existing event triggers for push and pull_request\n\n  # Add a schedule for CRON jobs\n  schedule:\n    - cron: \"0 0 * * *\"<\/code><\/pre>\n<p>El ejemplo anterior activar\u00e1 el flujo de trabajo todos los d\u00edas a medianoche (hora UTC), ya que la programaci\u00f3n cron est\u00e1 configurada en <code>0 0 * * *<\/code>. Puedes personalizar la programaci\u00f3n cron para adaptarla a tus necesidades espec\u00edficas.<\/p>\n<p>Como otro ejemplo, supongamos que quieres programar el flujo de trabajo CI\/CD para que se ejecute todos los lunes a las 8 a.m. Podemos configurar un CRON job utilizando el evento <code>schedule<\/code>:<\/p>\n<pre><code class=\"language-yaml\">name: Build, Test, and Deploy\n\non:\n  push:\n    branches: \"main\"\n  pull_request:\n    branches: \"main\"\n\n  # Schedule the workflow to run every Monday at 8 a.m. (UTC time)\n  schedule:\n    - cron: \"0 8 * * 1\"\n\njobs:\n # Add jobs<\/code><\/pre>\n<p>La sintaxis de programaci\u00f3n utilizada en el evento <code>schedule<\/code> para los flujos de trabajo de las Acciones de GitHub se basa en la sintaxis cron de UNIX. Te permite definir horas o intervalos espec\u00edficos para que tu flujo de trabajo se ejecute autom\u00e1ticamente. La sintaxis consta de cinco campos que representan diferentes aspectos de la programaci\u00f3n. Cada campo est\u00e1 separado por un espacio. El formato general de la sintaxis de programaci\u00f3n es el siguiente:<\/p>\n<pre><code class=\"language-yaml\">* * * * *\n\u252c \u252c \u252c \u252c \u252c\n\u2502 \u2502 \u2502 \u2502 \u2502\n\u2502 \u2502 \u2502 \u2502 \u2514\u2500 Day of the week (0 - 7) (Sunday to Saturday, where both 0 and 7 represent Sunday)\n\u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500 Month (1 - 12)\n\u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500 Day of the month (1 - 31)\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Hour (0 - 23)\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Minute (0 - 59)<\/code><\/pre>\n<p>Ahora, vamos a desglosar cada campo:<\/p>\n<ul>\n<li><strong>Minuto (0 &#8211; 59):<\/strong> El minuto en el que se activar\u00e1 el cron job. Por ejemplo, <code>15<\/code> significa que el flujo de trabajo se activar\u00e1 en el minuto 15 de la hora.<\/li>\n<li><strong>Hora (0 &#8211; 23):<\/strong> La hora a la que se activar\u00e1 el cron job. Por ejemplo, <code>8<\/code> significa que el flujo de trabajo se activar\u00e1 a las 8 de la ma\u00f1ana.<\/li>\n<li><strong>D\u00eda del mes (1 &#8211; 31):<\/strong> El d\u00eda del mes en el que se activar\u00e1 el cron job. Por ejemplo, <code>1<\/code> significa que el flujo de trabajo se activar\u00e1 el d\u00eda 1 del mes.<\/li>\n<li><strong>Mes (1 &#8211; 12):<\/strong> El mes en el que se activar\u00e1 el cron job. Por ejemplo, <code>6<\/code> significa que el flujo de trabajo se activar\u00e1 en junio.<\/li>\n<li><strong>D\u00eda de la semana (0 &#8211; 7):<\/strong> El d\u00eda de la semana en el que se activar\u00e1 el cron job. Aqu\u00ed, <code>0<\/code> y <code>7<\/code> representan el domingo, mientras que <code>1<\/code> representa el lunes, y as\u00ed sucesivamente. Por ejemplo, <code>4<\/code> significa que el flujo de trabajo se activar\u00e1 el jueves.<\/li>\n<\/ul>\n<p>Caracteres especiales:<\/p>\n<ul>\n<li><code><strong>*<\/strong><\/code> (asterisco): Coincide con cualquier valor de ese campo. Por ejemplo, <code>*<\/code> en el campo minuto significa que el flujo de trabajo se activar\u00e1 cada minuto.<\/li>\n<li><code><strong>*\/n<\/strong><\/code> (barra): Especifica un intervalo. Por ejemplo, <code>*\/5<\/code> en el campo minuto significa que el flujo de trabajo se activar\u00e1 cada 5 minutos.<\/li>\n<li><code><strong>,<\/strong><\/code> (coma): Especifica varios valores espec\u00edficos. Por ejemplo, <code>1,15,30<\/code> en el campo minutos significa que el flujo de trabajo se activar\u00e1 en los minutos 1, 15 y 30 de la hora.<\/li>\n<li><code><strong>-<\/strong><\/code> (gui\u00f3n): Especifica un rango de valores. Por ejemplo, <code>1-5<\/code> en el campo d\u00eda de la semana significa que el flujo de trabajo se activar\u00e1 de lunes a viernes (del 1 al 5).<\/li>\n<li><code><strong>?<\/strong><\/code> (signo de interrogaci\u00f3n): Se utiliza para no especificar ning\u00fan valor concreto. Se suele utilizar en el campo d\u00eda de la semana cuando se especifica el d\u00eda del mes. Por ejemplo, <code>?<\/code> en el campo d\u00eda de la semana y <code>15<\/code> en el campo d\u00eda del mes significa que el flujo de trabajo se activar\u00e1 el d\u00eda 15 del mes, independientemente del d\u00eda de la semana.<\/li>\n<\/ul>\n<h4>Crear una Tarea CI para Comprobar la Sintaxis con ESLint<\/h4>\n<p>Para configurar el proceso CI, crearemos los trabajos o tareas necesarios. Cada trabajo debe tener un nombre claro y comprensible. Vamos a llamar al primer trabajo <code>eslint<\/code>, ya que implicar\u00e1 la comprobaci\u00f3n de la sintaxis del c\u00f3digo utilizando ESLint.<\/p>\n<p>Adem\u00e1s, podemos proporcionar una descripci\u00f3n legible por humanos, aunque esta parte es opcional. A continuaci\u00f3n, especificamos que el trabajo debe ejecutarse en un entorno Ubuntu y utilizar una estrategia matricial para probar el c\u00f3digo contra dos versiones de <a href=\"https:\/\/kinsta.com\/es\/secciones\/node-js\/\">Node.js<\/a>: <code>18.x<\/code> y <code>20.x<\/code>.<\/p>\n<pre><code class=\"language-yaml\">jobs:\n  eslint:\n    name: Check Syntax with ESLint\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18.x, 20.x]<\/code><\/pre>\n<p>A continuaci\u00f3n, define los pasos que ejecutar\u00e1 el trabajo \u00abESLint\u00bb. Estos pasos incluyen la comprobaci\u00f3n del c\u00f3digo, la configuraci\u00f3n de la versi\u00f3n de Node.js especificada para ejecutar ESLint, el almacenamiento en cach\u00e9 de los paquetes npm, la instalaci\u00f3n de las dependencias del proyecto y, por \u00faltimo, la ejecuci\u00f3n de ESLint para comprobar la sintaxis del c\u00f3digo.<\/p>\n<pre><code class=\"language-yaml\">    steps:\n      - name: Checkout code\n        uses: actions\/checkout@v3\n\n      - name: Use Node.js ${{ matrix.node-version }} to Check Lint\n        uses: actions\/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          cache: 'npm'\n\n      - name: Install Dependencies\n        run: npm ci\n\n      - name: Run ESLint\n        run: npm run lint<\/code><\/pre>\n<p>En el flujo de trabajo anterior, a cada paso se le da una descripci\u00f3n con un nombre para facilitar la identificaci\u00f3n del origen de los errores o fallos al inspeccionar el flujo de trabajo desde Acciones de GitHub. En particular, en el tercer paso, utilizamos el comando <code>npm ci<\/code> para instalar las dependencias, que es preferible a <code>npm install<\/code>, ya que realiza una instalaci\u00f3n limpia. Adem\u00e1s, el \u00faltimo paso, ejecutar ESLint utilizando <code>npm run lint<\/code>, supone que has configurado este comando en tu archivo <strong>package.json<\/strong>.<\/p>\n<p>A continuaci\u00f3n se muestra el trabajo completo para comprobar la sintaxis del c\u00f3digo con ESLint:<\/p>\n<pre><code class=\"language-yaml\">jobs:\n  eslint:\n    name: Check Syntax with ESLint\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18.x, 20.x]\n\n    steps:\n      - name: Checkout code\n        uses: actions\/checkout@v3\n\n      - name: Use Node.js ${{ matrix.node-version }} to Check Lint\n        uses: actions\/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          cache: 'npm'\n\n      - name: Install Dependencies\n        run: npm ci\n\n      - name: Run ESLint\n        run: npm run lint<\/code><\/pre>\n<h4>Crear Tarea CI para Ejecutar Pruebas<\/h4>\n<p>Para a\u00f1adir la tarea CI para ejecutar pruebas, empieza por definir el trabajo y darle un nombre descriptivo, como <code>tests<\/code>. Tambi\u00e9n especificaremos que este trabajo depende del trabajo <code>eslint<\/code>, lo que significa que el trabajo <code>eslint<\/code> se ejecutar\u00e1 primero antes de que se ejecute el trabajo <code>tests<\/code>. Esta dependencia garantiza que se compruebe el c\u00f3digo en busca de errores de sintaxis antes de ejecutar las pruebas.<\/p>\n<pre><code class=\"language-yaml\">  tests:\n    name: Run Tests\n    needs: eslint\n    runs-on: ubuntu-latest<\/code><\/pre>\n<p>A continuaci\u00f3n, define los pasos para la tarea <code>tests<\/code>. De forma similar al trabajo anterior, comprobaremos el c\u00f3digo, configuraremos la versi\u00f3n de Node.js <code>18.x<\/code> para ejecutar las pruebas, instalaremos las dependencias del proyecto utilizando <code>npm ci<\/code>, y despu\u00e9s ejecutaremos las pruebas utilizando el comando <code>npm run test<\/code>.<\/p>\n<pre><code class=\"language-yaml\">    steps:\n      - name: Checkout code\n        uses: actions\/checkout@v3\n\n      - name: Use Node.js 18.x to run Test\n        uses: actions\/setup-node@v3\n        with:\n          node-version: 18.x\n          cache: 'npm'\n\n      - name: Install Dependencies\n        run: npm ci\n\n      - name: Run Tests\n        run: npm run test<\/code><\/pre>\n<h4>Crear Tarea CI para Desplegar con la API de Kinsta<\/h4>\n<p>Para crear la tarea CI para desplegar en Kinsta utilizando la API de Kinsta, definiremos el trabajo y lo llamaremos <code>deploy<\/code>. Este trabajo depender\u00e1 de los trabajos <code>eslint<\/code> y <code>tests<\/code>, asegurando que el despliegue se ejecute s\u00f3lo despu\u00e9s de que el c\u00f3digo haya sido comprobado en busca de errores de sintaxis y haya superado las pruebas. Configuraremos el trabajo para que se ejecute en un <a href=\"https:\/\/kinsta.com\/es\/blog\/comprobar-tu-version-de-ubuntu\/\">entorno Ubuntu<\/a> utilizando la \u00faltima versi\u00f3n disponible.<\/p>\n<pre><code class=\"language-yaml\">  deploy:\n    name: Re-Deploy Application\n    needs: [eslint, tests]\n    runs-on: ubuntu-latest<\/code><\/pre>\n<p>A continuaci\u00f3n, define los pasos. En este caso, ejecutar\u00e1s un comando cURL para interactuar con la API de Kinsta de forma program\u00e1tica y activar un nuevo despliegue. Comprendamos primero la API de Kinsta, la diversa informaci\u00f3n necesaria para interactuar con la <a href=\"https:\/\/kinsta.com\/es\/blog\/punto-final-de-la-api\/\">API<\/a>, y c\u00f3mo obtener\/almacenar informaci\u00f3n importante asociada a la API \u2014 como la <a href=\"https:\/\/kinsta.com\/es\/blog\/kinsta-api-key\/\">clave de la API<\/a> \u2014 de forma segura en GitHub.<\/p>\n<h2>Comprender la API de Kinsta<\/h2>\n<p>La <a href=\"https:\/\/kinsta.com\/es\/changelog\/api-kinsta\/\">API de Kinsta<\/a> es una potente herramienta que te permite interactuar con los servicios de Kinsta mediante programaci\u00f3n. Para utilizar la API, debes tener una cuenta con al menos un sitio WordPress, una <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Aplicaci\u00f3n<\/a> o una <a href=\"https:\/\/sevalla.com\/database-hosting\/\">Base de Datos<\/a> en MyKinsta. Tambi\u00e9n necesitas generar una clave API para autenticarte y acceder a tu cuenta a trav\u00e9s de la API.<\/p>\n<p>Para generar una clave API:<\/p>\n<ol start=\"1\">\n<li>Ve a tu panel de MyKinsta.<\/li>\n<li>Ve a la p\u00e1gina <strong>Claves API <\/strong>(<strong>Tu nombre<\/strong> &gt; <strong>Configuraci\u00f3n de la empresa<\/strong> &gt; <strong>Claves API<\/strong>).<\/li>\n<li>Haz clic en <strong>Crear Clave API<\/strong>.<\/li>\n<li>Elige una fecha de caducidad o establece una fecha de inicio personalizada y un n\u00famero de horas para que caduque la clave.<\/li>\n<li>Dale a la clave un nombre \u00fanico.<\/li>\n<li>Haz clic en <strong>Generar<\/strong>.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/create-api-key-on-mykinsta.jpg\" alt=\"Crear Clave API en MyKinsta.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Crear clave API en MyKinsta.<\/figcaption><\/figure>\n<p>Despu\u00e9s de crear una clave API, c\u00f3piala y gu\u00e1rdala en alg\u00fan lugar seguro (recomendamos utilizar un <a href=\"https:\/\/kinsta.com\/es\/blog\/administradores-contrasenas\/\">gestor de contrase\u00f1as<\/a>), ya que es la <strong>\u00fanica vez<\/strong> que se revela dentro de MyKinsta.<\/p>\n<h3>C\u00f3mo Activar el Despliegue con la API de Kinsta<\/h3>\n<p>Para desplegar una aplicaci\u00f3n en Kinsta utilizando la API, necesitas dos par\u00e1metros obligatorios: el ID de la aplicaci\u00f3n y la rama. Puedes recuperar mediante programaci\u00f3n el ID de tu aplicaci\u00f3n consultando primero la lista de tus aplicaciones, que te proporcionar\u00e1 detalles sobre cada aplicaci\u00f3n, incluido su ID.<\/p>\n<p>Una vez obtenida la informaci\u00f3n necesaria, puedes hacer una <a href=\"https:\/\/kinsta.com\/es\/blog\/javascript-peticion-http\/\">solicitud POST<\/a> al endpoint <a href=\"https:\/\/api-docs.kinsta.com\/tag\/Application-Deployments#operation\/manualDeployApplication\" target=\"_blank\" rel=\"noopener noreferrer\">\/applications\/deployments<\/a> de la API. Para la canalizaci\u00f3n CI, utilizaremos cURL, una herramienta de l\u00ednea de comandos para interactuar con URLs.<\/p>\n<pre><code class=\"language-yaml\">curl -i -X POST \n  https:\/\/api.kinsta.com\/v2\/applications\/deployments \n  -H 'Authorization: Bearer &lt;YOUR_TOKEN_HERE&gt;' \n  -H 'Content-Type: application\/json' \n  -d '{\n    \"app_id\": \"&lt;YOUR_APP_ID&gt;\",\n    \"branch\": \"main\"\n  }'<\/code><\/pre>\n<h2>Activar el Despliegue con cURL en el Pipeline CI\/CD<\/h2>\n<p>Para activar el despliegue con la API Kinsta, a\u00f1ade el comando cURL al comando <code>run<\/code> de tu Pipeline de CI. Sin embargo, es importante que almacenes tu clave API y tu ID de aplicaci\u00f3n de forma segura.<\/p>\n<p>Para <a href=\"https:\/\/kinsta.com\/es\/blog\/github-actions-secret\/\">almacenar claves secretas (secrets) en GitHub<\/a> y utilizarlas en GitHub Actions, sigue estos pasos:<\/p>\n<ol start=\"1\">\n<li>Dir\u00edgete al repositorio en el que quieres establecer el \u00absecret\u00bb<\/li>\n<li>Accede a la pesta\u00f1a \u00ab<strong>Settings<\/strong>\u00bb en el men\u00fa principal del repositorio.<\/li>\n<li>En la barra lateral a la izquierda, elige la opci\u00f3n \u00ab<strong>Secrets<\/strong>\u00bb dentro de la secci\u00f3n \u00ab<strong>Options<\/strong>\u00ab.<\/li>\n<li>Pulsa el bot\u00f3n \u00ab<strong>New repository secret<\/strong>\u00ab.<\/li>\n<li>Asigna un nombre a tu secreto, por ejemplo: KINSTA_API_KEY, e introduce la clave API de Kinsta en el espacio designado como \u00ab<strong>Value<\/strong>\u00ab.<\/li>\n<li>Una vez a\u00f1adidos el nombre y el valor, pulsa \u00ab<strong>Add secret\u00bb <\/strong>para guardarlos.<\/li>\n<li>Repite estos pasos para cualquier otro secreto que desees a\u00f1adir.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/storing-secrets-on-github.jpg\" alt=\"Almacenando secrets en GitHub.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Almacenando secrets en GitHub.<\/figcaption><\/figure>\n<p>Una vez que hayas a\u00f1adido los secrets, puedes hacer referencia a ellos en tu flujo de trabajo de GitHub Actions utilizando la sintaxis <code>${{ secrets.SECRET_NAME }}<\/code>.<\/p>\n<p>Ahora vamos a completar el trabajo <code>deploy<\/code> para tu pipeline de CI\/CD de GitHub Actions. Define los pasos igual que antes, con un \u00fanico paso para desplegar en Kinsta. Primero, define los secrets en el comando <code>env<\/code>, y luego a\u00f1ade el comando cURL para ejecutar el despliegue.<\/p>\n<pre><code class=\"language-yaml\">    steps:\n      - name: Deploy to Kinsta\n        env:\n          KINSTA_API_KEY: ${{ secrets.KINSTA_API_KEY }}\n          APP_ID: ${{ secrets.APP_ID }}\n        run: |\n          curl -i -X POST \n            https:\/\/api.kinsta.com\/v2\/applications\/deployments \n            -H \"Authorization: Bearer $KINSTA_API_KEY\" \n            -H \"Content-Type: application\/json\" \n            -d '{\n              \"app_id\": \"'\"$APP_ID\"'\",\n              \"branch\": \"main\"\n            }'<\/code><\/pre>\n<p>En el comando cURL, observar\u00e1s que las variables de entorno se a\u00f1aden dentro del comando, lo que permite acceder de forma segura a los secrets durante el proceso de despliegue.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Este trabajo de CI de <code>deploy<\/code> est\u00e1 dise\u00f1ado para ejecutar el proceso de despliegue utilizando la API de Kinsta. Mostrar\u00e1 un estado correcto incluso si el proceso de despliegue real encuentra alg\u00fan problema o fallo. Esto se debe a que la respuesta del flujo de trabajo se basa en el inicio satisfactorio del despliegue, no en su finalizaci\u00f3n o estado.<\/p>\n<\/aside>\n\n<p>Este es el aspecto que tendr\u00e1 tu flujo de trabajo CI\/CD final:<\/p>\n<pre><code class=\"language-yaml\">name: Build, Test, and Deploy\n\non:\n  push:\n    branches: \"main\"\n  pull_request:\n    branches: \"main\"\n\njobs:\n  eslint:\n    name: Check Syntax with ESLint\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18.x, 20.x]\n\n    steps:\n      - name: Checkout code\n        uses: actions\/checkout@v3\n        \n      - name: Use Node.js ${{ matrix.node-version }} to Check Lint\n        uses: actions\/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          cache: 'npm'\n          \n      - name: Install Dependencies\n        run: npm ci\n        \n      - name: Run ESLint\n        run: npm run lint\n\n  tests:\n    name: Run Tests\n    needs: eslint\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout code\n        uses: actions\/checkout@v3\n        \n      - name: Use Node.js 18.x to run Test\n        uses: actions\/setup-node@v3\n        with:\n          node-version: 18.x\n          cache: 'npm'\n          \n      - name: Install Dependencies\n        run: npm ci\n        \n      - name: Run Tests\n        run: npm run test\n\n  deploy:\n    name: Re-Deploy Application\n    needs: [eslint, tests]\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Deploy to Kinsta\n        env:\n          KINSTA_API_KEY: ${{ secrets.KINSTA_API_KEY }}\n          APP_ID: ${{ secrets.APP_ID }}\n        run: |\n          curl -i -X POST \n            https:\/\/api.kinsta.com\/v2\/applications\/deployments \n            -H \"Authorization: Bearer $KINSTA_API_KEY\" \n            -H \"Content-Type: application\/json\" \n            -d '{\n              \"app_id\": \"'\"$APP_ID\"'\",\n              \"branch\": \"main\"\n            }'<\/code><\/pre>\n<p>Copia el flujo de trabajo dado y p\u00e9galo en tu archivo <strong>build-test-deploy.yml<\/strong>. A continuaci\u00f3n, inicia un pull request para a\u00f1adir este archivo a la rama principal de tu repositorio. Recuerda que este pull request activar\u00e1 autom\u00e1ticamente el flujo de trabajo.<\/p>\n<p>Esto te permite revisar los cambios realizados en tu repositorio y asegurarte de que cualquier nuevo cambio en el pull request cumple las comprobaciones especificadas antes de decidir si lo fusionas en tu c\u00f3digo base.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/storing-secrets-on-github.jpg\" alt=\"Almacenando secrets en GitHub.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Almacenando secrets en GitHub.<\/figcaption><\/figure>\n<p>Cuando fusiones la pull request Ve a la pesta\u00f1a <strong>Actions<\/strong>\u00a0de tu repositorio de GitHub y ver\u00e1s c\u00f3mo se ejecuta el flujo de trabajo CI\/CD.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/github-actions-summary.jpg\" alt=\"Resumen de GitHub Actions\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Resumen de GitHub Actions<\/figcaption><\/figure>\n<p>Puedes hacer clic en cada tarea para ver m\u00e1s detalles sobre ella (por eso debes dar a cada paso de tu tarea una descripci\u00f3n significativa).<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/ci-steps-details.jpg\" alt=\"Detalles de los pasos de CI.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Detalles de los pasos de CI.<\/figcaption><\/figure>\n<h2>Hacer Cumplir el Flujo de Trabajo de las Pull Request en GitHub<\/h2>\n<p>Para garantizar una gesti\u00f3n eficaz del c\u00f3digo y la colaboraci\u00f3n en los repositorios de GitHub, es \u00fatil aplicar un flujo de trabajo de solicitudes de extracci\u00f3n y bloquear los commits directos a la rama principal. Este enfoque establece un proceso de desarrollo controlado y organizado, exigiendo que todos los cambios se sometan a pull requests y revisiones antes de fusionarse en la rama principal.<\/p>\n<p>Adoptando esta pr\u00e1ctica, los equipos de desarrollo pueden mejorar la calidad del c\u00f3digo, minimizar el riesgo de introducir errores y mantener un historial transparente de los cambios.<\/p>\n<p>A continuaci\u00f3n te explicamos c\u00f3mo configurar el cumplimiento del flujo de trabajo de las pull requests:<\/p>\n<ol start=\"1\">\n<li>Haz clic en la pesta\u00f1a <strong>Settings<\/strong>\u00a0de tu repositorio de GitHub.<\/li>\n<li>En <strong>Code and Automation<\/strong>, selecciona <strong>Branches<\/strong>\u00a0en las opciones de la barra lateral.<\/li>\n<li>Si no existen reglas, haz clic en <strong>Add branch protection rule<\/strong>.<\/li>\n<li>Proporciona un nombre para la regla y, a continuaci\u00f3n, marca la casilla \u00a0<strong>Require a pull request before merging<\/strong>. Esto mostrar\u00e1 m\u00e1s opciones de configuraci\u00f3n.<\/li>\n<li>Marca tambi\u00e9n la casilla <strong>Require status checks to pass before merging<\/strong>.<\/li>\n<li>Personaliza las opciones adicionales en funci\u00f3n de tus preferencias y requisitos.<\/li>\n<li>Haz clic en el bot\u00f3n <strong>Create<\/strong>\u00a0para guardar la regla.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/enforcing-pull-request-workflow-on-github.jpg\" alt=\"Aplicaci\u00f3n del flujo de trabajo de las solicitudes de extracci\u00f3n en GitHub\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Aplicaci\u00f3n del flujo de trabajo de solicitudes de extracci\u00f3n en GitHub.<\/figcaption><\/figure>\n<p>Siguiendo estos pasos, habr\u00e1s configurado correctamente una regla para aplicar el flujo de trabajo del pull request en tu repositorio de GitHub. Esto garantiza que todos los cambios se sometan a revisi\u00f3n y a comprobaciones automatizadas antes de fusionarse en la rama principal, fomentando un entorno de desarrollo m\u00e1s fiable y colaborativo.<\/p>\n<h2>Resumen<\/h2>\n<p>Combinando la potencia de las Acciones de GitHub y la API de Kinsta, puedes agilizar tu flujo de trabajo de desarrollo y fomentar un entorno colaborativo y eficiente para tu equipo de desarrollo.<\/p>\n<p>Los desarrolladores pueden aportar c\u00f3digo con confianza, sabiendo que se probar\u00e1 exhaustivamente antes de llegar a producci\u00f3n, y las partes interesadas pueden estar tranquilas sabiendo que el proceso de despliegue est\u00e1 bien controlado y es resistente a errores.<\/p>\n<p><em>\u00bfC\u00f3mo utilizas la API Kinsta? \u00bfQu\u00e9 endpoints te gustar\u00eda que se a\u00f1adieran a la API? \u00bfQu\u00e9 tutorial relacionado con la API Kinsta te gustar\u00eda leer a continuaci\u00f3n?<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el vertiginoso mundo del desarrollo web, la integraci\u00f3n continua y el despliegue continuo (CI\/CD) se han convertido en pr\u00e1cticas indispensables para entregar software de alta &#8230;<\/p>\n","protected":false},"author":287,"featured_media":69259,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1270,1288],"class_list":["post-69258","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api","topic-git"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta<\/title>\n<meta name=\"description\" content=\"Aprende a configurar de forma eficiente un potente canal CI\/CD con GitHub Actions y aprovecha todo el potencial de la API de Kinsta.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta\" \/>\n<meta property=\"og:description\" content=\"Aprende a configurar de forma eficiente un potente canal CI\/CD con GitHub Actions y aprovecha todo el potencial de la API de Kinsta.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-21T13:09:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-25T15:17:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Aprende a configurar de forma eficiente un potente canal CI\/CD con GitHub Actions y aprovecha todo el potencial de la API de Kinsta.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta\",\"datePublished\":\"2023-08-21T13:09:06+00:00\",\"dateModified\":\"2023-08-25T15:17:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/\"},\"wordCount\":3152,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/\",\"name\":\"C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"datePublished\":\"2023-08-21T13:09:06+00:00\",\"dateModified\":\"2023-08-25T15:17:19+00:00\",\"description\":\"Aprende a configurar de forma eficiente un potente canal CI\/CD con GitHub Actions y aprovecha todo el potencial de la API de Kinsta.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta","description":"Aprende a configurar de forma eficiente un potente canal CI\/CD con GitHub Actions y aprovecha todo el potencial de la API de Kinsta.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta","og_description":"Aprende a configurar de forma eficiente un potente canal CI\/CD con GitHub Actions y aprovecha todo el potencial de la API de Kinsta.","og_url":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-08-21T13:09:06+00:00","article_modified_time":"2023-08-25T15:17:19+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Aprende a configurar de forma eficiente un potente canal CI\/CD con GitHub Actions y aprovecha todo el potencial de la API de Kinsta.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Joel Olawanle","Tiempo de lectura":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta","datePublished":"2023-08-21T13:09:06+00:00","dateModified":"2023-08-25T15:17:19+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/"},"wordCount":3152,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/","url":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/","name":"C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","datePublished":"2023-08-21T13:09:06+00:00","dateModified":"2023-08-25T15:17:19+00:00","description":"Aprende a configurar de forma eficiente un potente canal CI\/CD con GitHub Actions y aprovecha todo el potencial de la API de Kinsta.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/como-configurar-pipeline-ci-cd\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/es\/secciones\/api\/"},{"@type":"ListItem","position":3,"name":"C\u00f3mo Crear un Pipeline de CI\/CD con GitHub Actions y la API de Kinsta"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/es\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=69258"}],"version-history":[{"count":10,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69258\/revisions"}],"predecessor-version":[{"id":69382,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69258\/revisions\/69382"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69258\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69258\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69258\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69258\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69258\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69258\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69258\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69258\/translations\/nl"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69258\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/69259"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=69258"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=69258"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=69258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}