GitHub CI/CD

Voor gevorderde gebruikers kan GitHub CI/CD (Continuous Integration/Continuous Delivery of Continuous Deployment) automatisch codeveranderingen naar je Kinsta site deployen zodra een nieuwe commit naar de aangewezen branch wordt gepushed. Deze opzet maakt het mogelijk om naadloos code te deployen vanuit je lokale omgeving via SSH en GitHub Actions, waardoor je continu updates voor je site kunt uitvoeren.

Om deze stappen te volgen, moet je een bestaande site hebben die gehost wordt op Kinsta en een GitHub account.

1. Een backup van je site downloaden

Je kunt een backup van je site downloaden om de GitHub repository in te stellen en er lokaal aan te werken. Als alternatief kun je DevKinsta gebruiken om je site van de Kinsta server te halen en er lokaal aan te werken.

Ga in MyKinsta naar WordPress Sites > sitenaam > Backups > Downloaden > Nu backup maken.

Maak een downloadbare backup in MyKinsta.
Maak een downloadbare backup in MyKinsta.

Als je backup klaar is, klik je op Downloaden, sla je deze op je lokale computer op en pak je de bestanden uit in een map.

2. De GitHub repository instellen

Open de map met de bestanden van je site in de code editor van je voorkeur. Om het uploaden van onnodige WordPress core bestanden, media uploads of gevoelige informatie te voorkomen, voeg je een .gitignore bestand toe aan de hoofdmap van je project. Je kunt een standaard WordPress .gitignore template gebruiken, de inhoud ervan kopiëren en het opslaan om ervoor te zorgen dat alleen de essentiële bestanden worden gevolgd.

Maak een GitHub repository aan en push de bestanden van je site naar GitHub.

3. GitHub secrets instellen voor Kinsta

Om deployments van GitHub naar Kinsta te automatiseren, heb je belangrijke SSH gegevens nodig, waaronder je gebruikersnaam, wachtwoord, poort en IP adres. Omdat deze gevoelig zijn, moet je ze veilig opslaan als GitHub Secrets.

Ga binnen GitHub naar je repository, klik op Settings > Secrets and Variables > Actions > New Repository Secret.

Voeg de volgende secrets toe met behulp van de SFTP/SSH gegevens van de Info pagina van je site in MyKinsta:

Naam geheimGeheim
KINSTA_SERVER_IPHost bijv. 12.34.56.78
KINSTA_USENAMEGebruikersnaam bijv. kinstahelp
PASSWORDWachtwoord
PORTPoort bijv. 12345
SSH informatie om secrets aan GitHub toe te voegen.
SSH informatie om secrets aan GitHub toe te voegen.

4. Een kale Git repository op Kinsta maken

Een kale Git repository is een externe bestemming waar GitHub je code naartoe zal pushen. Deze repository is een centrale repository ontworpen om je code te ontvangen en op te slaan.

Open een nieuwe terminal en SSH naar je Kinsta server met het SSH terminal commando vanaf de Info pagina van je site in MyKinsta.

SSH terminal commando voor je site.
SSH terminal commando voor je site.

Voer het wachtwoord van je site in op de Info pagina in MyKinsta en kopieer vervolgens het pad uit Omgevingsdetails.

Navigeer naar de private map op je server door public te vervangen door private en your-site door de mapnaam uit het pad van je site:

cd /www/your-site/private

Als de private map niet bestaat, gebruik dan het volgende commando om hem aan te maken:

mkdir -p /www/your-site/private

Maak de kale Git repository met het volgende commando, waarbij je your-repo.git vervangt door de naam van je GitHub repository:

git init --bare your-repo.git

5. De post-receive hook instellen

De post-receive hook zet automatisch de code naar je live site zodra nieuwe wijzigingen naar de main branch in GitHub worden gepushed.

Navigeer naar de hooks map in je kale Git repository, waarbij je your-site vervangt door de mapnaam van je site en your-repo door de naam van je GitHub repository:

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

Maak en bewerk de post-receive hook:

nano post-receive

Voeg het volgende script toe aan het bestand post-receive. Dit controleert de nieuwste code in de public directory van je live site:

#!/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

Het script zet code uit van alleen de main branch. De variabele TARGET wijst naar de map waar de bestanden van je live site staan en de variabele GIT_DIR wijst naar de kale Git repository.

Sla het bestand op en sluit het af met Ctrl + X, dan Y en Enter.

Maak het script uitvoerbaar zodat het na elke push automatisch uitgevoerd kan worden:

chmod +x post-receive

6. Een GitHub persoonlijk toegangstoken (PAT) genereren en toevoegen

Als je code naar GitHub pusht via SSH, moet je een PAT gebruiken om je te authenticeren. Met dit token kan GitHub je pushes veilig accepteren.

Om de PAT te genereren:

  1. Ga naar je GitHub account, klik op je profielfoto en selecteer Settings.
  2. Klik op Developer Settings > Personal access tokens > Tokens (classic).
  3. Klik op Generate New Token > Generate New Token (classic), en geef het binnen Comment een naam (bijv. “Kinsta Deployment Token”).
  4. Onder Select scopes vink je repo aan (voor volledige controle over privé repositories).
  5. Klik op Generate token en kopieer het token. (Je zult het niet meer kunnen zien)

Voer het volgende commando uit om je GitHub repository als remote toe te voegen, waarbij je your-username vervangt door je GitHub gebruikersnaam, YOUR_PERSONAL_ACCESS_TOKEN door het PAT dat je zojuist hebt gegenereerd, en your-repo door de naam van je GitHub repository:

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

7. De GitHub Actions workflow maken

Deze workflow deployt automatisch wijzigingen naar Kinsta wanneer je naar de main branch pusht. Om de deployment te automatiseren, moet je definiëren hoe de deployment zal gebeuren met behulp van een YAML bestand.

Maak in je GitHub repository een nieuwe map genaamd .github/workflows binnen deze map, maak een nieuw bestand genaamd deploy.yml en voeg de volgende inhoud toe aan het bestand, waarbij je your-site vervangt door de mapnaam van het pad op je Kinsta site en your-repo door je GitHub repository naam:

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

Deze workflow doet het volgende:

  • Trigger: De workflow wordt getriggerd elke keer als code wordt gepushed naar de main branch van je GitHub repository.
  • Jobs: De workflow bevat één job genaamd deploy, die draait op een Ubuntu virtuele machine (ubuntu-latest).
  • Checkout code: Dit gebruikt de actions/checkout@v2 actie om de nieuwste code van je GitHub repository te halen.
  • Deploy to Kinsta via SSH: De appleboy/ssh-action wordt gebruikt om veilig verbinding te maken met je Kinsta server via SSH met de geheimen die je hebt geconfigureerd (server IP, gebruikersnaam, wachtwoord en poort). Het script in deze stap voert de volgende commando’s uit:
    • cd /www/your-site/private/your-repo.git: Navigeert naar de kale Git repository op je Kinsta server.
    • git fetch origin main: Haalt de laatste wijzigingen op van de main branch in je GitHub repository.
    • git reset --hard origin/main: Past die wijzigingen toe door de live site in de public directory waar WordPress wordt gehost bij te werken.

8. De workflow testen

Als je de workflow eenmaal hebt ingesteld, kun je hem testen door een kleine wijziging naar de main branch van je GitHub repository te pushen. Elke keer dat je een wijziging pusht, activeert GitHub Actions automatisch de deployment, waarbij de laatste versie van je code wordt opgehaald en uitgerold naar je live site op Kinsta.

Je kunt de status van je deployment in de gaten houden door naar het tabblad Actions in je GitHub repository te gaan. Als de workflow fouten tegenkomt, zie je gedetailleerde logs om je te helpen bij het oplossen van problemen.

Was dit artikel nuttig?