Skripting og CI/CD
CLI-en virker på samme måte i et skript som i en terminal. Gi den en API-nøkkel i miljøvariabler, les svarene som JSON, og la avslutningskoden fortelle skriptet hva som skjedde. Denne siden viser hver av delene, og komplette pipelines for GitHub Actions, GitLab CI og Docker.
Slik bruker et skript CLI-en
En utrulling kan først spørre Status200 om en hendelse er åpen, og stoppe hvis det er en:
En utrulling som venter mens en hendelse er åpen
Gi et skript API-nøkkelen sin
Sett STATUS200_API_KEY og STATUS200_URL fra hemmelighetene i CI-systemet ditt. CLI-en trenger da verken login eller en konfigurasjonsfil. Et flagg går fortsatt foran dem for én kommando, og de går foran lagrede kontekster.
export STATUS200_API_KEY="$CI_STATUS200_API_KEY"
export STATUS200_URL="https://status200.ru"
status200 incident countGi hver pipeline sin egen API-nøkkel med bare tilgangen den trenger: en sjekk som bare leser, trenger en nøkkel som bare leser. Slett nøkkelen i Status200 når pipelinen legges ned.
Kjører én maskin jobber for flere prosjekter, lagrer du en kontekst for hvert og nevner den i hver kommando, slik at en jobb aldri bruker en annens gjeldende kontekst:
status200 --context production incident count
status200 --context staging monitor countAvslutningskoder
| Kode | Betydning | For eksempel |
|---|---|---|
0 | Det virket | En liste, også en som ikke finner noe |
1 | Det mislyktes | Status200 avviste forespørselen, for eksempel API error (422); ugyldig JSON; et manglende eller ukjent alternativ; en kontekst som ikke er lagret |
2 | Ingen brukbar API-nøkkel | Ingen legitimasjon funnet; en ugyldig API-nøkkel; en nøkkel under abonnementet sitt (402); 401 |
3 | Ikke funnet | Status200 svarte 404: posten finnes ikke, ligger i et annet prosjekt, eller nøkkelen kan ikke lese den |
whoami og context current avslutter med 0 selv når ingenting er lagret: de rapporterer hva som er satt, de sjekker det ikke. Et skript skiller tilfellene 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 ;;
esacFeilmeldinger går til standard feil, så incident.json inneholder bare svaret.
Les svar med jq
Skriv -o json i skript. I en pipe skriver CLI-en ut JSON uansett, men flagget holder skriptet i gang uansett hvor det kjø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 telling skriver ut ett tall, klart til å sammenligne:
OPEN=$(status200 incident count --query '{"currentIncidentState":{"isResolvedState":false}}')
echo "$OPEN incidents are open"Opprett poster fra filer
Hold poster som JSON-filer ved siden av koden din, og opprett dem derfra:
{
"name": "Checkout API",
"monitorType": "Manual"
}status200 monitor create --file monitors/checkout-api.jsonMange poster fra ett JSON-array, én opprettelse for hver:
jq -c '.[]' monitors.json | while IFS= read -r monitor; do
status200 monitor create --data "$monitor" -o json | jq -r '._id'
doneHver kjøring oppretter nye poster. For å holde monitorer og statussider i takt med filer, bare endre det som er endret og fjerne det som er borte, bruker du Terraform-leverandøren.
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 legger du til STATUS200_API_KEY under repositoriets Settings → Secrets and variables → Actions; i GitLab legger du den til som en maskert CI/CD-variabel. Med Docker-bildet sender du variablene med til hver kjøring:
docker build -t status200-cli .
docker run --rm -e STATUS200_API_KEY -e STATUS200_URL status200-cli incident count