Deploy Automatico Eleventy con GitHub Actions
Questa è una guida rapida su come configurare GitHub Actions per deployare un sito Eleventy dopo un push. Questo metodo può essere utilizzato in generale per qualsiasi framework frontend che necessita solo di una cartella statica.
In Eleventy puoi configurare una cartella statica che conterrà l'output della build del tuo progetto. Ad esempio, controllando nel file eleventy.js puoi trovare:
return {
dir: {
input: "src",
output: "_site",
quindi la tua build sarà in _site/
Ora puoi configurare GitHub Actions per copiare tutti i file dal repository alla directory di build sul server.
Iniziamo creando il file di workflow GitHub
mkdir .github/workflows cd .github/workflows touch build_and_push.yml
Ora che abbiamo creato il file di workflow possiamo analizzare la sua struttura:
Nome dell'action GitHub
name: push_production.yml
La sezione On contiene la configurazione su QUANDO la pipeline deve essere eseguita:
on: [push, fork, merge, workflow_dispatch]Nel nostro esempio possiamo deployare durante il push su main e con esecuzione manuale:
on: push: branches: [ "main" ] workflow_dispatch: inputs: # Qui possiamo inserire diversi input in base a cosa l'utente vuole fare nell'action manualeOra consideriamo la sezione job, quindi COSA verrà fatto nel nostro workflow:
Utilizzeremo diverse action in questo ordine specifico:
- actions/checkout@v4: checkout del codice del repository nel workspace
- actions/setup-node@v4: setup delle dipendenze node per buildare il nostro codice
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build Eleventy
run: npm run build
env:
ELEVENTY_ENV: production
- name: Prepare SSH key and known_hosts
env:
SSH_KEY: $
shell: bash
run: |
mkdir -p ~/.ssh
echo "$SSH_KEY" > ~/.ssh/id_deploy
chmod 600 ~/.ssh/id_deploy
ssh-keyscan -p "$" "$" >> ~/.ssh/known_hosts
- name: Ensure remote directory
run: |
ssh -i ~/.ssh/id_deploy -p "$" \
"$@$" \
"mkdir -p '$'"
- name: Deploy via rsync over SSH
run: |
rsync -az --delete \
-e "ssh -i ~/.ssh/id_deploy -p $" \
_site/ "$@$:$/"