{"id":72482,"date":"2023-08-21T14:10:34","date_gmt":"2023-08-21T13:10:34","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=72482&#038;preview=true&#038;preview_id=72482"},"modified":"2023-11-03T10:03:44","modified_gmt":"2023-11-03T09:03:44","slug":"come-creare-una-pipeline-ci-cd","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/","title":{"rendered":"Come creare una pipeline CI\/CD con GitHub Actions e l&#8217;API di Kinsta"},"content":{"rendered":"<p>Nel frenetico mondo dello <a href=\"https:\/\/kinsta.com\/web-development\/\">sviluppo web<\/a>, integrazione continua e distribuzione continua (<a href=\"https:\/\/kinsta.com\/it\/blog\/strumenti-devops\/#devops-pipeline-cicd-tools\">CI\/CD<\/a>) sono diventate prassi indispensabili per fornire software di alta qualit\u00e0 in modo efficiente. Il CI\/CD permette agli sviluppatori di automatizzare il processo di creazione, test e distribuzione delle modifiche al codice, riducendo il rischio di errori umani e favorendo iterazioni pi\u00f9 rapide.<\/p>\n<p>Questo articolo spiega l&#8217;importanza del CI\/CD, come creare una pipeline CI e come impostare in modo programmatico la distribuzione continua nella propria pipeline CI con l&#8217;<a href=\"https:\/\/kinsta.com\/it\/docs\/kinsta-api\/\">API di Kinsta<\/a>, il tutto usando GitHub Actions nel proprio repository <a href=\"https:\/\/kinsta.com\/it\/blog\/come-inviare-codice-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>Perch\u00e9 usare il CI\/CD?<\/h2>\n<p>La piattaforma di <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hosting di Applicazioni<\/a> di Kinsta ha sempre reso disponibile un&#8217;opzione per il deployment automatico che si attiva ogni volta che viene apportata una modifica a un branch specifico del repository Git ospitato. Tuttavia, questo potrebbe non essere l&#8217;ideale per progetti di grandi dimensioni con pi\u00f9 membri all&#8217;interno del team. Molti <a href=\"https:\/\/kinsta.com\/it\/blog\/tipi-di-developer\/\">sviluppatori<\/a> tendono a non abilitare la distribuzione automatica per diversi motivi.<\/p>\n<p>Uno di questi \u00e8 che, in un ambiente collaborativo con pi\u00f9 sviluppatori sullo stesso progetto, le distribuzioni automatiche attivate dalla modifica di uno sviluppatore al repository possono generare instabilit\u00e0 e altri problemi non sempre prevedibili. Senza una verifica e una convalida adeguate, anche una piccola modifica al codice potrebbe disturbare il sito live, generando possibili interruzioni e portando ad esperienze negative per gli utenti.<\/p>\n<p>\u00c8 qui che entra in gioco una pipeline CI\/CD. Creando un workflow CI\/CD accuratamente orchestrato, gli sviluppatori possono assicurarsi che le modifiche al codice vengano sottoposte a test e convalida prima di essere distribuite al sito live. Esistono molti strumenti per implementare il CI\/CD nello sviluppo del software; in questo tutorial utilizzeremo <a href=\"https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/understanding-github-actions\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Actions<\/a>.<\/p>\n<h2>Cos&#8217;\u00e8 GitHub Actions?<\/h2>\n<p>GitHub Actions \u00e8 un potente strumento di automazione fornito da GitHub. Offre agli sviluppatori la possibilit\u00e0 di automatizzare attivit\u00e0, processi e flussi di lavoro nei progetti di sviluppo software. Si integra con i repository di GitHub, cosa che lo rende facile da usare.<\/p>\n<p>Con GitHub Actions e l&#8217;<a href=\"https:\/\/api-docs.kinsta.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">API di Kinsta<\/a>, \u00e8 possibile definire flussi di lavoro personalizzati che si adattano alle esigenze di ogni progetto. Si pu\u00f2 impostare una pipeline CI che testa l&#8217;applicazione e attiva il deployment su Kinsta.<\/p>\n<h2>Primi passi con GitHub Actions<\/h2>\n<p>GitHub Actions si basa sul concetto di workflow, ovvero un insieme di attivit\u00e0 automatizzate che vengono attivate da eventi specifici o programmate a intervalli regolari. Questi eventi possono includere push di codice, richieste di pull, creazione di <em>issue<\/em> e altro ancora. Quando si verifica uno di questi eventi, GitHub Actions esegue automaticamente un workflow associato, eseguendo una serie di passaggi predefiniti.<\/p>\n<p>Ogni fase del workflow rappresenta un&#8217;azione particolare, come la creazione del codice, l&#8217;esecuzione di test, il deploy o l&#8217;invio di notifiche. Adesso creeremo un workflow con tre attivit\u00e0:<\/p>\n<ol start=\"1\">\n<li>Controllare la sintassi con ESLint<\/li>\n<li>Eseguire i test<\/li>\n<li>Re-distribuire l&#8217;applicazione<\/li>\n<\/ol>\n<h3>Fase 1: Configurare il repository GitHub<\/h3>\n<p>Per iniziare, abbiamo bisogno di un repository GitHub.<\/p>\n<p>Qui utilizziamo <a href=\"https:\/\/github.com\/kinsta\/chatgpt-clone\" target=\"_blank\" rel=\"noopener noreferrer\">questo repository GitHub<\/a>, sviluppato per il tutorial <a href=\"https:\/\/kinsta.com\/it\/blog\/clone-di-chatgpt\/\">Come costruire e distribuire un&#8217;applicazione clone di ChatGPT con React e l&#8217;API di OpenAI<\/a>.<\/p>\n<p>Potete utilizzare lo stesso repository andando su GitHub e selezionando: <strong>Use this template<\/strong> &gt; <strong>Create new repository<\/strong>.<\/p>\n<p>In questa applicazione React, sono stati creati dei test unitari per verificare ogni componente. Viene utilizzato anche ESLint per avere sintassi e formattazione del codice perfette. Se una richiesta di pull o il codice aggiunto tramite merge inviato al repository non supera i test del workflow, la pipeline CI bloccher\u00e0 il deployment.<\/p>\n<h3>Fase 2: Creare un file del workflow<\/h3>\n<p>Definiamo il workflow creando un file YAML nella directory <strong>.github\/workflows<\/strong> del repository. Questa directory dovrebbe trovarsi al livello principale del repository. La convenzione di denominazione dei file del workflow \u00e8 <strong>nome-del-workflow.yml<\/strong>.<\/p>\n<ol start=\"1\">\n<li>Nel repository, creiamo una directory <strong>.github<\/strong>.<\/li>\n<li>All&#8217;interno della directory <strong>.github<\/strong>, creiamo una nuova directory chiamata <strong>workflows<\/strong>.<\/li>\n<li>All&#8217;interno della directory workflows, creiamo un nuovo file con un nome come <strong>build-test-deploy.yml<\/strong>.<\/li>\n<\/ol>\n<h3>Fase 3: Scrivere il workflow CI\/CD<\/h3>\n<p>Ora che abbiamo creato il file, definiamo un workflow con i passaggi necessari per verificare la sintassi con ESLint, eseguire i test e distribuire l&#8217;applicazione.<\/p>\n<h4>Creare un evento CI<\/h4>\n<p>Quando si crea una pipeline CI, il primo passo \u00e8 dare un nome al workflow e poi impostare l&#8217;evento che lo innesca. In questo esempio, i due eventi sono una richiesta di pull e un push al branch principale.<\/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 si desidera programmare job periodici (CRON job) per attivit\u00e0 specifiche, \u00e8 sufficiente aggiungerli al workflow. Ad esempio, si potrebbero eseguire alcune attivit\u00e0 come il backup del database, la pulizia dei dati o altre attivit\u00e0 di manutenzione periodica.<\/p>\n<p>Ecco un esempio di come aggiungere un CRON job al workflow:<\/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>L&#8217;esempio precedente attiver\u00e0 il workflow ogni giorno a mezzanotte (ora UTC) perch\u00e9 la pianificazione cron \u00e8 impostata su <code>0 0 * * *<\/code>. Si pu\u00f2 personalizzare la pianificazione del cron per esigenze specifiche.<\/p>\n<p>Per fare un altro esempio, supponiamo di voler programmare il workflow CI\/CD in modo che venga eseguito ogni luned\u00ec alle 8. Possiamo impostare un CRON job utilizzando l&#8217;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 sintassi utilizzata nell&#8217;evento <code>schedule<\/code> per pianificare i flussi di lavoro di GitHub Actions si basa sulla sintassi cron di UNIX. Permette di definire tempi o intervalli specifici per l&#8217;esecuzione automatica del workflow. La sintassi \u00e8 composta da cinque campi che rappresentano diversi aspetti della pianificazione. Ogni campo \u00e8 separato da uno spazio. Il formato generale \u00e8 il seguente:<\/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>Analizziamo i singoli campi:<\/p>\n<ul>\n<li><strong>Minute (0 &#8211; 59):<\/strong> Il minuto in cui si attiver\u00e0 il cron job. Ad esempio, <code>15<\/code> significa che il workflow si attiver\u00e0 al 15\u00b0 minuto dell&#8217;ora.<\/li>\n<li><strong>Hour (0 &#8211; 23):<\/strong> L&#8217;ora in cui si attiver\u00e0 il cron job. Ad esempio, <code>8<\/code> significa che il workflow si attiver\u00e0 alle 8 del mattino.<\/li>\n<li><strong>Day of the month (1 &#8211; 31):<\/strong> Il giorno del mese in cui si attiver\u00e0 il cron job. Ad esempio, <code>1<\/code> significa che il workflow si attiver\u00e0 il primo giorno del mese.<\/li>\n<li><strong>Month (1 &#8211; 12):<\/strong> Il mese in cui si attiver\u00e0 il cron job. Ad esempio, <code>6<\/code> significa che il workflow si attiver\u00e0 a giugno.<\/li>\n<li><strong>Day of the week (0 &#8211; 7):<\/strong> Il giorno della settimana in cui si attiver\u00e0 il cron job. In questo caso, <code>0<\/code> e <code>7<\/code> rappresentano entrambi la domenica, mentre <code>1<\/code> rappresenta il luned\u00ec e cos\u00ec via. Ad esempio, <code>4<\/code> significa che il workflow si attiver\u00e0 il gioved\u00ec.<\/li>\n<\/ul>\n<p>Caratteri speciali:<\/p>\n<ul>\n<li><code><strong>*<\/strong><\/code> (asterisco): Corrisponde a qualsiasi valore per quel campo. Ad esempio, <code>*<\/code> nel campo minuti significa che il workflow si attiver\u00e0 ogni minuto.<\/li>\n<li><code><strong>*\/n<\/strong><\/code> (slash): Specifica un intervallo. Ad esempio, <code>*\/5<\/code> nel campo dei minuti significa che il workflow si attiver\u00e0 ogni 5 minuti.<\/li>\n<li><code><strong>,<\/strong><\/code> (virgola): Specifica pi\u00f9 valori. Ad esempio, <code>1,15,30<\/code> nel campo dei minuti significa che il workflow si attiver\u00e0 al 1\u00b0, 15\u00b0 e 30\u00b0 minuto dell&#8217;ora.<\/li>\n<li><code><strong>-<\/strong><\/code> (trattino): Specifica un intervallo di valori. Ad esempio, <code>1-5<\/code> nel campo giorno della settimana significa che il workflow si attiver\u00e0 dal luned\u00ec al venerd\u00ec (da 1 a 5).<\/li>\n<li><code><strong>?<\/strong><\/code> (punto interrogativo): Utilizzato per non specificare alcun valore. Viene comunemente utilizzato nel campo del giorno della settimana quando viene specificato il giorno del mese. Ad esempio, <code>?<\/code> nel campo giorno della settimana e <code>15<\/code> nel campo giorno del mese significa che il workflow si attiver\u00e0 il 15\u00b0 giorno del mese, indipendentemente dal giorno della settimana.<\/li>\n<\/ul>\n<h4>Creare un job CI per verificare la sintassi con ESLint<\/h4>\n<p>Per impostare il processo di CI, creeremo job o task necessari. Ogni job deve avere un nome chiaro e comprensibile. Chiameremo il primo <code>eslint<\/code>, dato che verificher\u00e0 la sintassi del codice con ESLint.<\/p>\n<p>Possiamo fornire una descrizione leggibile, anche se questa parte \u00e8 facoltativa. Poi specifichiamo che il job deve essere eseguito su un ambiente Ubuntu e utilizziamo una strategia a matrice per testare il codice con due versioni di <a href=\"https:\/\/kinsta.com\/it\/argomenti\/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>Quindi, definiamo i passaggi che dovranno essere eseguiti da &#8220;ESLint&#8221;. Si tratta di verifica del codice, impostazione della versione di Node.js per l&#8217;esecuzione di ESLint, memorizzazione nella cache dei pacchetti npm, installazione delle dipendenze del progetto e infine esecuzione di ESLint per la verifica della sintassi del codice.<\/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>Nel workflow qui sopra, ogni fase \u00e8 descritta con un nome per facilitare l&#8217;individuazione della fonte di errori o bug quando si esamina il workflow da GitHub Actions. In particolare, nel terzo passaggio utilizziamo il comando <code>npm ci<\/code> per installare le dipendenze, che \u00e8 preferibile a <code>npm install<\/code> perch\u00e9 esegue un&#8217;installazione pulita. Inoltre, l&#8217;ultimo passaggio, l&#8217;esecuzione di ESLint con <code>npm run lint<\/code>, presuppone l&#8217;aver configurato questo comando nel file <strong>package.json<\/strong>.<\/p>\n<p>Di seguito \u00e8 riportato il job completo per la verifica della sintassi del codice 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>Creare un job CI per eseguire i test<\/h4>\n<p>Per aggiungere il job CI per eseguire i test, iniziamo definendo il job e assegnandogli un nome descrittivo, ad esempio <code>tests<\/code>. Specificheremo anche che questo job dipende dal job <code>eslint<\/code>. Ci\u00f2 significa che il job <code>eslint<\/code> verr\u00e0 eseguito per primo e prima del job <code>tests<\/code>. Questa dipendenza fa s\u00ec che il codice venga controllato per verificare la presenza di errori di sintassi prima di eseguire i test.<\/p>\n<pre><code class=\"language-yaml\">  tests:\n    name: Run Tests\n    needs: eslint\n    runs-on: ubuntu-latest<\/code><\/pre>\n<p>Quindi, definiamo i passaggi per il job <code>tests<\/code>. Come per il job precedente, controlleremo il codice, imposteremo la versione di Node.js <code>18.x<\/code> per eseguire i test, installeremo le dipendenze del progetto con <code>npm ci<\/code> e infine eseguiremo i test con il 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>Creare un job CI per distribuire con la Kinsta API<\/h4>\n<p>Ora creeremo il job CI per il deploy su Kinsta utilizzando l&#8217;API di Kinsta. Definiremo il job e lo chiameremo <code>deploy<\/code>. Questo job avr\u00e0 delle dipendenze dai job <code>eslint<\/code> e <code>tests<\/code>, in modo da eseguire la distribuzione solo dopo che il codice sia stato controllato per individuare eventuali errori di sintassi e verificare il superamento dei test. Imposteremo il job in modo che venga eseguito in un <a href=\"https:\/\/kinsta.com\/it\/blog\/controllare-la-versione-di-ubuntu\/\">ambiente Ubuntu<\/a> utilizzando l&#8217;ultima versione disponibile.<\/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>Definiamo i passaggi. In questo caso, eseguiremo un comando cURL per interagire con l&#8217;API di Kinsta in modo programmatico e attivare un re-deployment. Vediamo innanzitutto di comprendere l&#8217;API di Kinsta, quali sono le informazioni necessarie per interagire con l&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/api-endpoint\/\">API<\/a> e come ottenere\/memorizzare le informazioni importanti associate all&#8217;API &#8211; come la <a href=\"https:\/\/kinsta.com\/it\/blog\/chiave-api-kinsta\/\">chiave API<\/a> &#8211; in modo sicuro su GitHub.<\/p>\n<h2>L&#8217;API di Kinsta<\/h2>\n<p>L&#8217;<a href=\"https:\/\/kinsta.com\/it\/changelog\/kinsta-api\/\">API di Kinsta<\/a> permette di interagire con i servizi di Kinsta in modo programmatico. Per utilizzare l&#8217;API, \u00e8 necessario avere un account con almeno un sito WordPress, un&#8217;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">applicazione<\/a> o un <a href=\"https:\/\/sevalla.com\/database-hosting\/\">database<\/a> in MyKinsta. Sar\u00e0 anche necessario generare una chiave API per autenticarsi e accedere all&#8217;account.<\/p>\n<p>Per generare una chiave API:<\/p>\n<ol start=\"1\">\n<li>Aprite la dashboard di MyKinsta.<\/li>\n<li>Andate alla pagina delle <strong>chiavi API<\/strong> (<strong>Nome<\/strong> &gt; <strong>Impostazioni dell&#8217;azienda<\/strong> &gt; <strong>Chiavi API<\/strong>).<\/li>\n<li>Fate clic su <strong>Crea chiave API<\/strong>.<\/li>\n<li>Scegliete una scadenza o impostiamo una data di inizio personalizzata e un numero di ore di scadenza della chiave.<\/li>\n<li>Assegnate alla chiave un nome univoco.<\/li>\n<li>Fate clic su <strong>Genera<\/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=\"Creare una chiave API su MyKinsta\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Creare una chiave API su MyKinsta.<\/figcaption><\/figure>\n<p>Dopo aver creato una chiave API, copiatela e conservatela in un luogo sicuro (consigliamo di utilizzare un <a href=\"https:\/\/kinsta.com\/it\/blog\/password-manager\/\">gestore di password<\/a>), perch\u00e9 \u00e8 l&#8217;<strong>unica volta<\/strong> che verr\u00e0 rivelata all&#8217;interno di MyKinsta.<\/p>\n<h3>Come attivare la distribuzione con l&#8217;API di Kinsta<\/h3>\n<p>Per distribuire un&#8217;applicazione su Kinsta utilizzando l&#8217;API, sono necessari due parametri: l&#8217;ID dell&#8217;applicazione e il branch. \u00c8 possibile recuperare programmaticamente l&#8217;ID dell&#8217;applicazione recuperando prima l&#8217;elenco delle applicazioni, che fornir\u00e0 i dettagli di ogni applicazione, compreso il suo ID.<\/p>\n<p>Dopo aver ottenuto le informazioni necessarie, potremo fare una <a href=\"https:\/\/kinsta.com\/it\/blog\/richieste-http-javascript\/\">richiesta POST<\/a> all&#8217;endpoint <a href=\"https:\/\/api-docs.kinsta.com\/tag\/Application-Deployments#operation\/manualDeployApplication\" target=\"_blank\" rel=\"noopener noreferrer\">\/applications\/deployments<\/a> dell&#8217;API. Per la pipeline CI, utilizzeremo cURL, uno strumento a riga di comando utile per interagire con gli URL.<\/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>Attivare la distribuzione con cURL nella pipeline CI\/CD<\/h2>\n<p>Per attivare la distribuzione con l&#8217;API di Kinsta, aggiungiamo il comando cURL al comando <code>run<\/code> della pipeline CI. Tuttavia, \u00e8 importante memorizzare la chiave API e l&#8217;ID dell&#8217;applicazione in modo sicuro.<\/p>\n<p>Per <a href=\"https:\/\/kinsta.com\/it\/blog\/segreti-github-actions\/\">memorizzare i segreti su GitHub<\/a> e utilizzarli nelle GitHub Actions, seguite questi passaggi:<\/p>\n<ol start=\"1\">\n<li>Accedete al repository in cui si vuole impostare il segreto.<\/li>\n<li>Fate clic sulla scheda <strong>Settings<\/strong> nel menu del repository.<\/li>\n<li>Nella barra laterale di sinistra, selezionate <strong>Secrets<\/strong> nella categoria <strong>Options<\/strong>.<\/li>\n<li>Fate clic su <strong>New repository secret<\/strong>.<\/li>\n<li>Assegnate un nome al segreto (come <code>KINSTA_API_KEY<\/code>) e inserite la chiave API Kinsta nel campo <strong>Value<\/strong>.<\/li>\n<li>Dopo aver inserito il nome e il valore, cliccate sul pulsante <strong>Add secret<\/strong> per salvarlo.<\/li>\n<li>Ripetete la procedura per gli altri segreti.<\/li>\n<\/ol>\n<p><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=\"Memorizzare i segreti in GitHub\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Memorizzare i segreti in GitHub.<\/figcaption><\/figure><br \/>\nUna volta aggiunti i segreti, possiamo farvi riferimento nel workflow di GitHub Actions utilizzando la sintassi <code>${{ secrets.SECRET_NAME }}<\/code>.<\/p>\n<p>Ora completiamo il job <code>deploy<\/code> per la pipeline CI\/CD di GitHub Actions. Definiamo i passaggi come in precedenza, con un unico passaggio per il deploy su Kinsta. Per prima cosa, definiamo i segreti nel comando <code>env<\/code> e poi aggiungiamo il comando cURL per eseguire il deploy.<\/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>Nel comando cURL, si noter\u00e0 che al comando sono state aggiunte le variabili d&#8217;ambiente per consentire l&#8217;accesso sicuro ai segreti durante la distribuzione.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Questo job di <code>deploy<\/code> CI \u00e8 progettato per eseguire la distribuzione utilizzando l&#8217;API di Kinsta. Verr\u00e0 visualizzato lo stato success anche se il processo di distribuzione vero e proprio riscontra problemi o fallisce. Questo perch\u00e9 la risposta del workflow si basa sul successo dell&#8217;avvio del deployment, non sul suo completamento o sul suo stato.<\/p>\n<\/aside>\n\n<p>Ecco come apparir\u00e0 il workflow CI\/CD finale:<\/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>Copiamo il workflow e incolliamolo nel file <strong>build-test-deploy.yml<\/strong>. Quindi avviamo una richiesta di pull per aggiungere questo file al branch principale del repository. Ricordate che questa richiesta di pull attiver\u00e0 automaticamente il workflow.<\/p>\n<p>Ci\u00f2 permette di rivedere le modifiche apportate al repository e di essere sicuri che ogni nuova modifica contenuta nella richiesta di pull soddisfi i controlli specificati prima di decidere se effettuarne il merge con la codebase.<\/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=\"Memorizzare i segreti in GitHub\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Memorizzare i segreti in GitHub.<\/figcaption><\/figure>\n<p>Mentre eseguite il merge della richiesta di pull, andate alla scheda <strong>Actions<\/strong> del repository GitHub per vedere il workflow CI\/CD in esecuzione.<\/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=\"Riepilogo di GitHub Actions\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Riepilogo di GitHub Actions.<\/figcaption><\/figure>\n<p>Possiamo fare clic su ogni job per vederne i dettagli (ecco perch\u00e9 \u00e8 consigliabile dare una descrizione significativa a ogni fase del job).<\/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=\"Dettagli delle fasi CI\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Dettagli delle fasi CI.<\/figcaption><\/figure>\n<h2>Applicare il workflow delle richieste di pull su GitHub<\/h2>\n<p>Per garantire una gestione ottimale del codice e favorire la collaborazione nei repository di GitHub, \u00e8 utile implementare un flusso di richieste di pull e bloccare i commit diretti al branch principale. Questo approccio permette di creare un processo di sviluppo controllato e organizzato, dato che tutte le modifiche vengono sottoposte a richieste di pull e revisioni prima di essere unite al branch principale.<\/p>\n<p>In questo modo, i team di sviluppo possono migliorare la qualit\u00e0 del codice, ridurre al minimo il rischio di introdurre bug e mantenere una cronologia trasparente delle modifiche.<\/p>\n<p>Ecco come impostare l&#8217;applicazione del workflow delle richieste di pull:<\/p>\n<ol start=\"1\">\n<li>Fate clic sulla scheda <strong>Settings<\/strong> del repository GitHub.<\/li>\n<li>Sotto <strong>Code and Automation<\/strong>, selezionate <strong>Branches<\/strong> dalla barra laterale delle opzioni.<\/li>\n<li>Se non esistono regole, fate clic su <strong>Add branch protection rule<\/strong>.<\/li>\n<li>Date un nome alla regola, quindi selezionate la casella di controllo <strong>Require a pull request before merging<\/strong>. In questo modo verranno visualizzate altre opzioni di configurazione.<\/li>\n<li>Poi selezionate la casella <strong>Require status checks to pass before merging<\/strong>.<\/li>\n<li>Personalizzate altre opzioni in base alle vostre preferenze.<\/li>\n<li>Cliccate sul pulsante <strong>Create<\/strong> per salvare la regola.<\/li>\n<\/ol>\n<p><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=\"Applicazione del workflow delle richieste di pull su GitHub\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Applicazione del workflow delle richieste di pull su GitHub.<\/figcaption><\/figure><br \/>\nSeguendo questi passaggi, abbiamo impostato una regola per applicare il workflow delle richieste di pull nel nostro repository GitHub. Questo fa s\u00ec che tutte le modifiche siano sottoposte a revisione e a controlli automatici prima di essere unite al branch principale, in modo da avere un ambiente di sviluppo pi\u00f9 affidabile e collaborativo.<\/p>\n<h2>Riepilogo<\/h2>\n<p>Combinando la potenza di GitHub Actions e dell&#8217;API di Kinsta, \u00e8 possibile ottimizzare il workflow di sviluppo e offrire al proprio team di sviluppo un ambiente collaborativo ed efficiente.<\/p>\n<p>Gli sviluppatori possono contribuire con sicurezza al codice, sapendo che sar\u00e0 testato a fondo prima di raggiungere la produzione, e gli stakeholder possono stare tranquilli sapendo che il processo di distribuzione \u00e8 ben controllato e a prova di errore.<\/p>\n<p><em>Come utilizzate l&#8217;API di Kinsta? Quali endpoint vorreste che aggiungessimo all&#8217;API? Quale tutorial vorreste leggere sull&#8217;API di Kinsta?<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nel frenetico mondo dello sviluppo web, integrazione continua e distribuzione continua (CI\/CD) sono diventate prassi indispensabili per fornire software di alta qualit\u00e0 in modo efficiente. Il &#8230;<\/p>\n","protected":false},"author":287,"featured_media":72483,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26232,26233],"class_list":["post-72482","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>Come creare una pipeline CI\/CD con le GitHub Actions e l&#039;API di Kinsta<\/title>\n<meta name=\"description\" content=\"Scopri come impostare in modo efficiente una pipeline CI\/CD con GitHub Actions e sfruttare tutto il potenziale di Kinsta API.\" \/>\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\/it\/blog\/come-creare-una-pipeline-ci-cd\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come creare una pipeline CI\/CD con GitHub Actions e l&#039;API di Kinsta\" \/>\n<meta property=\"og:description\" content=\"Scopri come impostare in modo efficiente una pipeline CI\/CD con GitHub Actions e sfruttare tutto il potenziale di Kinsta API.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-21T13:10:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-03T09:03:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/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=\"Scopri come impostare in modo efficiente una pipeline CI\/CD con GitHub Actions e sfruttare tutto il potenziale di Kinsta API.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/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_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Come creare una pipeline CI\/CD con GitHub Actions e l&#8217;API di Kinsta\",\"datePublished\":\"2023-08-21T13:10:34+00:00\",\"dateModified\":\"2023-11-03T09:03:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/\"},\"wordCount\":2685,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/\",\"name\":\"Come creare una pipeline CI\/CD con le GitHub Actions e l'API di Kinsta\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"datePublished\":\"2023-08-21T13:10:34+00:00\",\"dateModified\":\"2023-11-03T09:03:44+00:00\",\"description\":\"Scopri come impostare in modo efficiente una pipeline CI\/CD con GitHub Actions e sfruttare tutto il potenziale di Kinsta API.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Come creare una pipeline CI\/CD con GitHub Actions e l&#8217;API di Kinsta\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"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\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Come creare una pipeline CI\/CD con le GitHub Actions e l'API di Kinsta","description":"Scopri come impostare in modo efficiente una pipeline CI\/CD con GitHub Actions e sfruttare tutto il potenziale di Kinsta API.","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\/it\/blog\/come-creare-una-pipeline-ci-cd\/","og_locale":"it_IT","og_type":"article","og_title":"Come creare una pipeline CI\/CD con GitHub Actions e l'API di Kinsta","og_description":"Scopri come impostare in modo efficiente una pipeline CI\/CD con GitHub Actions e sfruttare tutto il potenziale di Kinsta API.","og_url":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-08-21T13:10:34+00:00","article_modified_time":"2023-11-03T09:03:44+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Scopri come impostare in modo efficiente una pipeline CI\/CD con GitHub Actions e sfruttare tutto il potenziale di Kinsta API.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Joel Olawanle","Tempo di lettura stimato":"16 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Come creare una pipeline CI\/CD con GitHub Actions e l&#8217;API di Kinsta","datePublished":"2023-08-21T13:10:34+00:00","dateModified":"2023-11-03T09:03:44+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/"},"wordCount":2685,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/","url":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/","name":"Come creare una pipeline CI\/CD con le GitHub Actions e l'API di Kinsta","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","datePublished":"2023-08-21T13:10:34+00:00","dateModified":"2023-11-03T09:03:44+00:00","description":"Scopri come impostare in modo efficiente una pipeline CI\/CD con GitHub Actions e sfruttare tutto il potenziale di Kinsta API.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/come-creare-una-pipeline-ci-cd\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/it\/argomenti\/api\/"},{"@type":"ListItem","position":3,"name":"Come creare una pipeline CI\/CD con GitHub Actions e l&#8217;API di Kinsta"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","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\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=72482"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72482\/revisions"}],"predecessor-version":[{"id":74245,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72482\/revisions\/74245"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72482\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72482\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72482\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72482\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72482\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72482\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72482\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72482\/translations\/nl"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72482\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/72483"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=72482"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=72482"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=72482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}