Scripting og CI/CD
CLI'en virker på samme måde i et script som i en terminal. Giv den en API-nøgle i miljøvariabler, læs dens svar som JSON, og lad dens exitkode fortælle scriptet, hvad der skete. Denne side viser hver af delene og komplette pipelines til GitHub Actions, GitLab CI og Docker.
Sådan bruger et script CLI'en
En udrulning kan først spørge Status200, om en hændelse er åben, og stoppe, hvis der er en:
En udrulning, der venter, mens en hændelse er åben
Giv et script dets API-nøgle
Sæt STATUS200_API_KEY og STATUS200_URL fra dit CI-systems hemmeligheder. CLI'en behøver så hverken login eller en konfigurationsfil. Et flag går stadig forud for dem for én kommando, og de går forud for gemte kontekster.
export STATUS200_API_KEY="$CI_STATUS200_API_KEY"
export STATUS200_URL="https://status200.ru"
status200 incident countGiv hver pipeline sin egen API-nøgle med kun den adgang, den har brug for: et tjek, der kun læser, har brug for en nøgle, der kun læser. Slet nøglen i Status200, når pipelinen nedlægges.
Kører én maskine job for flere projekter, så gem en kontekst for hvert og nævn den i hver kommando, så et job aldrig bruger et andets aktuelle kontekst:
status200 --context production incident count
status200 --context staging monitor countExitkoder
| Kode | Betydning | For eksempel |
|---|---|---|
0 | Det lykkedes | En liste, også en, der ikke finder noget |
1 | Det mislykkedes | Status200 afviste anmodningen, for eksempel API error (422); ugyldig JSON; en manglende eller ukendt indstilling; en kontekst, der ikke er gemt |
2 | Ingen brugbar API-nøgle | Ingen legitimationsoplysninger fundet; en ugyldig API-nøgle; en nøgle under sit abonnement (402); 401 |
3 | Ikke fundet | Status200 svarede 404: posten findes ikke, ligger i et andet projekt, eller nøglen må ikke læse den |
whoami og context current afslutter med 0, også når intet er gemt: de rapporterer, hvad der er sat, de tjekker det ikke. Et script skelner tilfældene på koden:
status200 incident get "$INCIDENT_ID" -o json > incident.json
case $? in
0) echo "Saved the incident to incident.json" ;;
2) echo "Check STATUS200_API_KEY and STATUS200_URL" >&2; exit 1 ;;
3) echo "There is no incident $INCIDENT_ID" >&2; exit 1 ;;
*) echo "Status200 refused the request" >&2; exit 1 ;;
esacFejlmeddelelser går til standard-fejl, så incident.json kun indeholder svaret.
Læs svar med jq
Skriv -o json i scripts. I en pipe udskriver CLI'en alligevel JSON, men flaget holder scriptet kørende, uanset hvor det kører:
# The title of each incident
status200 incident list -o json | jq -r '.[].title'
# The ID of a new monitor
MONITOR_ID=$(status200 monitor create --data '{"name":"Checkout API","monitorType":"Manual"}' -o json | jq -r '._id')
# When each incident was created: dates come as objects
status200 incident list -o json | jq -r '.[] | "\(.createdAt.value) \(.title)"'
# The newest 100 incidents as CSV
status200 incident list --limit 100 -o json | jq -r '.[] | [._id, .title, .createdAt.value] | @csv'En optælling udskriver ét tal, klar til at sammenligne:
OPEN=$(status200 incident count --query '{"currentIncidentState":{"isResolvedState":false}}')
echo "$OPEN incidents are open"Opret poster fra filer
Hold poster som JSON-filer ved siden af din kode, og opret dem derfra:
{
"name": "Checkout API",
"monitorType": "Manual"
}status200 monitor create --file monitors/checkout-api.jsonMange poster fra ét JSON-array, én oprettelse for hver:
jq -c '.[]' monitors.json | while IFS= read -r monitor; do
status200 monitor create --data "$monitor" -o json | jq -r '._id'
doneHver kørsel opretter nye poster. Vil du holde monitorer og statussider i takt med filer, kun ændre det, der ændrede sig, og fjerne det, der er væk, så brug Terraform-provideren.
Eksempler på pipelines
GitHub Actions
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: lts/*
- name: Install the Status200 CLI
run: npm install -g @status200/cli
- name: Stop while an incident is open
env:
STATUS200_API_KEY: ${{ secrets.STATUS200_API_KEY }}
STATUS200_URL: https://status200.ru
run: |
OPEN=$(status200 incident count --query '{"currentIncidentState":{"isResolvedState":false}}')
if [ "$OPEN" -gt 0 ]; then
echo "$OPEN incidents are open: not deploying."
exit 1
fi
- name: Deploy
run: ./deploy.shGitLab CI
check-incidents:
stage: test
image: node:lts
variables:
STATUS200_URL: https://status200.ru
script:
- npm install -g @status200/cli
- OPEN=$(status200 incident count --query '{"currentIncidentState":{"isResolvedState":false}}')
- echo "$OPEN incidents are open"
- test "$OPEN" -eq 0Docker
FROM node:lts-slim
RUN npm install -g @status200/cli
ENTRYPOINT ["status200"]I GitHub Actions tilføjer du STATUS200_API_KEY under repositoriets Settings → Secrets and variables → Actions; i GitLab tilføjer du den som en maskeret CI/CD-variabel. Med Docker-imaget sender du variablerne med til hver kørsel:
docker build -t status200-cli .
docker run --rm -e STATUS200_API_KEY -e STATUS200_URL status200-cli incident count