Pagine GitLab con Jekyll
Overview
Teaching: 0 min
Exercises: 0 minQuestions
How do I publish web pages through GitLab and Jekyll?
Objectives
Publish Markdown files as HTML on the web with GitHub Pages
Jekyll è un potente generatore di siti statici che può stare dietro a GitLab Pages. Crea contenuti statici di siti web in HTML a partire da vari file presenti nel repository (file Markdown, fogli di stile CSS, modelli/layout di pagina, ecc.) Questo contenuto “compilato” viene poi servito come sito web.
Jekyll facilita la gestione del sito web perché dipende dai modelli. I modelli (o layout nella notazione di Jekyll) sono progetti che possono essere riutilizzati da più pagine. Per esempio, noi (i vostri istruttori) non abbiamo creato uno stile per ogni singolo esercizio di questa lezione separatamente: abbiamo creato un modello che specifica come gli esercizi devono essere mostrati (il riquadro arancione, il riquadro delle soluzioni a discesa, ecc.) e ogni volta che tagghiamo un blocco di testo come “Esercizio” viene mostrato in questo modo.
Tra poco parleremo dei layout di Jekyll; per ora iniziamo a imparare Jekyll e il suo linguaggio di scripting chiamato Liquid.
Parametri globali
Anche in questo caso, attiveremo e personalizzeremo il nostro deployment dal file
.gitlab-ci.yml
. Si può decidere di modificare la versione precedente del repository
group-website
, ma noi suggeriamo di crearne uno nuovo. Seguire i passi di
“Impostazione di un progetto”
nell’introduzione,
se si desidera farlo. Creare/modificare il contenuto del file .gitlab-ci.yml
con:
image: ruby:latest
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
only:
- main
Questo codice richiede che lo script venga eseguito nell’ambiente dell’ultima versione di Ruby, installa la gemma Jekyll e costruisce il sito nel percorso pubblico (creando la cartella in remoto, non ci si deve preoccupare a questo punto). Il risultato riguarda solo il ramo principale.
L’esecuzione di questa pipeline richiede anche un Gemfile
. Crearlo nella cartella
principale con il seguente contenuto:
source "https://rubygems.org"
gem "jekyll"
In breve, ma lo vedremo più in dettaglio, Jekyll cerca i file di testo che iniziano con un’intestazione formattata in questo modo:
---
variable: value
other_variable: other_value
---
...stuff in the page...
e inserisce i valori di queste variabili nella pagina quando la formatta. I tre trattini che iniziano l’intestazione devono essere i primi tre caratteri del file: anche un solo spazio prima di essi farà sì che Jekyll ignori il file.
Il contenuto dell’intestazione deve essere formattato come YAML e può contenere
booleani, numeri, stringhe di caratteri, elenchi e dizionari di coppie nome/valore. I
valori dell’intestazione sono indicati nella pagina come page.variable
. Ad esempio,
questa pagina:
---
name: Science
---
Today we are going to study {{page.name}}.
è tradotto in:
<html>
<body>
<p>Today we are going to study Science.</p>
</body>
</html>
Esercizio: La sintassi di Jekyll
Verificate la vostra comprensione della sintassi di Jekyll. In cosa verrebbe tradotto questo template?
--- name: Tom location: Heidelberg --- {{page.name}} is in {{page.location}}. I believe {{page.location}} is a very nice city.
Soluzione
<html> <body> <p>Tom is in Heidelberg. I believe Heidelberg us a very nice city.</p> </body> </html>
Le principali opzioni di configurazione di Jekyll sono specificate in un altro file,
chiamato _config.yml
. Creiamo alcuni parametri di configurazione per il nostro sito
web.
- Creare un file
_config.yml
nella directory principale del sito. - Aggiungere i parametri
description
eemail
come:
description: This project develops training materials for reseachers wanting to learn to build project
websites in GitLab Pages.
email: team@carpentries.org
le impostazioni di configurazione globale di _config.yml
sono rese disponibili come
variabile site.PARAMETER_NAME
in ogni pagina del sito. Quindi, il parametro globale
email
che abbiamo definito sopra sarà accessibile come site.email
. Si noti che si
tratta di parametri globali, quindi diversi dai parametri locali specifici della pagina
negli esempi precedenti.
Per accedere al valore del parametro all’interno di una pagina, si utilizza la notazione
di Liquid per l’output del contenuto, circondando una variabile tra parentesi graffe
come {{ variable }}
.
Parametri globali predefiniti
Oltre ai parametri globali definiti dall’utente, Jekyll mette a disposizione un certo numero di utili variabili predefinite a livello di sito all’interno del sito web: per esempio
{{ site.time }}
(l’ora corrente) o{{ site.pages }}
(un elenco di tutte le pagine).
Creare un file index.md
nella cartella principale, con il seguente contenuto:
---
title: My first Jekyll page
---
# Building Websites with Jekyll and GitLab
## Description
{{ site.description }}
Welcome to {{ page.title }}
Have any questions about what we do? [We'd love to hear from you!](mailto:{{ site.email }})
Il progetto deve includere i seguenti file:
Impegnare e spingere le modifiche, quindi monitorare l’esecuzione della pipeline e
controllare il risultato finale all’URL https://<your user
name>.embl-community.io/group-website
.
Esercizio: Creare un parametro globale di Twitter
In
about.md
abbiamo un URL di Twitter sotto la sezione “Contatti”. Questa è un’informazione che potrebbe essere inserita nei parametri globali di_config.yml
, perché si potrebbe voler ripetere in calce a ogni pagina. Apportare le modifiche al sito web per estrarre l’URL di Twitter come parametro globale.Soluzione
- Aggiungere il parametro twitter a
_config.yml
:description: "This research project develops training materials for reseachers wanting to learn to build project websites in GitHub with GitHub Pages." email: "team@carpentries.org" twitter: "https://twitter.com/thecarpentries"
Utilizzare il parametro twitter in
about.md
:# About ## Project {{ site.description }} ## Funders We gratefully acknowledge funding from the XYZ Founding Council, under grant number 'abc'. ## Cite us You can cite the project as: > *The Carpentries 2019 Annual Report. Zenodo. https://doi.org/10.5281/zenodo.3840372* ## Contact us - Email: [{{ site.email }}](mailto:{{ site.email }}) - Twitter: [{{ site.twitter }}]({{ site.twitter }})
- Si noti che non si dovrebbe vedere alcun cambiamento nel proprio sito web. Tuttavia, ora è possibile accedere all’URL di Twitter da qualsiasi pagina del sito, se necessario.
Parametri locali
Oltre ai parametri globali (a livello di sito) disponibili tramite la variabile globale
site
, Jekyll mette a disposizione informazioni locali (specifiche della pagina)
tramite la variabile page
. Alcune di queste sono predefinite, come page.title
, che
fornisce il titolo della pagina attualmente attiva/visitata. Altri possono essere
definiti autonomamente. Si veda questo [elenco dei parametri predefiniti della pagina]
(https://jekyllrb.com/docs/variables#page-variables).
È possibile definire parametri locali utilizzando la notazione YAML all’interno di una
pagina Markdown, includendola in un’intestazione di pagina e delimitando l’intestazione
con linee triple tratteggiate ---
. Queste intestazioni sono chiamate front matter e
sono usate per impostare variabili e metadati sulle singole pagine del sito Jekyll.
Materia prima
Qualsiasi file che contenga un blocco YAML front matter verrà elaborato da Jekyll come un file speciale. Il front matter deve essere la prima cosa nel file e deve avere la forma di un blocco YAML valido, compreso tra linee triple tratteggiate.
I parametri globali e locali sono sensibili alle maiuscole e minuscole
È importante notare che i parametri usati nei siti sono sensibili alle maiuscole. Per convenzione, di solito sono tutti caratteri minuscoli.
Ecco un esempio:
---
layout: post
title: "My first blog post"
author: "Danger Mouse"
---
Tra queste linee triple tratteggiate, è possibile sovrascrivere le variabili predefinite
(come page.layout
o page.title
) o crearne di personalizzate di cui si ha bisogno
localmente nella pagina (come page.author
). Queste variabili saranno poi disponibili
per l’accesso tramite i tag di Liquid (ad esempio, {{ page.title
}}
) più avanti nel file e anche in tutti i file che lo includono.
Si noti che queste variabili sono accessibili solo in quella pagina. Si otterrà un
errore se si cerca di fare riferimento a una page.variable
definita in una pagina
diversa.
Esercizio: Pratica con le variabili locali
Esercitiamoci a creare e usare le variabili locali. Pensate a una variabile locale che potreste voler usare solo nella vostra pagina
about.md
oindex.md
. Se non vi viene in mente nessuna, create una variabile locale chiamata “lezione-esempio” con il valore di “https://carpentries.github.io/lesson-example/” e fatele riferimento nel vostroindex.md
.Cosa avete aggiunto al vostro
index.md
per creare questa variabile? Dove è stata aggiunta la materia prima nel fileindex.md
? Come si fa riferimento a questa variabile?Soluzione
Creare un’intestazione YAML all’inizio di
index.md
e aggiungere la variabilelesson-example
tra i delimitatori a triplo trattino. Si può quindi fare riferimento al valore nella paginaindex.md
come{{ page.lesson-example }}
. Il file dovrebbe ora apparire come:--- lesson-example: "https://carpentries.github.io/lesson-example/" --- # Building Websites in GitHub ## Description {{ site.description }} More details about the project are available from the [About page](about). See some [examples of our work]({{ page.lesson-example }}). Have any questions about what we do? [We'd love to hear from you!](mailto:{{ site.email }})
Si noti che questa variabile non è accessibile dalla pagina
about.md
ed è locale aindex.md
.
Aggiunta di nuove pagine
Il prossimo passo sarà creare un’altra pagina di questo sito web. Idealmente, il nostro
sito avrà più pagine e quindi, per mantenere l’ordine, creeremo la cartella pages
per
memorizzarle. In questa cartella, creare un file about.md
con il seguente contenuto:
---
title: About
permalink: /about/
---
# About
## Project
{{ site.description }}
## Funders
We gratefully acknowledge funding from the XYZ Founding Council, under grant number 'abc'.
## Cite us
You can cite the project as:
> *The Carpentries 2019 Annual Report. Zenodo. https://doi.org/10.5281/zenodo.3840372*
## Contact us
- Email: [{{ site.email }}](mailto:{{ site.email }})
- Twitter: [@thecarpentries](https://twitter.com/thecarpentries)
Si noti che la posizione dell’URL di questa pagina è specificata nell’intestazione,
attraverso l’attributo permalink
.
Questo è l’aspetto attuale delle vostre cartelle:
Ora si deve modificare il file index.md
per includere un link alla nuova pagina about,
in modo da poterla raggiungere dalla pagina principale. Aggiungere una riga al file
index.md
per includere:
More details about the project are available from the [About page](about).
Il link in questa riga reindirizzerà a https://<your user
name>.embl-community.io/group-website/about
, che è l’URL della nostra nuova pagina
about.
Impegnarsi, fare il push e andare sul proprio sito web per vedere le modifiche. Si noti
che i parametri del sito non saranno resi bene quando si visualizzano i file in GitHub
(saranno visualizzati come testo {{ site.PARAMETER_NAME }}
piuttosto che come valore reso del parametro), ma lo saranno nel sito web.
Riutilizzare e ridurre
I parametri globali di Jekyll sono un modo utile per mantenere tutta la configurazione del sito in un unico posto (anche se li si usa solo una volta). In combinazione con i layout/template di Jekyll (di cui parleremo nel prossimo episodio), sono un ottimo modo per creare snippet di markup riutilizzabili che possono essere ripetuti su più pagine o addirittura su ogni pagina del sito. Il riutilizzo aiuta a ridurre la quantità di codice da scrivere.
Link utili
Questo voleva essere solo un tutorial di base. Le possibilità di personalizzazione dei siti con Jekyll vanno ben oltre quanto mostrato qui, si potrebbe ad esempio:
- progettazione di layout di pagina (come gli esercizi/soluzioni di questa lezione),
- lavorare con i loop per elaborare iterativamente variabili contenenti più valori,
- utilizzare i filtri per controllare il formato delle variabili quando vengono inserite in una pagina,
e altro. Questa lezione di The Carpentries, anche se pensata per GitHub, è una risorsa preziosa per saperne di più su come farlo.
Se si sta cercando la documentazione ufficiale di GitLab sulle pagine GitLab con Jekyll, seguire questo link.
Infine, questo progetto contiene un modello più elaborato di sito web basato su GitLab e Jekyll.
Key Points
Through Jekyll, GitLab serves pages are generated from
.md
files