{"id":62391,"date":"2023-08-21T10:12:35","date_gmt":"2023-08-21T13:12:35","guid":{"rendered":"https:\/\/kinqsta.com\/pt\/?p=62391&#038;preview=true&#038;preview_id=62391"},"modified":"2023-08-29T09:40:55","modified_gmt":"2023-08-29T12:40:55","slug":"como-configurar-pipeline-ci-cd","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/","title":{"rendered":"Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta"},"content":{"rendered":"<p>No mundo acelerado do <a href=\"https:\/\/kinqsta.com\/web-development\/\">desenvolvimento web<\/a>, a integra\u00e7\u00e3o cont\u00ednua e a implanta\u00e7\u00e3o cont\u00ednua (<a href=\"https:\/\/kinqsta.com\/pt\/blog\/ferramentas-devops\/#devops-pipeline-cicd-tools\">CI\/CD<\/a>) tornaram-se pr\u00e1ticas indispens\u00e1veis para o fornecimento eficiente de software de alta qualidade. A CI\/CD permite que os desenvolvedores automatizem o processo de cria\u00e7\u00e3o, teste e implanta\u00e7\u00e3o de altera\u00e7\u00f5es de c\u00f3digo, reduzindo o risco de erro humano e permitindo itera\u00e7\u00f5es mais r\u00e1pidas.<\/p>\n<p>Este artigo explica a import\u00e2ncia da CI\/CD, como criar um pipeline CI e como configurar a implanta\u00e7\u00e3o cont\u00ednua em seu pipeline CI com a <a href=\"https:\/\/kinqsta.com\/pt\/docs\/kinsta-api\/\">API da Kinsta<\/a> de forma program\u00e1tica &#8211; tudo com o GitHub Actions em seu reposit\u00f3rio <a href=\"https:\/\/kinqsta.com\/pt\/blog\/push-codigo-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>Por que usar CI\/CD?<\/h2>\n<p>A plataforma de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hospedagem de Aplicativos<\/a> da Kinsta sempre ofereceu uma op\u00e7\u00e3o para implanta\u00e7\u00e3o autom\u00e1tica, acionada sempre que h\u00e1 uma altera\u00e7\u00e3o em uma branch espec\u00edfica no seu reposit\u00f3rio Git hospedado. No entanto, isso pode n\u00e3o ser ideal para grandes projetos com v\u00e1rios membros da equipe. Muitos <a href=\"https:\/\/kinqsta.com\/pt\/blog\/tipos-de-desenvolvedores\/\">desenvolvedores<\/a> tendem a evitar a ativa\u00e7\u00e3o da implanta\u00e7\u00e3o autom\u00e1tica por uma variedade de raz\u00f5es.<\/p>\n<p>Um dos motivos \u00e9 que, em um ambiente colaborativo onde v\u00e1rios desenvolvedores est\u00e3o trabalhando no mesmo projeto, implanta\u00e7\u00f5es autom\u00e1ticas acionadas por uma altera\u00e7\u00e3o no reposit\u00f3rio por parte de um desenvolvedor podem levar a instabilidade e problemas imprevistos. Sem testes e valida\u00e7\u00e3o adequados, at\u00e9 mesmo uma pequena altera\u00e7\u00e3o no c\u00f3digo poderia interromper o site de produ\u00e7\u00e3o, causando potencialmente tempo de inatividade e experi\u00eancias negativas para os usu\u00e1rios.<\/p>\n<p>\u00c9 nesse ponto que um pipeline CI\/CD entra em a\u00e7\u00e3o. Ao criar um fluxo de CI\/CD job cuidadosamente orquestrado, os desenvolvedores podem garantir que as altera\u00e7\u00f5es de c\u00f3digo passem por testes e valida\u00e7\u00e3o antes de serem implantadas no site ativo. H\u00e1 muitas ferramentas dispon\u00edveis para implementar a CI\/CD no desenvolvimento de software; usaremos o <a href=\"https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/understanding-github-actions\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Actions<\/a> neste tutorial.<\/p>\n<h2>O que \u00e9 GitHub Actions?<\/h2>\n<p>O GitHub Actions \u00e9 uma poderosa ferramenta de automa\u00e7\u00e3o fornecida pelo GitHub. Ele oferece aos desenvolvedores a capacidade de automatizar v\u00e1rias tarefas, processos e fluxos de trabalho em seus projetos de desenvolvimento de software. Ele se integra aos reposit\u00f3rios do GitHub, tornando f\u00e1cil de usar.<\/p>\n<p>Com o GitHub Actions e a <a href=\"https:\/\/api-docs.kinqsta.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">API da Kinsta<\/a>, voc\u00ea pode definir fluxos de trabalho personalizados que atendam aos requisitos do seu projeto. Voc\u00ea pode configurar um pipeline\u00a0 CI que testa seu aplicativo e aciona a implanta\u00e7\u00e3o na Kinsta.<\/p>\n<h2>Primeiros passos com o GitHub Actions<\/h2>\n<p>O GitHub Actions opera com base no conceito de fluxos de trabalho, que s\u00e3o conjuntos de tarefas automatizadas acionadas por eventos espec\u00edficos ou programadas em intervalos regulares. Esses eventos podem incluir push de c\u00f3digo, pull requests, cria\u00e7\u00e3o de problemas e muito mais. Quando um desses eventos ocorre, o GitHub Actions executa automaticamente um fluxo de trabalho associado, executando uma s\u00e9rie de etapas predefinidas.<\/p>\n<p>Cada etapa do fluxo de trabalho representa uma a\u00e7\u00e3o espec\u00edfica, como a cria\u00e7\u00e3o do c\u00f3digo, a execu\u00e7\u00e3o de testes, a implanta\u00e7\u00e3o ou o envio de notifica\u00e7\u00f5es. Vamos criar um fluxo de trabalho com tr\u00eas tarefas:<\/p>\n<ol start=\"1\">\n<li>Verificar a sintaxe com o ESLint<\/li>\n<li>Executar testes<\/li>\n<li>Reimplantar o aplicativo<\/li>\n<\/ol>\n<h3>Etapa 1: Configure o seu reposit\u00f3rio GitHub<\/h3>\n<p>Para come\u00e7ar a usar o GitHub Actions, voc\u00ea precisa de um reposit\u00f3rio GitHub.<\/p>\n<p>Aqui, estamos usando <a href=\"https:\/\/github.com\/kinsta\/chatgpt-clone\" target=\"_blank\" rel=\"noopener noreferrer\">este reposit\u00f3rio do GitHub<\/a>, desenvolvido para o tutorial <a href=\"https:\/\/kinqsta.com\/pt\/blog\/aplicativo-clone-chatgpt-react-e-api-openai\/\">Como criar e implantar um aplicativo clone do ChatGPT com React e API OpenAI<\/a>.<\/p>\n<p>Sinta-se \u00e0 vontade para usar o reposit\u00f3rio voc\u00ea mesmo, navegando at\u00e9 ele no GitHub e selecionando: <strong>Use this template<\/strong>\u00a0&gt; <strong><span id=\"urn:enhancement-0129d737-5ede-4387-bf0b-84422081026f\" class=\"textannotation\">Create<\/span> a <span id=\"urn:enhancement-629875c4-8aa2-481e-b51b-4ee88a6ec42d\" class=\"textannotation\">new<\/span> <span id=\"urn:enhancement-f901d1a6-7220-438a-aaf9-0ccdac7425ac\" class=\"textannotation\">repository.<\/span><\/strong><\/p>\n<p>Nesse aplicativo React, s\u00e3o criados testes de unidade para testar cada componente. O ESLint tamb\u00e9m \u00e9 usado para refor\u00e7ar a sintaxe perfeita e a formata\u00e7\u00e3o do c\u00f3digo. O pipeline CI bloquear\u00e1 uma implanta\u00e7\u00e3o se um pull request ou c\u00f3digo mesclado enviado para o reposit\u00f3rio falhar nos testes de fluxo de trabalho.<\/p>\n<h3>Etapa 2: crie um arquivo de fluxo de trabalho<\/h3>\n<p>Defina seu fluxo de trabalho criando um arquivo YAML no diret\u00f3rio <strong>.github\/workflows<\/strong> do seu reposit\u00f3rio. Esse diret\u00f3rio deve estar no n\u00edvel raiz do seu reposit\u00f3rio. A conven\u00e7\u00e3o de nomenclatura para arquivos de fluxo de trabalho \u00e9 <strong>name-of-the-workflow.yml<\/strong>.<\/p>\n<ol start=\"1\">\n<li>Em seu reposit\u00f3rio, crie um diret\u00f3rio <strong>.github<\/strong>.<\/li>\n<li>Dentro do diret\u00f3rio <strong>.github<\/strong>, crie um novo diret\u00f3rio chamado <strong>workflows<\/strong>.<\/li>\n<li>Dentro do diret\u00f3rio de fluxos de trabalho, crie um novo arquivo com um nome como <strong>build-test-deploy.yml<\/strong>.<\/li>\n<\/ol>\n<h3>Etapa 3: Escreva o fluxo de CI\/CD job<\/h3>\n<p>Agora que voc\u00ea criou o arquivo de fluxo de trabalho, defina um fluxo de trabalho com as etapas necess\u00e1rias para verificar a sintaxe com o ESLint, executar testes e implantar o aplicativo.<\/p>\n<h4>Crie evento CI<\/h4>\n<p>Ao criar um pipeline CI, a primeira etapa \u00e9 dar um nome ao fluxo de trabalho e, em seguida, definir o evento que acionaria o fluxo de trabalho. Neste exemplo, dois eventos (pull request e push) para a branch 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>Se quiser agendar tarefas <span class=\"sw\">recorrentes<\/span> (<span id=\"urn:enhancement-af8840a9-75bf-458c-ba6d-91a566257c3f\" class=\"textannotation\">CRON<\/span> <span id=\"urn:enhancement-c4d144b9-a224-4622-9bcd-c23dd03874dc\" class=\"textannotation\">jobs<\/span>) para tarefas espec\u00edficas, voc\u00ea poder\u00e1 adicion\u00e1-los ao fluxo de trabalho. Por exemplo, voc\u00ea pode querer executar determinadas tarefas como backups de banco de dados, limpeza de dados ou outras tarefas de manuten\u00e7\u00e3o peri\u00f3dica.<\/p>\n<p>Aqui est\u00e1 um exemplo de como voc\u00ea pode adicionar um Cron jobs ao fluxo de trabalho:<\/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>O exemplo acima acionar\u00e1 o fluxo de trabalho todos os dias \u00e0 meia-noite (hor\u00e1rio UTC), j\u00e1 que a programa\u00e7\u00e3o do cron est\u00e1 definida como <code>0 0 * * *<\/code>. Voc\u00ea pode personalizar a programa\u00e7\u00e3o do cron para atender \u00e0s suas necessidades espec\u00edficas.<\/p>\n<p>Como outro exemplo, suponha que voc\u00ea queira programar o fluxo de CI\/CD job para ser executado todas as segundas-feiras \u00e0s 8h. Podemos configurar um Cron job usando o 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>A sintaxe de agendamento usada no evento <code>schedule<\/code> para fluxos de trabalho do GitHub Actions \u00e9 baseada na sintaxe cron do UNIX. Ela permite que voc\u00ea defina hor\u00e1rios ou intervalos espec\u00edficos para que o seu fluxo de trabalho seja executado automaticamente. A sintaxe consiste em cinco campos que representam diferentes aspectos do cronograma. Cada campo \u00e9 separado por um espa\u00e7o. O formato geral da sintaxe do cronograma \u00e9 o seguinte:<\/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>Agora, vamos detalhar cada campo:<\/p>\n<ul>\n<li><strong>Minuto (0 &#8211; 59):<\/strong> O minuto em que o cron job ser\u00e1 acionado. Por exemplo, <code>15<\/code> significa que o fluxo de trabalho ser\u00e1 acionado no 15\u00ba minuto da hora.<\/li>\n<li><strong>Hora (0 &#8211; 23):<\/strong> A hora em que o cron job ser\u00e1 acionado. Por exemplo, <code>8<\/code> significa que o fluxo de trabalho ser\u00e1 acionado \u00e0s 8 horas da manh\u00e3.<\/li>\n<li><strong>Dia do m\u00eas (1 &#8211; 31):<\/strong> O dia do m\u00eas em que o cron job ser\u00e1 acionado. Por exemplo, <code>1<\/code> significa que o fluxo de trabalho ser\u00e1 acionado no primeiro dia do m\u00eas.<\/li>\n<li><strong>M\u00eas (1 &#8211; 12):<\/strong> O m\u00eas em que o cron job ser\u00e1 acionado. Por exemplo, <code>6<\/code> significa que o fluxo de trabalho ser\u00e1 acionado em junho.<\/li>\n<li><strong>Dia da semana (0 &#8211; 7):<\/strong> O dia da semana em que o cron job ser\u00e1 acionado. Aqui, <code>0<\/code> e <code>7<\/code> representam domingo, enquanto <code>1<\/code> representa segunda-feira, e assim por diante. Por exemplo, <code>4<\/code> significa que o fluxo de trabalho ser\u00e1 acionado na quinta-feira.<\/li>\n<\/ul>\n<p>Caracteres especiais:<\/p>\n<ul>\n<li><code><strong>*<\/strong><\/code> (asterisco): Corresponde a qualquer valor desse campo. Por exemplo, <code>*<\/code> no campo minuto significa que o fluxo de trabalho ser\u00e1 acionado a cada minuto.<\/li>\n<li><code><strong>*\/n<\/strong><\/code> (barra): Especifica um intervalo. Por exemplo, <code>*\/5<\/code> no campo de minuto significa que o fluxo de trabalho ser\u00e1 acionado a cada 5 minutos.<\/li>\n<li><code><strong>,<\/strong><\/code> (v\u00edrgula): Especifica v\u00e1rios valores espec\u00edficos. Por exemplo, <code>1,15,30<\/code> no campo de minuto significa que o fluxo de trabalho ser\u00e1 acionado no 1\u00ba, 15\u00ba e 30\u00ba minutos da hora.<\/li>\n<li><code><strong>-<\/strong><\/code> (h\u00edfen): Especifica um intervalo de valores. Por exemplo, <code>1-5<\/code> no campo de dia da semana significa que o fluxo de trabalho ser\u00e1 acionado de segunda a sexta-feira (1 a 5).<\/li>\n<li><code><strong>?<\/strong><\/code> (ponto de interroga\u00e7\u00e3o): Usado para especificar nenhum valor espec\u00edfico. \u00c9 comumente usado no campo dia da semana quando o dia do m\u00eas \u00e9 especificado. Por exemplo, <code>?<\/code> no campo do dia da semana e <code>15<\/code> no campo do dia do m\u00eas significa que o fluxo de trabalho ser\u00e1 acionado no 15\u00ba dia do m\u00eas, independentemente do dia da semana.<\/li>\n<\/ul>\n<h4>Criar um CI job para verificar a sintaxe com o ESLint<\/h4>\n<p>Para configurar o processo de Integra\u00e7\u00e3o Cont\u00ednua (CI), criaremos as tarefas ou trabalhos necess\u00e1rios. Cada trabalho deve ter um nome claro e compreens\u00edvel. Vamos nomear o primeiro trabalho de <code>eslint<\/code>, j\u00e1 que ele envolver\u00e1 a verifica\u00e7\u00e3o da sintaxe do c\u00f3digo utilizando o ESLint.<\/p>\n<p>Al\u00e9m disso, podemos fornecer uma descri\u00e7\u00e3o leg\u00edvel por humanos, embora essa parte seja opcional. Em seguida, especificamos que o trabalho deve ser executado em um ambiente Ubuntu e utilizar uma estrat\u00e9gia de array para testar o c\u00f3digo em duas vers\u00f5es do <a href=\"https:\/\/kinqsta.com\/pt\/topicos\/node-js\/\">Node.js<\/a>: <code>18.x<\/code> e <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>Em seguida, defina as etapas que o trabalho &#8220;ESLint&#8221; executar\u00e1. Essas etapas incluem a verifica\u00e7\u00e3o do c\u00f3digo, a configura\u00e7\u00e3o da vers\u00e3o espec\u00edfica do Node.js para executar o ESLint, o armazenamento em cache dos pacotes npm, a instala\u00e7\u00e3o das depend\u00eancias do projeto e, por fim, a execu\u00e7\u00e3o do ESLint para verificar a sintaxe do 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>No fluxo de trabalho acima, cada etapa recebe uma descri\u00e7\u00e3o com um nome para facilitar a identifica\u00e7\u00e3o da fonte de erros ou bugs ao inspecionar o fluxo de trabalho a partir do GitHub Actions. Notavelmente, na terceira etapa, usamos o comando <code>npm ci<\/code> para instalar depend\u00eancias, que \u00e9 prefer\u00edvel a <code>npm install<\/code>, pois ele executa uma instala\u00e7\u00e3o limpa. Al\u00e9m disso, a \u00faltima etapa, executar o ESLint usando <code>npm run lint<\/code>, pressup\u00f5e que voc\u00ea tenha configurado esse comando no arquivo <strong>package.json<\/strong>.<\/p>\n<p>Abaixo voc\u00ea encontra o trabalho completo para verificar a sintaxe do c\u00f3digo com o 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>Crie CI job para executar testes<\/h4>\n<p>Para adicionar o CI job para executar testes, comece definindo o trabalho e fornecendo um nome descritivo, como <code>tests<\/code>. Tamb\u00e9m especificaremos que esse trabalho depende do <code>eslint<\/code> job, o que significa que o <code>eslint<\/code> job ser\u00e1 executado primeiro, antes que a tarefa <code>tests<\/code> seja executado. Essa depend\u00eancia garante que o c\u00f3digo seja verificado quanto a erros de sintaxe antes de executar os testes.<\/p>\n<pre><code class=\"language-yaml\">  tests:\n    name: Run Tests\n    needs: eslint\n    runs-on: ubuntu-latest<\/code><\/pre>\n<p>Em seguida, defina as etapas para o trabalho <code>tests<\/code>. Da mesma forma que o trabalho anterior, verificaremos o c\u00f3digo, configuraremos a vers\u00e3o do Node.js <code>18.x<\/code> para executar os testes, instalaremos as depend\u00eancias do projeto usando <code>npm ci<\/code> e, em seguida, executaremos os testes usando o 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>Crie CI job para implantar com a API da Kinsta<\/h4>\n<p>Para criar o CI job para implanta\u00e7\u00e3o na Kinsta usando a API da Kinsta, definiremos o trabalho e o nomearemos <code>deploy<\/code>. Esse trabalho ter\u00e1 depend\u00eancias nos trabalhos <code>eslint<\/code> e <code>tests<\/code>, garantindo que a implanta\u00e7\u00e3o seja executada somente depois que o c\u00f3digo tiver sido verificado quanto a erros de sintaxe e passado nos testes. Configuraremos o trabalho para ser executado em um <a href=\"https:\/\/kinqsta.com\/pt\/blog\/verificar-versao-ubuntu\/\">ambiente Ubuntu<\/a> usando a vers\u00e3o mais recente dispon\u00edvel.<\/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>Em seguida, defina as etapas. Nesse caso, voc\u00ea executar\u00e1 um comando cURL para interagir com a API da Kinsta de forma program\u00e1tica e acionar uma reimplanta\u00e7\u00e3o. Primeiro, vamos entender a API da Kinsta, as v\u00e1rias informa\u00e7\u00f5es necess\u00e1rias para interagir com a <a href=\"https:\/\/kinqsta.com\/pt\/blog\/endpoint-api\/\">API<\/a> e como obter\/armazenar informa\u00e7\u00f5es importantes associadas \u00e0 API &#8211; como a <a href=\"https:\/\/kinqsta.com\/pt\/blog\/chave-api-kinsta\/\">chave API<\/a> &#8211; com seguran\u00e7a no GitHub.<\/p>\n<h2>Entendendo a API da Kinsta<\/h2>\n<p>A <a href=\"https:\/\/kinqsta.com\/pt\/changelog\/kinsta-api\/\">API da Kinsta<\/a> \u00e9 uma ferramenta poderosa que permite que voc\u00ea interaja com os servi\u00e7os da Kinsta de forma program\u00e1tica. Para usar a API, voc\u00ea deve ter uma conta com pelo menos um site WordPress, <a href=\"https:\/\/sevalla.com\/application-hosting\/\">aplicativo<\/a> ou <a href=\"https:\/\/sevalla.com\/database-hosting\/\">banco de dados<\/a> no MyKinsta. Voc\u00ea tamb\u00e9m precisa gerar uma chave API para autenticar e acessar sua conta atrav\u00e9s da API.<\/p>\n<p>Para gerar uma chave API:<\/p>\n<ol start=\"1\">\n<li>V\u00e1 para o painel MyKinsta.<\/li>\n<li>Navegue at\u00e9 a p\u00e1gina <strong>Chaves API <\/strong>(<strong>Seu nome<\/strong> &gt; <strong>Configura\u00e7\u00f5es da empresa<\/strong> &gt; <strong>Chaves API<\/strong>).<\/li>\n<li>Clique em <strong>Criar chave\u00a0API<\/strong>.<\/li>\n<li>Escolha uma expira\u00e7\u00e3o ou defina uma data de in\u00edcio personalizada e o n\u00famero de horas para a chave expirar.<\/li>\n<li>D\u00ea \u00e0 chave um nome exclusivo.<\/li>\n<li>Clique em <strong>Gerar<\/strong>.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/create-api-key-on-mykinsta.jpg\" alt=\"Criar chave de API no MyKinsta.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Criar chave de API no MyKinsta.<\/figcaption><\/figure>\n<p>Ap\u00f3s criar uma chave de API, copie e armazene em um local seguro (recomendamos que voc\u00ea use um <a href=\"https:\/\/kinqsta.com\/pt\/blog\/gerenciadores-de-senhas\/\">gerenciador de senhas<\/a>), pois essa \u00e9 a <strong>\u00fanica vez que<\/strong> ela \u00e9 revelada no MyKinsta.<\/p>\n<h3>Como acionar a implanta\u00e7\u00e3o com a API da Kinsta<\/h3>\n<p>Para implantar um aplicativo na Kinsta usando a API, voc\u00ea precisa de dois par\u00e2metros obrigat\u00f3rios: o ID do aplicativo e a branch. Voc\u00ea pode recuperar programaticamente o ID do seu aplicativo buscando primeiro a lista de seus aplicativos, que fornecer\u00e1 detalhes sobre cada aplicativo, incluindo seu ID.<\/p>\n<p>Ap\u00f3s obter as informa\u00e7\u00f5es necess\u00e1rias, voc\u00ea pode fazer uma <a href=\"https:\/\/kinqsta.com\/pt\/blog\/solicitacoes-http-javascript\/\">solicita\u00e7\u00e3o POST<\/a> para o endpoint <a href=\"https:\/\/api-docs.kinqsta.com\/tag\/Application-Deployments#operation\/manualDeployApplication\" target=\"_blank\" rel=\"noopener noreferrer\">\/applications\/deployments<\/a> da API. Para o pipeline CI, usaremos o cURL, uma ferramenta de linha de comando para interagir com URLs.<\/p>\n<pre><code class=\"language-yaml\">curl -i -X POST \n  https:\/\/api.kinqsta.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>Acionando a implementa\u00e7\u00e3o do cURL no pipeline CI\/CD<\/h2>\n<p>Para acionar a implanta\u00e7\u00e3o com a API da Kinsta, adicione o comando cURL ao comando <code>run<\/code> do seu pipeline CI. No entanto, \u00e9 importante que voc\u00ea armazene sua chave de API e o ID do aplicativo de forma segura.<\/p>\n<p>Para <a href=\"https:\/\/kinqsta.com\/pt\/blog\/segredos-github-actions\/\">armazenar segredos no GitHub<\/a> e us\u00e1-los no GitHub Actions, siga estas etapas:<\/p>\n<ol start=\"1\">\n<li>Navegue at\u00e9 o reposit\u00f3rio onde voc\u00ea deseja configurar o segredo.<\/li>\n<li>Clique na aba <strong>Settings\u00a0<\/strong>no menu do reposit\u00f3rio.<\/li>\n<li>Na barra lateral esquerda, selecione <strong>Secrets<\/strong> na categoria <strong>Options<\/strong>.<\/li>\n<li>Clique em <strong>New <span id=\"urn:enhancement-a68d2815-1149-459b-93fc-84c4878e2ebc\" class=\"textannotation\">repository<\/span> secret<\/strong>.<\/li>\n<li>Forne\u00e7a um nome para o seu segredo (como <code>KINSTA_API_KEY<\/code>) e insira sua chave de API da Kinsta no campo <strong>Value<\/strong>.<\/li>\n<li>Depois que voc\u00ea digitar o nome e o valor, clique no bot\u00e3o <strong>Add secret<\/strong>\u00a0para salv\u00e1-lo. Repita o processo para outros segredos.<\/li>\n<li>Repita o processo para outros segredos.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/storing-secrets-on-github.jpg\" alt=\"Armazenando segredos no GitHub.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Armazenando segredos no GitHub.<\/figcaption><\/figure>\n<p>Ap\u00f3s adicionar os segredos, voc\u00ea pode fazer refer\u00eancia a eles no seu fluxo de trabalho do GitHub Actions usando a sintaxe <code>${{ secrets.SECRET_NAME }}<\/code>.<\/p>\n<p>Agora, vamos concluir o <code>deploy<\/code> para o pipeline CI\/CD do GitHub Actions. Defina as etapas exatamente como antes, com uma \u00fanica etapa para implantar na Kinsta. Primeiro, defina os segredos no comando <code>env<\/code> e, em seguida, adicione o comando cURL para executar a implanta\u00e7\u00e3o.<\/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.kinqsta.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>No comando cURL, voc\u00ea perceber\u00e1 que as vari\u00e1veis de ambiente s\u00e3o adicionadas ao comando, permitindo que os segredos sejam acessados com seguran\u00e7a durante o processo de implanta\u00e7\u00e3o.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Este trabalho CI <code>deploy<\/code> foi projetado para executar o processo de implanta\u00e7\u00e3o usando a API da Kinsta. Ele exibir\u00e1 um status de sucesso mesmo que o processo de implanta\u00e7\u00e3o real encontre problemas ou falhas. Isso ocorre porque a resposta do fluxo de trabalho se baseia no in\u00edcio bem-sucedido da implanta\u00e7\u00e3o, n\u00e3o em sua conclus\u00e3o ou status.<\/p>\n<\/aside>\n\n<p>\u00c9 assim que voc\u00ea ver\u00e1 o fluxo de trabalho final de CI\/CD:<\/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.kinqsta.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>Copie o fluxo de trabalho fornecido e cole-o em seu arquivo <strong>build-test-deploy.yml<\/strong>. Em seguida, inicie um pull request para adicionar esse arquivo ao branch principal do seu reposit\u00f3rio. Lembre-se de que essa pull request acionar\u00e1 automaticamente o fluxo de trabalho.<\/p>\n<p>Isso possibilita que voc\u00ea analise as mudan\u00e7as realizadas no seu reposit\u00f3rio e assegure que quaisquer novas altera\u00e7\u00f5es na solicita\u00e7\u00e3o de pull (pull request) cumpram com as verifica\u00e7\u00f5es especificadas. Assim, voc\u00ea pode decidir se deve ou n\u00e3o integrar essas altera\u00e7\u00f5es na sua base de c\u00f3digo.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/storing-secrets-on-github.jpg\" alt=\"Armazene segredos no GitHub.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Armazene segredos no GitHub.<\/figcaption><\/figure>\n<p>Quando voc\u00ea realizar a integra\u00e7\u00e3o da solicita\u00e7\u00e3o de pull (pull request), n<span style=\"font-size: 1.125rem\">avegue at\u00e9 a aba <b>Actions <\/b><\/span><span style=\"font-size: 1.125rem\">do seu reposit\u00f3rio do GitHub e voc\u00ea ver\u00e1 o fluxo de CI\/CD job em execu\u00e7\u00e3o.<\/span><\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/github-actions-summary.jpg\" alt=\"Resumo das a\u00e7\u00f5es do GitHub.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Resumo das a\u00e7\u00f5es do GitHub.<\/figcaption><\/figure>\n<p>Voc\u00ea pode clicar em cada tarefa para ver mais detalhes sobre o job (\u00e9 por isso que voc\u00ea precisa dar a cada etapa do seu trabalho uma descri\u00e7\u00e3o significativa).<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/ci-steps-details.jpg\" alt=\"Detalhes das etapas de CI.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Detalhes das etapas de CI.<\/figcaption><\/figure>\n<h2>Aplica\u00e7\u00e3o do fluxo de trabalho de pull request no GitHub<\/h2>\n<p>Para garantir o gerenciamento eficaz do c\u00f3digo e a colabora\u00e7\u00e3o nos reposit\u00f3rios do GitHub, \u00e9 \u00fatil que voc\u00ea aplique um fluxo de trabalho de pull request e bloqueie os commits diretos no branch principal. Essa abordagem estabelece um processo de desenvolvimento controlado e organizado, exigindo que todas as altera\u00e7\u00f5es passem por pull requests e revis\u00f5es antes de serem mescladas na branch principal.<\/p>\n<p>Ao adotar essa pr\u00e1tica, as equipes de desenvolvimento podem melhorar a qualidade do c\u00f3digo, minimizar o risco de introdu\u00e7\u00e3o de bugs e manter um hist\u00f3rico transparente das altera\u00e7\u00f5es.<\/p>\n<p>Veja como configurar a aplica\u00e7\u00e3o do fluxo de trabalho de pull request:<\/p>\n<ol start=\"1\">\n<li>Clique na aba <strong>Settings\u00a0<\/strong>em seu reposit\u00f3rio do GitHub.<\/li>\n<li>Em <strong>Code and Automation<\/strong>, selecione <strong>Branches <\/strong>nas op\u00e7\u00f5es da barra lateral.<\/li>\n<li>Se n\u00e3o houver regras, clique em <strong>Add <span id=\"urn:enhancement-7ea7ca76-0c0d-4e7c-8cc5-f44d2a748e8c\" class=\"textannotation\">branch<\/span> protection rule<\/strong>.<\/li>\n<li>Forne\u00e7a um nome para a regra e marque a caixa <strong>Require a <span id=\"urn:enhancement-e4567b4b-a91c-4a19-98d1-88a037ca297f\" class=\"textannotation\">pull request<\/span> before merging<\/strong>\u00a0merge. Isso exibir\u00e1 mais op\u00e7\u00f5es de configura\u00e7\u00e3o.<\/li>\n<li>Al\u00e9m disso, marque a caixa <strong>Require status <span id=\"urn:enhancement-4b88b2d1-02fe-47c4-8b63-987f28cbc0ae\" class=\"textannotation\">checks<\/span> to pass before merging<\/strong>.<\/li>\n<li>Personalize as op\u00e7\u00f5es adicionais com base em suas prefer\u00eancias e requisitos.<\/li>\n<li>Clique no bot\u00e3o <strong>Create<\/strong>\u00a0para salvar a regra.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/enforcing-pull-request-workflow-on-github.jpg\" alt=\"Aplicando o fluxo de trabalho pull request no GitHub.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Aplicando o fluxo de trabalho pull request no GitHub.<\/figcaption><\/figure>\n<p>Ao seguir esses passos, voc\u00ea configurou com sucesso uma regra para aplicar o fluxo de trabalho de solicita\u00e7\u00e3o de pull (pull request) no seu reposit\u00f3rio GitHub. Isso garante que todas as altera\u00e7\u00f5es sejam submetidas \u00e0 revis\u00e3o e verifica\u00e7\u00f5es automatizadas antes de serem integradas \u00e0 branch principal, promovendo um ambiente de desenvolvimento mais confi\u00e1vel e colaborativo.<\/p>\n<h2>Resumo<\/h2>\n<p>Ao combinar o poder do GitHub Actions e da API da Kinsta, voc\u00ea pode simplificar o fluxo de trabalho de desenvolvimento e promover um ambiente colaborativo e eficiente para \u00e0 sua equipe de desenvolvimento.<\/p>\n<p>Os desenvolvedores podem contribuir com o c\u00f3digo com confian\u00e7a, sabendo que ele ser\u00e1 testado minuciosamente antes de chegar \u00e0 produ\u00e7\u00e3o, e as partes interessadas podem ficar tranquilas sabendo que o processo de implanta\u00e7\u00e3o \u00e9 bem controlado e resistente a erros.<\/p>\n<div class=\"group w-full text-token-text-primary border-b border-black\/10 dark:border-gray-900\/50 bg-gray-50 dark:bg-[#444654]\">\n<div class=\"flex p-4 gap-4 text-base md:gap-6 md:max-w-2xl lg:max-w-[38rem] xl:max-w-3xl md:py-6 lg:px-0 m-auto\">\n<div class=\"relative flex w-[calc(100%-50px)] flex-col gap-1 md:gap-3 lg:w-[calc(100%-115px)]\">\n<div class=\"flex flex-grow flex-col gap-3 max-w-full\">\n<div class=\"min-h-[20px] flex flex-col items-start gap-3 overflow-x-auto whitespace-pre-wrap break-words\">\n<div class=\"markdown prose w-full break-words dark:prose-invert dark\">\n<p><em>Como voc\u00ea est\u00e1 usando a API da Kinsta? Quais Endpoints voc\u00ea gostaria de ver adicionados \u00e0 API? Qual tutorial relacionado \u00e0 API da Kinsta voc\u00ea gostaria de ler a seguir?<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>No mundo acelerado do desenvolvimento web, a integra\u00e7\u00e3o cont\u00ednua e a implanta\u00e7\u00e3o cont\u00ednua (CI\/CD) tornaram-se pr\u00e1ticas indispens\u00e1veis para o fornecimento eficiente de software de alta qualidade. &#8230;<\/p>\n","protected":false},"author":287,"featured_media":62392,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[951,969],"class_list":["post-62391","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>Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta<\/title>\n<meta name=\"description\" content=\"Aprenda como configurar eficientemente um poderoso pipeline CI\/CD com o GitHub Actions e aproveitar todo o potencial da API da 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:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta\" \/>\n<meta property=\"og:description\" content=\"Aprenda como configurar eficientemente um poderoso pipeline CI\/CD com o GitHub Actions e aproveitar todo o potencial da API da Kinsta.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/pt\/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\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-21T13:12:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-29T12:40:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/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=\"Aprenda como configurar eficientemente um poderoso pipeline CI\/CD com o GitHub Actions e aproveitar todo o potencial da API da Kinsta.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/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_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\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:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta\",\"datePublished\":\"2023-08-21T13:12:35+00:00\",\"dateModified\":\"2023-08-29T12:40:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/\"},\"wordCount\":3106,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/\",\"name\":\"Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"datePublished\":\"2023-08-21T13:12:35+00:00\",\"dateModified\":\"2023-08-29T12:40:55+00:00\",\"description\":\"Aprenda como configurar eficientemente um poderoso pipeline CI\/CD com o GitHub Actions e aproveitar todo o potencial da API da Kinsta.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinqsta.com\/pt\/topicos\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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:\/\/kinqsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/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:\/\/kinqsta.com\/pt\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta","description":"Aprenda como configurar eficientemente um poderoso pipeline CI\/CD com o GitHub Actions e aproveitar todo o potencial da API da 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:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/","og_locale":"pt_PT","og_type":"article","og_title":"Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta","og_description":"Aprenda como configurar eficientemente um poderoso pipeline CI\/CD com o GitHub Actions e aproveitar todo o potencial da API da Kinsta.","og_url":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-08-21T13:12:35+00:00","article_modified_time":"2023-08-29T12:40:55+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Aprenda como configurar eficientemente um poderoso pipeline CI\/CD com o GitHub Actions e aproveitar todo o potencial da API da Kinsta.","twitter_image":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Joel Olawanle","Tempo estimado de leitura":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta","datePublished":"2023-08-21T13:12:35+00:00","dateModified":"2023-08-29T12:40:55+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/"},"wordCount":3106,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/","url":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/","name":"Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","datePublished":"2023-08-21T13:12:35+00:00","dateModified":"2023-08-29T12:40:55+00:00","description":"Aprenda como configurar eficientemente um poderoso pipeline CI\/CD com o GitHub Actions e aproveitar todo o potencial da API da Kinsta.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#primaryimage","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/pt\/blog\/como-configurar-pipeline-ci-cd\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinqsta.com\/pt\/topicos\/api\/"},{"@type":"ListItem","position":3,"name":"Como Criar um Pipeline CI\/CD com GitHub Actions e a API da Kinsta"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/pt\/#website","url":"https:\/\/kinqsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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:\/\/kinqsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/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:\/\/kinqsta.com\/pt\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/62391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/comments?post=62391"}],"version-history":[{"count":8,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/62391\/revisions"}],"predecessor-version":[{"id":62569,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/62391\/revisions\/62569"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62391\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62391\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62391\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62391\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62391\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62391\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62391\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62391\/translations\/nl"},{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62391\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media\/62392"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media?parent=62391"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/tags?post=62391"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/topic?post=62391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}