Hvad er en runner?
En Semaphore UI runner er en selvstændig instans af Semaphore uden en brugerflade. Den opretter forbindelse til din primære Semaphore-server, henter opgaver og udfører dem. Runnere kan hostes på separate servere i enhver region eller i ethvert netværk — helt uafhængigt af, hvor dit Semaphore UI befinder sig.
Hvilket problem løser den?
Uden runnere kører alle dine automatiseringsopgaver på en enkelt server. Det fungerer fint i starten, men i takt med at dit team (eller antallet af teams) vokser, opstår der ofte tre problemer:
- Belastning. En stor kø af opgaver, der konkurrerer om en enkelt servers ressourcer, gør alting langsommere.
- Isolering. Når flere teams deler det samme udførelsesmiljø, kan en ødelagt pipeline påvirke alle andre.
- Geografi. Ansible opretter forbindelse til dine servere via SSH. Hvis din infrastruktur befinder sig i Sydney, men din Semaphore-instans er i Frankfurt, snegler enhver udrulning sig gennem en transatlantisk forbindelse. Runnere løser alle tre.
Globale runnere vs. Projektrunnere
Semaphore tilbyder to typer runnere, og forskellen er væsentlig, hvis du overvejer Pro-planen.
| Funktion | Globale runnere (OSS) | Projektrunnere (Pro) |
|---|---|---|
| Tilgængelig i | OSS (gratis) | Pro |
| Belastningsfordeling | ✅ | ✅ |
| Netværksisolering | ❌ | ✅ |
| Tag-baseret routing | ❌ | ✅ |
| Kontrol pr. projekt | ❌ | ✅ |
Globale runnere tildeles tilfældigt på tværs af alle projekter. Fantastisk til fordeling af belastning, men du kan ikke styre, hvilken runner der tager hvilken opgave. Projektrunnere lader dig knytte et tag til enhver skabelon eller ethvert inventory og derefter dirigere specifikke opgaver til specifikke runnere. Det er det, der muliggør isolering og geografisk routing.
3 virkelige brugsscenarier ved brug af runnere
-
Flere teams, nul forstyrrelser Både dit platformsteam og dit produktteam bruger Semaphore. De arbejder uafhængigt — forskellige projekter, forskellige servere, forskellig risikotolerance. Med projektrunnere får hvert team sin egen runner. Hvis det ene teams runner går ned, opdager det andet team det ikke engang.
-
Distribueret infrastruktur på tværs af regioner Dit website kører i et datacenter i New York. En backend-tjeneste kører i Australien. Med en enkelt centraliseret runner i Europa skal hver udrulning forbinde via SSH tværs over kloden — langsomt og unødvendigt.
Opsæt en runner i New York og en i Australien. Tag dine inventories derefter. Nu forbinder hver opgave lokalt inden for samme netværk med fuld hastighed. Hurtigere udrulninger og en mindre angrebsflade som en ekstra fordel.
-
Reducer cloud-omkostninger med webhooks + AWS Lambda Dette er værd at dvæle ved, fordi det er en betydelig omkostningsoptimering. Runnere understøtter webhooks ved to hændelser: opgavestart og opgaveafslutning. Du kan bruge disse til automatisk at starte og stoppe cloud-ressourcer.
Her er opsætningen: din runner befinder sig på en AWS EC2-instans. Når den kører, koster den penge. Når den er stoppet, koster den ingenting.
- Ved opgavestart → webhook trigger en Lambda-funktion → Lambda starter EC2-instansen → runner kommer online, forbinder til Semaphore, henter opgaven
- Ved opgaveafslutning → webhook trigger en anden Lambda → Lambda stopper EC2-instansen
Din runner kører kun, når den rent faktisk udfører arbejde. For teams med sporadiske arbejdsbelastninger kan dette alene retfærdiggøre Pro-planen.
Sådan opsættes en projektrunner
-
Gå til dine projektindstillinger og åbn fanen Runners. Du vil se eventuelle eksisterende runnere anført her.
-
Klik på New Runner. Giv den et navn og et tag — for eksempel new-york.

-
Efter lagring genererer Semaphore to sæt legitimationsoplysninger: et token (gemt på begge sider, brugt til identifikation) og en privat nøgle (gemt kun på runneren, brugt til at kryptere data under overførsel). Download den private nøgle — du skal bruge den i næste trin.

-
Udrul runneren på din målserver. Den nemmeste måde er Docker:
docker run \ -e SEMAPHORE_WEB_ROOT=https://semaphore.example.com \ -e SEMAPHORE_RUNNER_TOKEN=/ADwjSWmWV8FZB4pwQaaEOWgqIdOR+oDOeOXe2a3JD0= \ -e SEMAPHORE_RUNNER_PRIVATE_KEY_FILE=/config.runner.key \ -v "/path/to/private/key:/config.runner.key" \ -d semaphoreui/runner:v2.17.28Alternativt kan du bruge den interaktive opsætningskommando:
semaphore runner setup -
Tilbage i Semaphore åbner du en hvilken som helst skabelon eller et inventory og tildeler runner-tagget new-york. Denne opgave vil nu altid blive udført på din New York-runner.
Tagging af inventories, ikke kun skabeloner
Der er en smartere måde at dirigere opgaver på, hvis du har servere grupperet efter region eller netværk. I stedet for at tagge hver skabelon individuelt kan du tildele et runner-tag direkte til et inventory.
Et inventory i Semaphore er en liste over IP-adresser, som Ansible bruger til at forbinde til dine servere. Hvis du ved, at en bestemt gruppe servere befinder sig i New York, tagger du det inventory med new-york. Fra da af vil enhver skabelon, der bruger dette inventory, automatisk køre på New York-runneren — ingen konfiguration pr. skabelon er nødvendig.
Dette er især nyttigt, når du integrerer nye skabeloner. Du vælger det rigtige inventory, og runner-routingen fungerer automatisk.
Én ting mere: samtidighedsgrænser (concurrency limits)
Hvis du ønsker at begrænse samtidighed, skal du angive et maksimalt antal parallelle opgaver pr. runner. Som standard er det ubegrænset (0). Hvis du sætter det til 5, og den pågældende runner allerede er optaget, vil Semaphore omdirigere opgaven til en anden runner med samme tag.
Klar til at prøve det?
Projektrunnere er tilgængelige på Semaphore Pro-planen. Hvis dit team oplever et af ovenstående scenarier — voksende opgavekøer, flere teams, distribueret infrastruktur — er det værd at undersøge nærmere.

