GitHub CI/CD

Per gli utenti avanzati, GitHub CI/CD (Continuous Integration/Continuous Delivery o Continuous Deployment) può distribuire automaticamente le modifiche al codice del vostro sito Kinsta ogni volta che un nuovo commit viene inviato al branch designato. Questa configurazione permette di distribuire il codice senza problemi dall’ambiente locale tramite SSH e GitHub Actions, consentendo aggiornamenti continui al vostro sito.

Per seguire questi passaggi, è necessario avere un sito esistente ospitato su Kinsta e un account GitHub.

1. Scaricare un backup del sito

Potete scaricare un backup del vostro sito per configurare il repository GitHub e lavorarci in locale. In alternativa, potete utilizzare DevKinsta per eseguire il pull del vostro sito dal server Kinsta e lavorarci in locale.

In MyKinsta, andate su Siti di WordPress > nome del sito > Backup > Scarica > Crea backup ora.

Creare un backup scaricabile in MyKinsta.
Creare un backup scaricabile in MyKinsta.

Quando il backup è pronto, cliccate su Download, salvate il backup sul vostro computer locale e decomprimete i file in una cartella.

2. Configurare il repository GitHub

Aprite la cartella contenente i file del vostro sito nell’editor di codice che preferite. Per evitare il caricamento di file di base di WordPress non necessari, di file multimediali o di informazioni sensibili, aggiungete un file .gitignore alla directory principale del vostro progetto. Potete utilizzare un template .gitignore standard di WordPress, copiarne il contenuto e salvarlo per assicurarvi che vengano tracciati solo i file essenziali.

Create un repository GitHub e inviate i file del vostro sito a GitHub.

3. Impostare i segreti di GitHub per Kinsta

Per automatizzare le distribuzioni da GitHub a Kinsta, avete bisogno dei dati principali dell’SSH, tra cui il nome utente, la password, la porta e l’indirizzo IP. Poiché si tratta di dati sensibili, dovrete memorizzarli in modo sicuro come GitHub Secrets.

In GitHub andate al vostro repository, cliccate su Settings > Secrets and variables > Actions > New repository secret.

Aggiungete i seguenti segreti utilizzando i dati SFTP/SSH della pagina Info del vostro sito in MyKinsta:

Nome del segretoSegreto
KINSTA_SERVER_IPHost, ad esempio 12.34.56.78
KINSTA_USERNAMENome utente, ad esempio kinstahelp
PASSWORDPassword
PORTPorta, ad esempio 12345
Informazioni SSH da aggiungere come segreti su GitHub.
Informazioni SSH da aggiungere come segreti su GitHub.

4. Creare un repository Git bare su Kinsta

Un repository Git bare è una destinazione remota dove GitHub invierà il vostro codice. Questo repository è un repository centrale progettato per ricevere e conservare il vostro codice.

Aprite un nuovo terminale e accedete al vostro server Kinsta tramite il Comando terminale SSH dalla pagina Info del vostro sito in MyKinsta.

Comando terminale SSH per il sito.
Comando terminale SSH per il sito.

Inserite la password del vostro sito dalla pagina Info di MyKinsta, quindi copiate il percorso da Dettagli ambiente.

Navigate verso la cartella privata del vostro server sostituendo public con private e your-site con il nome della cartella del percorso del vostro sito:

cd /www/your-site/private

Se la cartella privata non esiste, usate il seguente comando per crearla:

mkdir -p /www/your-site/private

Create il repository Git bare con il seguente comando, sostituendo your-repo.git con il nome del vostro repository GitHub:

git init --bare your-repo.git

5. Configurare l’hook post-receive

L’hook post-receive distribuisce automaticamente il codice sul vostro sito live ogni volta che vengono apportate nuove modifiche al branch main di GitHub.

Navigate nella cartella hooks del vostro repository Git bare, sostituendo your-site con il nome della cartella del vostro sito e your-repo con il nome del vostro repository GitHub:

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

Create e modificate l’hook post-receive:

nano post-receive

Aggiungete il seguente script al file post-receive. In questo modo il codice più recente viene inserito nella directory public del vostro sito live:

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

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

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

Lo script distribuisce il codice solo dal branch main. La variabile TARGET punta alla directory in cui si trovano i file del vostro sito live e la variabile GIT_DIR punta al repository Git.

Salvate e uscite dal file premendo Ctrl + X, poi Y e Invio.

Rendete lo script eseguibile in modo che possa essere eseguito automaticamente dopo ogni push:

chmod +x post-receive

6. Generare e aggiungere un token di accesso personale (PAT) di GitHub

Quando inviate codice a GitHub tramite SSH, dovete utilizzare un PAT per autenticarvi. Questo token permette a GitHub di accettare i vostri push in modo sicuro.

Per generare il PAT:

  1. Accedete al vostro account GitHub, cliccate sulla foto del vostro profilo e selezionate Settings.
  2. Cliccate su Developer settings > Personal access tokens > Tokens (classic).
  3. Cliccate su Generate new token > Generate new token (classic) e all’interno di Note assegnategli un nome (ad esempio, “Kinsta Deployment Token”).
  4. In Select scopes, selezionate repo (per avere il pieno controllo dei repository privati).
  5. Cliccate su Generate token e copiate il token. (Non potrete più vederlo)

Eseguite il seguente comando per aggiungere il vostro repository GitHub come remoto, sostituendo your-username con il vostro nome utente GitHub, YOUR_PERSONAL_ACCESS_TOKEN con il PAT appena generato e your-repo con il nome del vostro repository GitHub:

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

7. Creare il workflow GitHub Actions

Questo workflow distribuisce automaticamente le modifiche a Kinsta ogni volta che eseguite il push sul branch main. Per automatizzare la distribuzione, dovete definire come avverrà la distribuzione utilizzando un file YAML.

Nel vostro repository GitHub, create una nuova directory chiamata .github/workflows. All’interno di questa directory, create un nuovo file chiamato deploy.yml e aggiungete il seguente contenuto al file, sostituendo your-site con il nome della cartella dal percorso del vostro sito Kinsta e your-repo con il nome del vostro repository GitHub:

name: Deploy to Kinsta

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

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

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

Questo workflow esegue le seguenti operazioni:

  • Trigger: il workflow viene attivato ogni volta si esegue il push del codice nel branch main del vostro repository GitHub.
  • Job: il workflow contiene un job chiamato deploy, che viene eseguito su una macchina virtuale Ubuntu (ubuntu-latest).
  • Checkout code: utilizza l’azione actions/checkout@v2 per prelevare il codice più recente dal vostro repository GitHub.
  • Deploy to Kinsta via SSH: appleboy/ssh-action viene utilizzato per connettersi in modo sicuro al vostro server Kinsta via SSH utilizzando i segreti che avete configurato (IP del server, nome utente, password e porta). Lo script in questo passaggio esegue i seguenti comandi:
    • cd /www/your-site/private/your-repo.git: naviga nel repository Git sul vostro server Kinsta.
    • git fetch origin main: recupera le ultime modifiche dal branch main nel vostro repository GitHub.
    • git reset --hard origin/main: applica le modifiche aggiornando il sito live nella directory public dove è ospitato WordPress.

8. Testare il workflow

Una volta impostato il workflow, potete testarlo inviando una piccola modifica al branch main del vostro repository GitHub. Ogni volta che apportate una modifica, GitHub Actions attiva automaticamente la distribuzione, prelevando l’ultima versione del codice e distribuendola sul vostro sito live su Kinsta.

Potete monitorare lo stato della distribuzione accedendo alla scheda Actions del vostro repository GitHub. Se il workflow incontra degli errori, vedrete dei log dettagliati che vi aiuteranno a risolvere i problemi.

Questo articolo ti è stato utile?