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.
Erstat et centralt script
Sektion kaldt “Erstat et centralt script”Opret et script med præcis samme gruppenavn og filnavn som det centrale script:
devops/steps/setup/100_set-variables.shDet 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.
Kør et hook før eller efter et script
Sektion kaldt “Kør et hook før eller efter et script”Filnavnet bestemmer rækkefølgen. Centrale scripts bruger normalt multipla af 100, så der er plads imellem dem:
devops/steps/setup/050_pre-setup.shdevops/steps/setup/150_post-setup.sh050_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 en lokal gruppe
Sektion kaldt “Opret en lokal gruppe”Opret eksempelvis:
mkdir -p devops/steps/my-project-checkGem følgende som devops/steps/my-project-check/100_check-file.sh:
#!/bin/bashset -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 1fi
info "Projektets kontrolfil findes."echo "MY_PROJECT_CHECK=passed" >> devops/temp/artifact.envsuccess "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-checkHvis 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.
Argumenter til runner og scripts
Sektion kaldt “Argumenter til runner og scripts”--include vælger grupper. --skip-if-outdated aktiverer kontrollen for forældede kørsler. Argumenterne efter det separate -- sendes videre til scriptsene.
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.
Del tilstand mellem scripts
Sektion kaldt “Del tilstand mellem scripts”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:
echo "MY_RESULT=done" >> devops/temp/artifact.envFilen 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.
Brug fælles logfunktioner
Sektion kaldt “Brug fælles logfunktioner”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.
Hooks, der ændrer build-input
Sektion kaldt “Hooks, der ændrer build-input”Hvis et hook ændrer ignorerede filer, som .NET-kompileringen afhænger af, skal det gøre et tidligere build ugyldigt:
. "${CI_BUILD_STATE_LIB:?Kør scriptet via Ecreos runner}"invalidate_dotnet_buildAlternativt kan hooket fjerne devops/temp/build-state. Ellers kan Azure-publiceringen genbruge et build fra før hookets ændring.