Gå til indhold

Projektspecifikke scripts

Læg projektets scripts i devops/steps/<gruppe>/. Runneren kopierer dem sammen med de centrale scripts, før gruppen kører. Lokale scripts med samme filnavn vinder over centrale scripts.

Opret et script med præcis samme gruppenavn og filnavn som det centrale script:

devops/steps/setup/100_set-variables.sh

Det erstatter hele det centrale setup-script i projektet. Brug det kun, når projektet skal overtage hele opgaven. Fremtidige centrale rettelser til det erstattede script kommer ikke med i projektets kørsel.

Filnavnet bestemmer rækkefølgen. Centrale scripts bruger normalt multipla af 100, så der er plads imellem dem:

devops/steps/setup/050_pre-setup.sh
devops/steps/setup/150_post-setup.sh

050_pre-setup.sh kører før 100_set-variables.sh, og 150_post-setup.sh kører efter. Et hook før setup kan ikke regne med, at artifact.env er oprettet. Læg hooks, der bruger setup-værdier, efter setup-scriptet.

Opret eksempelvis:

Terminal window
mkdir -p devops/steps/my-project-check

Gem følgende som devops/steps/my-project-check/100_check-file.sh:

#!/bin/bash
set -euo pipefail
. "${CI_OUTPUT_LIB:?Kør scriptet via Ecreos runner}"
if [[ ! -f devops/project-check.txt ]]; then
error "devops/project-check.txt mangler."
exit 1
fi
info "Projektets kontrolfil findes."
echo "MY_PROJECT_CHECK=passed" >> devops/temp/artifact.env
success "Projektkontrollen er gennemført."

Tilføj gruppen i det relevante pipeline-step. Dette er et komplet YAML-udsnit til steppets script:

script:
- |
curl -sSfL https://ecreociscripts.blob.core.windows.net/ci-scripts/run.sh \
| bash -s -- --include setup validate my-project-check

Hvis der ikke findes en central zip til gruppen, bruger runneren de lokale scripts. Vælg et projektspecifikt gruppenavn for at mindske risikoen for et senere navnesammenfald med en central gruppe.

--include vælger grupper. --skip-if-outdated aktiverer kontrollen for forældede kørsler. Argumenterne efter det separate -- sendes videre til scriptsene.

Terminal window
curl -sSfL https://ecreociscripts.blob.core.windows.net/ci-scripts/run.sh \
| bash -s -- \
--include setup validate my-project-check \
-- \
--web-project-dir "MyProject/Presentation/Website"

Dette eksempel kører validering og projektkontrol. Det deployer ikke. Afprøv tilsvarende scripts i en arbejdsbranch og PR-pipeline. Der findes ikke et generelt --dry-run-flag i den aktuelle runner.

Scripts kører som separate processer. Et almindeligt export i ét script gør derfor ikke en ny værdi tilgængelig i det næste. Gem værdien i devops/temp/artifact.env:

Terminal window
echo "MY_RESULT=done" >> devops/temp/artifact.env

Filen er delt KEY=VALUE-data. De eksisterende centrale scripts bruger ofte export $(cat devops/temp/artifact.env | xargs) til indlæsning. Mønstret er følsomt over for mellemrum og quoting, så hold egne simple statusværdier uden mellemrum.

Indlæs ikke den genererede artifact.env med source eller .. Den kan indeholde bogstavelige $-tegn fra brugernavne og passwords. Dependency-scripts bruger en særskilt loader til at læse værdierne som data.

Runneren sætter CI_OUTPUT_LIB til den genererede hjælpefil. Brug den som i eksemplet ovenfor. Der er ikke behov for at kopiere output.sh ind i projektet.

Funktion Brug
info "tekst" Almindelig information
dim "tekst" Forventet overspring eller supplerende besked
key_value "navn" "værdi" Vis en navngiven værdi
success "tekst" Opgaven er gennemført
warn "tekst" Advarsel, som ikke stopper scriptet
error "tekst" Fejlbesked. Brug også exit 1, når scriptet skal fejle
verbose "tekst" Detaljer kun i scriptets logfil
verbose_block "navn" "$indhold" En blok med detaljer kun i logfilen

Log ikke hemmeligheder, heller ikke med verbose.

Hvis et hook ændrer ignorerede filer, som .NET-kompileringen afhænger af, skal det gøre et tidligere build ugyldigt:

Terminal window
. "${CI_BUILD_STATE_LIB:?Kør scriptet via Ecreos runner}"
invalidate_dotnet_build

Alternativt kan hooket fjerne devops/temp/build-state. Ellers kan Azure-publiceringen genbruge et build fra før hookets ændring.