Du skrev allerede YAML i forrige del, uten at vi stoppet opp for å forklare selve språket. Her lærer du YAML som eget format – samme kunnskap trenger du igjen i compose.yaml i Docker Level 2.
Nøkkel-verdi-par
Grunnenheten i YAML er en nøkkel og en verdi, adskilt med kolon og et mellomrom:
navn: Si hei
runs-on: ubuntu-latest
Mellomrommet etter kolon er ikke valgfritt. navn:Si hei uten mellomrom blir ikke tolket som et nøkkel-verdi-par i det hele tatt – det blir lest som ren tekst, uten feilmelding, siden filen fortsatt er teknisk gyldig YAML. Det gjør denne feilen ekstra lur: du får ikke vite at noe er galt før verdien mangler der du trengte den.
Lister
En liste skrives med bindestrek og mellomrom, én verdi per linje, på samme innrykksnivå:
frukter:
- eple
- banan
- pære
Dette tilsvarer «frukter er en liste med tre verdier». Rekkefølgen i lista betyr noe og beholdes.
Nøsting og innrykk
Nøkler kan inneholde andre nøkler eller lister, ikke bare enkeltverdier. Innrykket (mellomrom, aldri tabulator) avgjør hva som hører til hva:
jobs:
si-hei:
runs-on: ubuntu-latest
steps:
- name: Skriv en hilsen
run: echo "Hei fra GitHub Actions!"
Her betyr innrykket:
| Nivå | Innhold |
|---|---|
jobs | inneholder én eller flere jobber |
si-hei | én jobb, nøstet inne i jobs |
runs-on, steps | egenskaper til jobben si-hei, samme innrykksnivå |
- name: ... | første element i lista steps |
Flytt en linje bare ett mellomrom feil vei, og den hører plutselig til noe annet – eller feiler helt.
Tip
De fleste editorer (inkludert VS Code) kan vise usynlige tegn, slik at du ser om innrykket faktisk består av mellomrom. Bruk to mellomrom per nivå, konsekvent gjennom hele filen.
Oppgave 1 - Finn feilen
Denne YAML-filen skal beskrive to steg i en jobb, men noe er galt:
jobs:
bygg:
runs-on: ubuntu-latest
steps:
- name: Installer avhengigheter
run: pip install -r requirements.txt
- name: Kjør tester
run: pytest
Skriv om filen slik at begge stegene faktisk ligger inne i steps-lista, med riktig og konsekvent innrykk.
YAML sammenlignet med JSON
YAML og JSON kan beskrive akkurat den samme informasjonen. Dette:
{
"navn": "Si hei",
"frukter": ["eple", "banan", "pære"]
}
er den samme dataen som:
navn: Si hei
frukter:
- eple
- banan
- pære
JSON bruker klammer, anførselstegn og komma for å vise strukturen. YAML bruker innrykk i stedet, og krever verken anførselstegn eller komma for enkle verdier. Det gjør YAML raskere å skrive for hånd, men mer sårbart for feil innrykk – en manglende klamme i JSON gir ofte en tydelig feilmelding, mens et feilplassert mellomrom i YAML kan gi en fil som fortsatt er gyldig, bare med en annen betydning enn du mente.
Oppgave 2 - Oversett til YAML
Skriv om denne JSON-en til YAML for hånd, uten å bruke et konverteringsverktøy:
{
"tjeneste": "kantineskjerm",
"port": 5000,
"miljøer": ["utvikling", "produksjon"]
}
Hvis noe går galt
Invalid workflow fileeller feilmelding omBad indentation: Et sted brukes feil antall mellomrom, eller det ligger en tabulator i innrykket. Kontroller innrykket linje for linje.- En verdi ser ut til å høre til feil sted: Sjekk at linjen har nøyaktig samme innrykk som resten av det den skal tilhøre – verken mer eller mindre.
- Listeelementet blir ikke gjenkjent: Kontroller at det er nøyaktig ett mellomrom mellom bindestreken og verdien (
- verdi, ikke-verdi). - Fungerer i én editor, men ikke når den pushes: Editoren kan ha vist innrykket riktig visuelt selv om filen faktisk inneholder tabulatorer. Skru på visning av usynlige tegn og kontroller på nytt.