Kørsel af arbejdsgang afventer godkendelse

Semaphore UI 2.19 er den største udgivelse i 2.x-serien. Den introducerer Arbejdsgange (Workflows) med en grafisk editor, giver runners mulighed for at køre opgaver i Docker-containere og Kubernetes-pods, gør det muligt for Semaphore at udstede kortlivede JWT-identitetstokens til kørende opgaver, tilføjer rotation af krypteringsnøgler, løser runner-pålideligheden permanent og indeholder en lang række sikkerhedsforbedringer.

Denne serie dækker versionerne v2.19.0 til v2.19.14. Rettelsesudgivelser er anført til sidst.

Højdepunkter

  • Arbejdsgange (Beta) — sammenkæd opgaveskabeloner i en pipeline med godkendelsesporte, opbygget i en grafisk editor og overvåget live på samme lærred.
  • Docker- og Kubernetes-afviklere — runners kan køre hver opgave i en isoleret container eller pod (Pro / Enterprise).
  • JWT-identitetstokens til opgaver — nøglefri godkendelse fra playbooks til Vault, AWS, GCP, Azure og andre tjenester, der accepterer OIDC-tokens.
  • Rotation af krypteringsnøgler — en mærket nøglering (keyring) med dynamisk genindlæsning og en vaults check-kommando.
  • Survey-variabler som miljøvariabler, plus int-, text- og opdaterede enum-typer.
  • Ægte serverside-paginering af opgavehistorik — projekter med millioner af opgaver forbliver hurtige.
  • Runner-pålidelighed — online/offline-status, hashed engangsregistrerings-tokens og automatisk genopretning af opgaver, der sidder fast på en nedbrudt runner.
  • Selektiv fejlfindingslogning med SEMAPHORE_DEBUG_FILTER.
  • Sikkerhedsstramning: kontrol af nuværende adgangskode, CSRF-oprindelsesvalidering, sikre cookies og strengere inputvalidering på tværs af hele API’et.
  • BoltDB fjernet — udelukkende SQLite, MySQL og PostgreSQL understøttes.

Arbejdsgange (Beta)

En arbejdsgang er en graf over opgaveskabeloner, som afvikles som en samlet helhed. Hver knude er enten en opgave (kører en skabelon), en godkendelse (pauser kørslen, indtil en bruger godkender eller afviser), eller en note (fritekst-annotation, som aldrig eksekveres). Forbindelser bærer en betingelse: ved succes, ved fejl eller altid.

Arbejdsgange vises som et nyt punkt Workflows i projektets sidepanel, markeret med et Beta-badge. De er tilgængelige i Pro-udgaven; under beta-fasen er de aktiveret uanset abonnementstype.

Grafisk editor

Arbejdsgangseditor

Editoren er et fuldskærmslærred bygget på Drawflow:

  • træk knuder ind fra paletten, forbind dem ved at trække fra en knudes forbindelsespunkt;
  • klik på en linje for at ændre dens betingelse; forbindelser er farvekodede, og en forklaring findes i hjørnet;
  • klik på en knude for at redigere dens egenskaber i sidepanelet: skabelon, konvergens-tilstand (alle forældre / vilkårlig forælder), godkendelses-timeout og besked, notetekst;
  • cyklusser og løkker afvises automatisk under oprettelsen, og et Problemer-panel afspejler serverside-valideringen, så en ugyldig graf ikke kan gemmes;
  • knudepositioner bevares; arbejdsgange oprettet via API uden koordinater tildeles et automatisk topologisk layout;
  • zoom via værktøjslinjen eller Ctrl + musehjul, træk lærredet for at panorere, skjul paletten for at få mere plads;
  • Startversion fastsætter kørselsversioneringen (1.4.0, 1.4.1, …); versionen overføres til hver opgave, som arbejdsgangen starter.

Knudeegenskaber panel

Live kørselsvisning

Kørselsvisningen genbruger samme lærred. Hver knude viser sin opgavestatus, den aktive knude er fremhævet, og afventende godkendelser viser Godkend / Afvis-knapper direkte på lærredet. En Stop-knap tvangsafslutter alle opgaver i kørslen, afviser ventende godkendelser og markerer kørslen som stopped.

Mørkt tema kørselsvisning

Kørselsstatusser er running, approval, success, failed og stopped. Arbejdsgangens fremdrift styres af serveren: når en opgave afsluttes, planlægges de næste knuder automatisk.

Arbejdsgange liste

Opgaveparametre pr. knude

Hver opgaveknude kan tilsidesætte de parametre, den sender til sin skabelon (variabler, inventory, gren, argumenter, version, besked), på samme måde som ved en manuel kørsel.

API

GET/POST   /api/project/{id}/workflows
GET/PUT/DELETE /api/project/{id}/workflows/{workflow_id}
POST       /api/project/{id}/workflows/{workflow_id}/run
GET        /api/project/{id}/workflows/{workflow_id}/runs
GET        /api/project/{id}/workflows/{workflow_id}/runs/{run_id}
POST       /api/project/{id}/workflows/{workflow_id}/runs/{run_id}/stop
GET        /api/project/{id}/workflows/{workflow_id}/runs/{run_id}/artifacts
GET        /api/project/{id}/workflows/{workflow_id}/runs/{run_id}/approvals
POST       /api/project/{id}/workflows/{workflow_id}/runs/{run_id}/approvals/{node_id}

Kendte begrænsninger i beta: intet minimap, fortryd/gentag eller flermarkering; arbejdsgangs-artefakter (set_stats-værdier) flyder endnu ikke mellem opgaver afviklet på eksterne runners.


Docker og Kubernetes afviklere (Pro / Enterprise)

Runners kan afvikle hver opgave i et isoleret miljø frem for direkte på runner-værten. Afvikleren vælges én gang pr. runner-proces via runner.executor.type (local, docker, k8s).

Docker (runner.executor.docker, Pro):

Indstilling Miljøvariabel Standard
host SEMAPHORE_RUNNER_DOCKER_HOST lokal socket
tls_verify, cert_path SEMAPHORE_RUNNER_DOCKER_TLS_VERIFY, …_CERT_PATH
image SEMAPHORE_RUNNER_DOCKER_IMAGE semaphoreui/job:latest
helper_image SEMAPHORE_RUNNER_DOCKER_HELPER_IMAGE semaphoreui/helper:latest
network SEMAPHORE_RUNNER_DOCKER_NETWORK bridge
pull_policy SEMAPHORE_RUNNER_DOCKER_PULL_POLICY if-not-present
cpu_limit, memory_limit SEMAPHORE_RUNNER_DOCKER_CPU_LIMIT, …_MEMORY_LIMIT
privileged SEMAPHORE_RUNNER_DOCKER_PRIVILEGED false
poll_interval_seconds, cleanup_grace_seconds …_POLL_INTERVAL_SECONDS, …_CLEANUP_GRACE_SECONDS 2, 30

Kubernetes (runner.executor.k8s, Enterprise):

Indstilling Miljøvariabel Standard
kubeconfig SEMAPHORE_RUNNER_K8S_KUBECONFIG in-cluster
namespace SEMAPHORE_RUNNER_K8S_NAMESPACE semaphore
image SEMAPHORE_RUNNER_K8S_IMAGE semaphoreui/job:latest
helper_image SEMAPHORE_RUNNER_K8S_HELPER_IMAGE semaphoreui/helper:latest
service_account SEMAPHORE_RUNNER_K8S_SERVICE_ACCOUNT default
pull_secrets SEMAPHORE_RUNNER_K8S_PULL_SECRETS
poll_interval_seconds, cleanup_grace_seconds …_POLL_INTERVAL_SECONDS, …_CLEANUP_GRACE_SECONDS 3, 30

To nye billeder udgives af CI: semaphoreui/job (Ansible, Terraform, OpenTofu, Terragrunt, paramiko) og semaphoreui/helper. En skabelon kan tilsidesætte billedet for sine egne opgaver via feltet Executor image i skabelonformularen.


JWT-identitetstokens til opgaver

Semaphore kan fungere som en OIDC-lignende identitetsudbyder for kørende opgaver, så en playbook kan godkendes mod Vault, cloud STS-endepunkter eller interne tjenester uden langlivede adgangsoplysninger.

Skabelonformular: Avancerede indstillinger med JWT

  • Aktiver pr. skabelon med Issue JWT to task runner; angiv en eller flere audiences og en TTL (begrænset af jwt.max_ttl).
  • Opgaven modtager tokenet i miljøvariablen SEMAPHORE_JWT.
  • Tokens er signeret med ES256 (ECDSA P-256) og indeholder udelukkende ID’er: task_id, project_id, template_id, user_id plus standardkravene iss, sub, aud, exp, nbf, iat, jti.
  • Offentlige nøgler publiceres på GET /.well-known/jwks.json.

Serverkonfiguration:

"jwt": {
  "enabled": true,
  "issuer": "https://semaphore.example.com",
  "default_ttl": "1h",
  "max_ttl": "24h"
}

Miljøvariabler: SEMAPHORE_JWT_ENABLED, SEMAPHORE_JWT_ISSUER, SEMAPHORE_JWT_DEFAULT_TTL, SEMAPHORE_JWT_MAX_TTL.


Survey-variabler

Levering af en variabel som miljøvariabel

En survey-variabel har nu en indstilling Overfør variabel som: den app-specifikke CLI-metode (--extra-vars for Ansible, -var for Terraform/OpenTofu, et CLI-argument for shell-scripts) eller en procesmiljøvariabel. Variabelnavnet anvendes uændret, så en Terraform-bruger blot navngiver den TF_VAR_region. Miljøvariabler vises ikke i proceslister, hvilket gør dette til det sikrere valg for hemmeligheder.

Survey-variabel leveret som miljøvariabel

Nye typer

  • int — numerisk input med validering;
  • text — flerlinjet tekst;
  • enum — opdateret editor med nøgle/værdi-par og en standardværdi.

Enum survey variabel editor

Opgavedialogen gengiver hver type tilsvarende:

Ny opgavedialog med typede survey-variabler

Gemmes i den eksisterende survey_vars JSON — ingen migrering nødvendig.


Skabeloner og opgaver

  • Dynamisk playbook-vælger. Feltet Sti til playbook-fil viser en liste over de playbooks, der findes i repositoryet (GET /api/project/{id}/repositories/{repository_id}/playbooks). Listen følger den valgte gren og falder tilbage til fritekst, hvis repositoryet ikke kan læses.

  • Spring Ansible Galaxy-installation over — valgmulighed pr. skabelon til at springe installation af roller og samlinger fra requirements.yml over.

  • Typede variabler i variabelgrupper, inklusive tal:

    Variabelgruppe med typede variabler

  • Paginering af opgavehistorik. Historiksiden hentede tidligere de seneste 200 opgaver og bladrede igennem dem på klientsiden. Backend returnerer nu én side ad gangen ved hjælp af en keyset-markør (?count=20&before=<task_id>, X-Has-Next-header) uden COUNT(*) og uden OFFSET. Bunden indeholder indstillinger for rækker pr. side samt forrige/næste-knapper.

    Historikside med serverside-paginering

  • Opgavelister genindlæses højst én gang hvert 5. sekund; overflødige forespørgsler er fjernet.

  • Tidsplaner valideres med serverens cron-parser.

  • Tilsidesættelse af gren i en opgave accepteres kun, hvis skabelonen tillader det.

  • Git-handlinger serialiseres pr. repository-mappe. Skabeloner med Tillad parallelle opgaver deler én arbejdskopi, og samtidige git pull / git checkout kunne beskadige den. Opdatering og checkout udgør nu én enkelt kritisk sektion.


Runners

Runners-side med online/offline status

  • Online / offline status på Runners-siden, udledt af heartbeat-levetid.

  • Engangs-registreringstokens. En runner kan oprettes i brugerfladen først og registreres senere med et smrs_…-token, der vises én gang, gemmes udelukkende som et SHA-256 hash og udløber efter en time. Dialogen viser færdige kommandoer til miljøvariabler, konfigurationsfil og Docker.

    Dialogboks til runner-registreringstoken

    SEMAPHORE_WEB_ROOT=https://semaphore.example.com \
    SEMAPHORE_RUNNER_REGISTRATION_TOKEN=smrs_… \
    semaphore runner register --config ./config.runner.json
    
    semaphore runner start --config ./config.runner.json
    
  • Gendannelse af fastlåste opgaver. Runners sender deres processtarttidspunkt (X-Runner-Started-At). En runner, der holder op med at polle, markeres som offline efter runners.offline_timeout_sec (120 sek.): den modtager ingen nye opgaver, og dens starting-opgaver tildeles på ny. Efter runners.task_fail_timeout_sec (420 sek.) markeres dens running-opgaver som fejlede med en tydelig besked. Afstemning kører hvert runners.reconcile_interval_sec (30 sek.).

  • Opgaver, der flyttes væk fra en runner, afbrydes på den gamle runner.

  • Den gamle forældede runner-fallback er fjernet: når alle runners er offline, forbliver opgaver i køen i stedet for at blive sendt til en runner, der ikke har svaret i op til 30 minutter.

  • Runner-specifikke RSA-krypteringsnøgler fjernet. Trafik mellem runner og server er baseret på TLS; dette fjerner nøgleudvekslingstrinnet under registrering og opsætning.

  • Fejlfinding for TCP-forbindelseslækage i runner-klienten; ugyldige registreringstokens returnerer 400.


Hemmeligheder og kryptering

  • Rotation af krypteringsnøgler. Den nye encryption-blok beskriver en mærket nøglering: integrerede keys (værdi eller fil) eller en keys_folder, hvor hver fil er en nøgle navngivet efter sit filnavn, plus active-pegere til den hemmelige nøgle og indstillingsnøglen. Chiffertekst indeholder nu et nøgle-ID, så nøgler kan roteres uden en total genkryptering. encryption.keys_file med keys_poll_interval (standard 15s) genindlæser nøgleringen dynamisk. Ny CLI: semaphore vaults check; semaphore vaults rekey er omskrevet til nøgleringen.
  • option_encryption — en separat nøgle til indstillinger gemt i databasen.
  • OpenBao lagringstype (dirigeret via Vault-udbyderen) med sit eget ikon.
  • AWS Secrets Manager uden statiske adgangsoplysninger — et Use IAM role-afkrydsningsfelt.
  • TLS-skip-verify mulighed for Vault/OpenBao lagre.
  • Synkroniserede og skrivebeskyttede hemmelighedsfelter slettes ikke længere ved opdatering.

Observerbarhed

  • Namespace-opdelt fejlfindingslogning. --debug-filter / SEMAPHORE_DEBUG_FILTER vælger, hvilke delsystemer der udsender debug-output i stil med Node.js debug: runner, runner,task_pool, task_*, *, *,-db. Tilgængelige namespaces: runner, task_pool, task_runner, task_logger, git, terraform, session, ldap, schedule, db, ha. Filtret gælder kun, når logniveauet er DEBUG. Syslog-hooks respekterer samme filter.
  • Mange nye kontekstuelle debug-udskrifter på tværs af runners, opgaver og godkendelse; det valgte workspace udskrives ved opstart.

Sikkerhed

Ændring af adgangskode kræver den nuværende adgangskode

  • Ændring af adgangskode kræver nu den nuværende adgangskode (CWE-620).
  • Origin / Referer-validering på tilstandsændrende forespørgsler (CSRF-sikring).
  • Sessionscookies markeres med Secure, når de serveres over HTTPS.
  • Runner-registreringstokens gemmes som hash og udløber; runner-specifikke krypteringsnøgler er fjernet.
  • Oprettelse af tilpassede roller kontrollerer opretterens rettigheder (rettighedseskaleringsrettelse).
  • Git URL-validering; --end-of-options sendes til git, så en manipuleret ref ikke kan fortolkes som et flag; commit-hashes formatvalideres; grene valideres før gennemsyn af repository.
  • Adgangsnøgle-payloads og skabelonens app-felt valideres.
  • JWT-claims indeholder udelukkende ID’er — ingen navne eller e-mails lækkes til eksterne systemer.
  • Runner-tokens skrives ikke længere ind i projekt-sikkerhedskopier.
  • Sikkerheds-SLA er offentliggjort i SECURITY.md; udgivelsesartefakter signeres med [email protected] GPG-nøglen.

Brugerflade og lokalisering

Sprogvælger med tjekkisk

  • Tjekkisk oversættelse tilføjet.
  • Dropdown-kort til JWT- og planlægningssektionerne i skabelonformularen.
  • Kopiér-til-udklipsholder-ikon er synligt i lyst tema; loading-indikatorer for kørende opgaver rettet; skabelonformular-padding rettet; arbejdsgangs-Beta-mærkat tilføjet.
  • Udtræk af integrationsvariabler bevarer JSON-objekter og arrays i stedet for at konvertere dem til strenge.

Opgraderingsnoter

Væsentlige og adfærdsmæssige ændringer

  1. BoltDB er fjernet. bolt er ikke længere en gyldig dialekt; serveren nægter at starte med “Bolt is not supported starting from version 2.19”. Migrer til SQLite, MySQL eller PostgreSQL først.
  2. Runner-krypteringsnøgler fjernet. Server og runners skal begge være på 2.19. Sørg for, at trafikken mellem runner og server er TLS-beskyttet.
  3. Opgaveliste-API’er er paginerede. GET /api/project/{id}/tasks/last tager count og before; klienter, der har forladt sig på de seneste 200 opgaver i ét svar, skal anvende paginering.
  4. Ingen forældet runner-fallback. Hvis alle runners er offline, forbliver opgaver i køen.
  5. Runner active-flag fjernet fra registreringen.
  6. Projektsikkerhedskopier indeholder ikke længere runner-tokens.
  7. SQLite: v2.19.14 genopbygger session- og task-tabellerne for at tilføje korrekte fremmednøgler (løser sletning af brugere). Tag backup af databasen før opgradering.

Ny konfiguration

jwt, runners, encryption, option_encryption, secrets_path, db.dialect, runner.executor.{type,docker,k8s}, runner.connection.{server_ca_cert_file,skip_tls_verify}, runner.registration_token_file, runner.token_file. Alle er valgfrie; eksisterende konfigurationer fortsætter med at fungere.

Databasemigreringer

v2.18.6 (skabelon jwt_params), v2.18.15 (arbejdsgangstabeller), v2.19.2 (runner.started_at), v2.19.11 (project__workflow_node.task_params_id), v2.19.12 (project__template.executor_image), v2.19.14 (SQLite session/task genopbygning). Kompatibilitet med MariaDB 12.1-migrering rettet.


Rettelsesudgivelser

Version Ændringer
2.19.8 Rettelse af SQLite-migrering; rettelse af brugersletning (session/task fremmednøgler); case-insensitive strengsammenligning i databaseforespørgsler
2.19.9 SEMAPHORE_RUNNER_EXECUTOR_TYPE miljøvariabel; oprydning af omitempty i konfiguration
2.19.10 Rettelse af afvikler-konfiguration; rettelse af Docker-build-indstilling
2.19.11 Valgt workspace udskrives i logs; latest-tag for hjælpebillede; databasemigreringstest
2.19.12 Rettelse af nil pointer i runner-konfigurationsindstillinger; rettelse af fejlformidling
2.19.14 Rettelse af ældre secrets_path-håndtering i konfiguration

Afhængigheder

Go 1.26; go-git 5.19, go-oidc 3.19, golang.org/x/crypto 0.53, go-ldap 3.4.13, modernc.org/sqlite 1.52. Dokumentation tilføjet som et git-undermodul; THIRD-PARTY-LICENSES.md genopbygget.