
Semaphore UI 2.20 dodaje revizioni dnevnik sa izvozom u SIEM, razvija Tokove posla u pravi pajplajn mehanizam sa čvorovima čekanja, revizijama, izlazima koji se prenose između zadataka i promenljivim tokova posla, preuređuje uloge tako da član može imati više njih, a administratori dobijaju uloge na nivou instance i mapiranja IdP grupa, uvodi konfiguraciju hostova za SSH i Git akreditive po hostu, premešta svaku dodatnu Ansible promenljivu u fajlove šifrovane Vault-om i izlaže Prometheus metrike.
Ova linija počinje verzijom v2.20.0. Zakrpe će biti navedene na kraju ove stranice kako budu izlazile.
Istaknuto
- Revizioni dnevnik — ko je šta uradio, odakle i sa kakvim rezultatom; administratorski ekran, politika zadržavanja i izvoz u Syslog / Splunk HEC za SIEM sisteme (izvoz i filtri u Pro izdanju).
- Tokovi posla — čvorovi čekanja, nepromenljive revizije vezane za pokretanja, izlazi koji se isporučuju kao ulazi sledećeg zadatka, promenljive toka posla koje se traže u dijalogu za pokretanje, redizajnirani uređivač sa prečicama i operacijom vrati, i webhook-ovi koji pokreću tokove posla.
- Više uloga po članu, uloge sa ID-jevima i slug-ovima, globalne uloge sa dozvolama na nivou instance (Pro) i mapiranja IdP grupa → uloga koja se primenjuju pri prijavi (Enterprise).
- Spoljni identiteti — LDAP i OIDC prijave se vezuju za račune pomoću stabilnog ID-ja provajdera, a ne pomoću e-pošte; više LDAP direktorijuma na jednoj stranici za prijavu.
- Konfiguracija hostova — mapirajte SSH hostove i Git URL adrese na akreditive projekta, uz primenu na kloniranje, Galaxy, Terraform module i Ansible.
- Dodatne Ansible promenljive se više nikada ne nalaze u komandnoj liniji; tajne se prenose u fajlu šifrovanom Ansible Vault-om, a Jinja2 unutar vrednosti se više ne izvršava.
- Šabloni: Ansible radni direktorijum, jedinstveni nazivi i
template_nameu API-ju zadataka, potiskivanje obaveštenja o greškama, skrivanje Dry Run / Diff opcija, opcije Galaxy instalacije, promenljive upitnika sa višestrukim izborom, tajne iz upitnika na udaljenim runner-ima. - Monorepo repozitorijumi dele jednu radnu kopiju između šablona; ponovni pokušaji Git operacija, paralelno preuzimanje podmodula, provera SSH ključeva hostova.
- Prometheus metrike na
/api/metrics. - Generisanje SSH parova ključeva na serveru i kopiranje javnog ključa iz skladišta ključeva.
Revizioni dnevnik

Semaphore sada beleži bezbednosno značajne događaje u posebnom dnevniku u koji se samo dodaje. Omogućava se sa:
"audit": {
"enabled": true,
"instance_id": "semaphore-prod"
}
(SEMAPHORE_AUDIT_ENABLED, SEMAPHORE_AUDIT_INSTANCE_ID; instance_id je obavezan i imenuje
instalaciju u svakom događaju.)
Šta se beleži. 116 vrsta događaja u osam kategorija: auth (prijave, odjave, MFA, odbijeni API
tokeni, odbijeni zahtevi, blokirani CSRF), iam (korisnici, lozinke, API tokeni, identiteti,
članstva, uloge, dozvole nad šablonima), resource (projekti, rezervne kopije, inventari,
repozitorijumi, šabloni, rasporedi, integracije, konfiguracije hostova, tokovi posla, grupe
promenljivih), secret (akreditivi i skladišta tajni), task (pokretanje sa okidačem, završetak sa
rezultatom i trajanjem, odobrenja, zaustavljanja, brisanje istorije), runner (registracija,
promene, odbijeni izveštaji), system (podešavanja, licenca) i audit sam (pokretanje, zadržavanje,
izvoz). Lozinke, tokeni, vrednosti tajni, izlaz zadataka i promenljive se nikada ne upisuju.
Omot događaja. Svaki događaj nosi UUID, redni broj bez praznina, UTC vremensku oznaku u
mikrosekundama, aktera (korisnik / anonimni / sistem / runner / integracija, uz autentifikaciju
sesijom ili API tokenom i otisak tokena), izvornu IP adresu i User‑Agent, cilj, projekat, ID zahteva
(koji se vraća i u X-Request-ID zaglavlju odgovora), ID instance i ID HA čvora. Ishodi su success
ili failure sa zatvorenom listom razloga; akcija koja je sačuvala objekat ali nije uspela u kasnijem
koraku je uspeh sa partial = true. Iza reverznog proksija, X-Forwarded-For se smatra pouzdanim
samo sa mreža navedenih u audit.trusted_proxy_cidrs.

Administratorski ekran. Revizioni dnevnik u korisničkom meniju (/audit-log) prikazuje
događaje od najnovijih, 50 po stranici, uz paginaciju Stariji / Noviji; red otvara karticu sa
sekcijama Ko, Objekat, Gde, Kada, Detalji i Tehnički podaci i dugmetom koje kopira
događaj kao JSON koji se šalje SIEM sistemu. Pristup zahteva novu globalnu dozvolu Čitanje
revizionog dnevnika.
Zadržavanje. audit.retention_days briše starije događaje u serijama, na svakih sat vremena sa
slučajnim odstupanjem kako se HA čvorovi ne bi sudarali; svaki prolaz koji nešto obriše i sam se beleži.
Pro: filtri i izvoz. Filtrirajte po periodu, korisniku, projektu, vrsti događaja, rezultatu i IP adresi; pređite na filtar iz bilo koje vrednosti na kartici; izvezite trenutni izbor kao CSV ili JSON Lines.
Pro: izvoz u SIEM. Dve destinacije, svaka sa sopstvenim kursorom tako da se ništa ne preskače kada
je prijemnik nedostupan: Syslog preko TLS-a (RFC 5424, JSON događaja kao telo) putem
audit.syslog i Splunk HTTP Event Collector putem audit.splunk_hec (url, token, index,
source, sourcetype, ca_file, …). Isporuka je najmanje jednom, uređena po rednom broju; u HA
režimu samo jedan čvor izvozi po destinaciji, uz koordinaciju preko Redis zakupa. Tri Prometheus
serije opisuju izvoznik: semaphore_audit_export_pending_events,
semaphore_audit_export_oldest_pending_seconds i semaphore_audit_export_errors_total.
Skladištenje: tabele audit_event, audit_event_sequence, audit_export_state (migracije od
v2.20.9 do v2.20.11). API: GET /api/audit/events i GET /api/audit/events/export.
Tokovi posla
Tokovi posla su Pro funkcija; oznaka Beta je uklonjena.
Čvorovi čekanja
Četvrta vrsta čvora, pored zadatka, odobrenja i beleške: Čekanje pauzira pokretanje određeni broj
sekundi i zatim otpušta svoje veze. Prikaz pokretanja pokazuje odbrojavanje uživo na kartici;
zaustavljeno pokretanje otkazuje čekanje. Polje delay_seconds, migracija v2.20.2.
Revizije
Svako čuvanje toka posla kreira novu reviziju grafa; pokretanje fiksira reviziju iz koje je
započeto, tako da izmena toka posla nikada ne menja pokretanje u toku niti ostavlja čvorove prošlih
pokretanja bez roditelja. Uređivač prikazuje oznaku rev. N i koliko pokretanja još izvršava stariju
reviziju; prikaz pokretanja pokazuje koju reviziju izvršava. Revizije na koje se nijedno pokretanje ne
poziva brišu se kada se sačuva novija. API: GET …/workflows/{id}/revisions i
…/revisions/{revision_id}.
Izlazi i ulazi

Zadatak može predati strukturirane podatke čvorovima koji slede. Svaki zadatak koji pokrene tok posla
dobija SEMAPHORE_OUTPUTS_FILE; sve što u njega upiše kao JSON objekat postaje njegov izlaz:
cat > "$SEMAPHORE_OUTPUTS_FILE" <<EOF
{"image_tag": "1.4.2", "replicas": 3, "subnet_ids": ["subnet-1", "subnet-2"]}
EOF
Ansible proizvodi izlaze pomoću ansible.builtin.set_stats kroz ugrađeni callback plugin; izlazi za
Terraform, OpenTofu i Terragrunt se automatski preuzimaju iz output -json (sensitive vrednosti se
preskaču i prikazuju kao Nije preuzeto). Izlazi se čitaju samo kada zadatak uspe; ograničenja su
100 izlaza, po 32 KB, 256 KB po fajlu.
Veza koja ulazi u čvor zadatka isporučuje ulaze — puni promenljive upitnika ciljnog šablona izlazima izvornog čvora:
- Po nazivu (podrazumevano): svaki izlaz čiji naziv odgovara nazivu promenljive upitnika je puni.
- Eksplicitno mapiranje ulaza: navedite parove
variable ← output keykoje treba isporučiti; kada tok posla ima završeno pokretanje, panel predlaže ključeve koje je to pokretanje proizvelo.

Vrednosti se pretvaraju u tip promenljive, čvorovi odobrenja i čekanja propuštaju izlaze dalje,
eksplicitno mapiranje ima prednost nad isporukom po nazivu, a obavezna promenljiva ostavljena bez
vrednosti obara zadatak čvora pre nego što počne, tako da pokretanje sledi svoje veze pri neuspehu.
Prikaz pokretanja pokazuje oznaku N izlaza po čvoru, dijalog zadatka ima tabelu Izlazi, a log
zadatka počinje jednim redom Input "x" <- output "y" of node N po isporučenoj vrednosti. Izlazi se
čuvaju kao čist tekst i nikada ne pune promenljivu tipa secret; secret se ne može prenositi kroz
izlaze. Zadaci na udaljenim runner-ima proizvode i primaju izlaze; Docker i Kubernetes izvršioci ih
još ne preuzimaju.

Promenljive toka posla i dijalog za pokretanje
Tok posla ima sopstvene promenljive upitnika, koje se traže jednom u dijalogu Pokreni “…” pri
pokretanju (tok posla bez promenljivih počinje odmah, kao i do sada). Odgovori se čuvaju na pokretanju,
prikazuju se kao oznake u traci Promenljive iznad platna pokretanja i do zadatka dolaze samo kroz
eksplicitno povezivanje u panelu čvora — promenljiva toka posla nikada ne ulazi u šablon po nazivu.
Tajne nisu dozvoljene kao promenljive toka posla. POST …/workflows/{id}/runs prihvata
{"environment": {"image_tag": "1.4.3"}}; odgovor koji ne odgovara svom tipu ili izostala obavezna
vrednost odbijaju pokretanje.
Okruženje zadatka toka posla
Svaki zadatak koji pokrene tok posla prima SEMAPHORE_WORKFLOW_ID, SEMAPHORE_WORKFLOW_RUN_ID,
SEMAPHORE_WORKFLOW_URL (zahteva web_host) i SEMAPHORE_OUTPUTS_FILE, za svaku aplikaciju i na
udaljenim runner-ima.
Redizajnirani uređivač

- Nove kartice čvorova sa pločicom vrste, statusom, trajanjem, oznakom izlaza i ugrađenim dugmadima Odobri / Odbij; oznake veza sa padajućim izborom uslova na mestu i dugmetom za brisanje; platno sa tačkastom mrežom.
- Meni za brzo dodavanje sa
+tačke spajanja čvora, desnim klikom na platno ili dugmetom u praznom stanju: lista vrsta čvorova i šablona zadataka sa pretragom, novi čvor se povezuje pri uspehu. - Vrati / ponovi (
Ctrl/⌘+Z,Ctrl/⌘+Shift+Z), preimenovanje toka posla na mestu, meni Problemi koji fokusira problematični čvor, oznaka Sačuvaj za nesačuvane promene i zaštita pri napuštanju stranice. - Prečice na platnu: strelice pomeraju prikaz (
Shiftza veliki korak),+/-zumiraju,0uklapa graf,1resetuje zum,Escbriše izbor; kartice čvorova se mogu fokusirati tastaturom. - Lebdeće kontrole: uvećavanje / umanjivanje, uklapanje prikaza, automatski raspored Uredi, procenat zuma.
- Jedna strelica skuplja paletu i glavnu navigaciju zajedno; stanje se pamti.
- Prekomerno skrolovanje na trekpedu više ne pokreće pretraživačev pokret za nazad na macOS-u.

Webhook-ovi pokreću tokove posla
Integracija sada može pokrenuti tok posla umesto šablona (Pokreće: šablon / tok posla u formi
integracije). Svaka izvučena vrednost postaje odgovor na upitnik toka posla. Upravljanje takvim
integracijama zahteva Pro funkciju workflow_integrations_management. Za integracije sa šablonima,
izvučena vrednost iz Parametara zadatka sa nazivom git_branch postavlja granu pokrenutog zadatka
kada šablon dozvoljava njeno predefinisanje.
Promene u API-ju
POST …/workflows/{id}/run je preimenovan u POST …/workflows/{id}/runs i prihvata telo
environment. Detalji pokretanja nose revision_id, revision, objekat delay po čvoru i
task.artifacts. Polja workflow_run_id, workflow_node_id i artifacts koja klijent pošalje na
zadatku se ignorišu, tako da se zadatak ne može predstaviti kao čvor tuđeg pokretanja.
Uloge i kontrola pristupa
Više uloga po članu

Član projekta ima skup uloga, koji se uređuje kao oznake na stranici Tim. API prihvata
roles: ["manager", "release_approver"] uz nasleđeno role; odgovor zadržava skalarno role samo za
članove sa jednom ulogom. Korisnik koji nije administrator ne može poslednjem vlasniku oduzeti ugrađenu
ulogu Vlasnik.
Uloge sa ID-jevima, slug-ovima i opsezima
Uloge su sada redovi u bazi sa celobrojnim id i slug (^[A-Za-z0-9_-]{1,100}$, izveden iz naziva u
formi); i četiri ugrađene uloge su redovi, pa ih prilagođena uloga više ne može zakloniti. Uloge imaju
opseg: ugrađene, deljene (upotrebljive u svakom projektu) ili projektne. Brisanje uloge koja je u
upotrebi vraća 409 sa opisom posledica (članovi, projekti, dozvole nad šablonima, mapiranja) i može
se ponoviti sa ?force=true — Obriši sa dodelama u interfejsu. Migracije v2.20.12 i v2.20.13
ponovo grade tabele uloga; vidite napomene o nadogradnji.
Globalne uloge i dozvole (Pro)

Prava na nivou instance nisu više samo administratorska oznaka. Globalna uloga dodeljuje masku od
četiri dozvole — Upravljanje korisnicima, Upravljanje globalnim ulogama, Upravljanje sistemskim
podešavanjima, Čitanje revizionog dnevnika — i dodeljuje se korisnicima na kartici Uloge
stranice Korisnici (/users/roles) i u kartici Globalne uloge dijaloga korisnika, koja prikazuje i
efektivne dozvole i to koja ih uloga dodeljuje. Svaku administratorsku rutu čuva jedan od ta četiri
bita; GET /api/user vraća global_permissions. Instanca uvek zadržava najmanje jednog
administratora, što se obezbeđuje zaključavanjem reda koje je sigurno i između HA čvorova. Korisnik sa
dozvolom Upravljanje korisnicima ne može izmeniti administratora niti bilo koga ko ima dozvolu koju
sam nema. API: /api/global-roles, /api/users/{id}/global-roles,
/api/users/{id}/global-permissions, katalog na /api/global-roles/permissions.
Mapiranja grupa na uloge (Enterprise)

Mapirajte grupu provajdera identiteta na ulogu u projektu na novoj stranici Mapiranja grupa
(/role-mappings): provajder, grupa, projekat, uloga. Pri svakoj OIDC prijavi mapirane uloge korisnika
se usklađuju sa grupama iz tokena (groups_claim provajdera). Mapirane uloge se na stranici Tim
prikazuju kao zaključane oznake sa opisom provider: group i ne mogu se ukloniti kao uloge člana;
mapirane uloge se ne računaju kao poslednji vlasnik projekta. Prijava lozinkom ili preko LDAP-a briše
mapirane uloge, jer ne nosi grupe. API: /api/role_mappings.
Autentifikacija i identiteti

- Spoljni identiteti. LDAP i OIDC prijave se vezuju za Semaphore račune pomoću stabilnog ID-ja
provajdera (OIDC
sub, LDAP DN) u novoj tabeliuser__external_identity, a ne pomoću e-pošte. Time se zatvara klasa grešaka u kojoj IdP koji prihvata svaku unetu adresu preuzme tuđi račun.external_auth_email_matching(autopodrazumevano,always,never) određuje da li se postojeći spoljni korisnik bez identiteta i dalje može jednom upariti po e-pošti; lokalni računi sa lozinkom se nikada ne preuzimaju. OIDC e-pošta se uzima u obzir samo kada jeemail_verifiedi kada provajder postavirequire_verified_email. Korisnici sami povezuju i raskidaju identitete u dijalogu računa (/api/users/{id}/identities,POST /api/user/identities/ldap,/api/auth/oidc/{provider}/login?link=1). - Više LDAP direktorijuma.
ldap_providersje mapa imenovanih direktorijuma, svaki sa sopstvenim serverom, povezivanjem, pretragom, mapiranjima, bojom i redosledom; nasleđeni ravan blokldap_*nastavlja da radi kao provajderldap. Stranica za prijavu prikazuje prekidač kada postoji više od jedne kartice, a interna kartica nikada ne šalje lozinku direktorijumu.GET /api/auth/loginvraćaldap_providersilogin_with_password. - LDAPS sertifikati se podrazumevano proveravaju. Postavite
ldap_tls_skip_verify(ravan blok) ilitls_skip_verify(po provajderu) za samopotpisani sertifikat. - Apsolutno trajanje sesije.
auth.max_session_life_hours(SEMAPHORE_AUTH_MAX_SESSION_LIFE_HOURS) poništava sesiju fiksno vreme nakon prijave, bez obzira na aktivnost;0zadržava samo vremensko ograničenje neaktivnosti. - Korisnik bez projekata koji ne sme da ga kreira vidi stranicu Još nema projekata umesto forme koju
ne može da pošalje;
POST /api/projectsu tom slučaju vraća403. - Jezik izabran u korisničkom meniju čuva se na serveru i prati korisnika kroz različite pretraživače
(
langu/api/user/options).
Konfiguracija hostova

Nova stranica projekta, Konfiguracija hostova, mapira SSH hostove i Git URL adrese na akreditive projekta:
- mapiranje tipa Host (
bastion.example.com) prilaže SSH ključ, u oblikuHostbloka generisanogssh_configfajla; - mapiranje tipa URL (
https://github.com/acme/, prefiks koji se završava sa/pokriva celu grupu) prilaže SSH ključ ili korisničko ime/lozinku (samo HTTPS), u obliku GitinsteadOfprepisivanja; najspecifičnija URL adresa ima prednost.
Mapiranja se primenjuju na repozitorijum šablona i njegove podmodule, uloge i kolekcije iz
requirements.yml, module za terraform init, git komande koje pokreće playbook, repozitorijume
inventara i hostove iz inventara, kao i na pregledanje grana i playbook-ova; isporučuju se udaljenim
runner-ima. Privatni ključevi nikada ne dolaze na disk — po jedan SSH agent za svako mapiranje, vezan
pomoću IdentityAgent; lozinke se prenose kroz GIT_CONFIG_PARAMETERS, a URL adrese repozitorijuma se
prikrivaju u logovima zadataka. Ključ na koji se mapiranje poziva ne može se obrisati. Mapiranja su deo
rezervnih kopija projekta. Zahteva git_client: cmd_git. Tabela project__host_config, migracija
v2.20.7; API /api/project/{id}/host_configs.
Šabloni i zadaci

-
Ansible radni direktorijum. Opcija Drugi radni direktorijum pokreće
ansible-playbookiz poddirektorijuma repozitorijuma; putanja mora ostati unutar radne kopije (working_directory, migracijav2.20.3). -
Jedinstveni nazivi šablona po projektu (migracija
v2.20.4), aPOST /api/project/{id}/tasksprihvatatemplate_nameumestotemplate_id. -
Potiskivanje obaveštenja o greškama po šablonu, uz postojeće potiskivanje obaveštenja o uspehu; obaveštenja e-poštom prvi put poštuju oba (
suppress_error_alerts, migracijav2.20.5). -
Skrivanje Dry Run / Diff opcija iz dijaloga zadatka po šablonu; server za taj šablon takođe prestaje da dodaje
--check/--diff(task_params.hide_dry_run,hide_diff). -
Opcije Galaxy instalacije — sekcija koja se skuplja, sa opcijom Preskoči Galaxy instalaciju, odvojenim CLI argumentima za
ansible-galaxy role installicollection install(lista dozvoljenih zastavica;--token,--api-keyi zastavice sa putanjama se odbijaju) i upitom za predefinisanje po zadatku. -
Birač playbook-ova prikazuje poddirektorijume dok kucate, filtrirano po aplikaciji (
.ymlza Ansible, direktorijumi najvišeg nivoa za Terraform / OpenTofu / Terragrunt / Pulumi,.sh,.py,.ps1), preskače Ansible strukturne direktorijume i direktorijume sa tačkom, ograničen je na 30 unosa i pregleda plitki klon ograničen na korenski direktorijum repozitorijuma. -
Promenljive upitnika sa višestrukim izborom — novi tip
selectprihvata više vrednosti, prikazanih kao oznake u dijalogu zadatka;default_valuemože biti niz.
-
Tajne iz upitnika dolaze do udaljenih runner-a. Odgovor tipa
secretranije je na runner dolazio prazan. Sada se čuva šifrovan kao pristupni ključ vezan za zadatak (access_key.task_id,expire_at, migracijav2.20.1), dešifruje ga onaj HA čvor koji opslužuje runner-a, briše se po završetku zadatka i čisti na svakih sat vremena; skriven je iz skladišta ključeva, rezervnih kopija i API-ja za ključeve. -
Dodatne promenljive u YAML formatu. Uređivač grupa promenljivih dobio je prekidač Tabela | JSON | YAML i uređivač preko celog ekrana; konverzije su stroge (datumi ostaju stringovi, korenske vrednosti koje nisu objekti i nekonačni brojevi se odbijaju). Način čuvanja je nepromenjen.

-
Stranica zadatka imenuje i povezuje raspored ili integraciju koja je pokrenula zadatak, a obrisano poreklo označava kao
#id (deleted). Vremenske oznake u logu se više ne označavaju pri kopiranju loga. -
Rasporedi validiraju izraz na serveru pre čuvanja, pa je
@hourlyprihvaćen, a baner sa vremenskom zonom se može zatvoriti.
-
Zaustavljanje lokalnog zadatka prekida celu njegovu grupu procesa:
SIGTERM, 15 s perioda mirovanja, zatimSIGKILL; napuštenisshili procesi provajdera više ne nadživljavaju zadatak. Zaustavljen Terraform plan se više ne nastavlja; plan koji naSIGTERMizađe sa0ne tumači se kao uspeh. -
repository_idinventara se zadržava samo za tipfilei mora pripadati projektu. -
Logovi servera imenuju korisnika u unosima Zadatak dodat u red / Zadatak pokrenut.
Tajne i Ansible Vault
-
Dodatne promenljive se prenose u fajlovima, a ne u komandnoj liniji. Grupe promenljivih, odgovori iz upitnika, ulazi toka posla i detalji zadatka upisuju se u YAML fajl sa pravima
0600koji se prosleđuje kao--extra-vars @file. Tajne — odgovori upitnika tipasecreti tajne iz grupa promenljivih — idu u drugi fajl šifrovan u formatu Ansible Vault 1.1 / AES‑256 pomoću izvorne Go implementacije (nije potrebanansible-vaultprogram), a otključava se jednokratnom lozinkom unetom na--vault-id <uuid>@promptkomandeansible-playbook. Ni vrednosti ni lozinka se ne pojavljuju ups, a oba fajla se brišu po završetku zadatka. -
Jinja2 u vrednostima je podatak, a ne kod. Svaki string koji sadrži
{{,{%,{#ili#jinja2:zaglavlje označava se sa!unsafe, rekurzivno, tako da se odgovor iz upitnika kao{{ lookup('pipe', 'id') }}prosleđuje doslovno. Stringovi bez razdvajača namerno ostaju neoznačeni: ansible‑core ≥ 2.19 ponovo razrešava!unsafeskalare, što bi"2026.08"pretvorilo u broj sa pokretnom zapetom. -
Novi debag prostor imena
extra_vars(SEMAPHORE_DEBUG_FILTER=extra_vars) beleži kako se promenljive razdvajaju i upisuju — samo nazive, fajlove i veličine, nikada vrednosti. -
Generisanje SSH para ključeva na serveru. Opcija Generiši SSH ključ u skladištu ključeva kreira RSA ključ; javni ključ se čuva zajedno sa ključem, prikazuje se pomoću Prikaži / Sakrij i dugmeta za kopiranje, i nudi se u dijalogu odmah nakon kreiranja (
generate_ssh_key).
-
Ažuriranje ključa upisuje
type,secreti javni deo samo kada je postavljena opcija Predefiniši, tako da klijent ne može izmeniti sadržaj ključa bez zamene tajne. -
Čitanje akreditiva iz promenljive okruženja servera ili fajla unutar
dirs.secretsje sada dokumentovano (kartice Env / File u formi skladišta ključeva).
Repozitorijumi i Git
- Monorepo: jedna radna kopija za sve šablone. Opcija repozitorijuma klonira repozitorijum jednom i
deli ga između šablona umesto kopije po šablonu; radna kopija se zaključava za fetch i pull, a
zadaci se zatim izvršavaju paralelno. Šabloni takvog repozitorijuma ne mogu imati sopstvenu granu, a
njihovi zadaci ne mogu predefinisati granu ni komit (
monorepo, migracijav2.20.11). - Ponovni pokušaji Git operacija.
cloneipullse ponavljaju sa eksponencijalnim zastojem ograničenim na jedan minut;git_attempts(SEMAPHORE_GIT_ATTEMPTS, podrazumevano4). - Paralelni podmoduli.
git_submodule_jobs(SEMAPHORE_GIT_SUBMODULE_JOBS, podrazumevano4) se prosleđuje kao--jobs. - Provera SSH ključeva hostova. Nova
sshsekcija:config_path,known_hosts_file(SEMAPHORE_SSH_KNOWN_HOSTS_FILE) istrict_host_key_checking—no(podrazumevano),yesiliaccept-new— primenjeno na Git preko SSH-a. - Pregledanje repozitorijuma koristi plitki klon po grani; akreditivi se procentualno kodiraju za kloniranje direktno na mašini i prikrivaju u logovima i listi događaja.
Runner-i i integracije
-
runner.check_interval_seconds(SEMAPHORE_RUNNER_CHECK_INTERVAL_SECONDS, podrazumevano5) određuje koliko često runner proverava server; prekidač Napredne opcije na stranici Runner-i ga uvrštava u generisane isečke za promenljive okruženja, konfiguraciju i Docker (isporučeno uv2.19.17). -
runner.connection.timeout_seconds(SEMAPHORE_RUNNER_CONNECTION_TIMEOUT_SECONDS, podrazumevano3) odvojeno ograničava povezivanje, TLS rukovanje i zaglavlja odgovora; otpremanje logova se ne prekida. -
runners.default_global_runners_mode(SEMAPHORE_DEFAULT_GLOBAL_RUNNERS_MODE:disable,prefer,require) zamenjuje zastarelouse_remote_runner;runners.registration_tokenzamenjujerunner_registration_tokenna najvišem nivou. -
Dijagnostika runner-a na strani servera pod
SEMAPHORE_DEBUG_FILTER=runner: razlozi odbijanja tokena, detekcija ponovnog pokretanja i prisutnosti, odbijeni izveštaji o napretku, praćenje dodeljivanja zadataka. -
unregisterzahtevi runner-a se autentifikuju; klijent runner-a odbija HTTP preusmerenja. -
HMAC‑SHA512 autentifikacija webhook-ova (
hmac-sha512) uz postojeći HMAC‑SHA256; zaglavlje potpisa je konfigurabilno.
-
Webhook čija integracija pripada drugom projektu se odbija.
Nadgledanje
-
Prometheus metrike.
GET /api/metricsiza HTTP Basic autentifikacije sa statičkim servisnim akreditivom:"metrics": { "enabled": true, "username": "prometheus", "password": "…" }(
SEMAPHORE_METRICS_ENABLED,SEMAPHORE_METRICS_USERNAME,SEMAPHORE_METRICS_PASSWORD.) Serije:semaphore_tasks_running,semaphore_tasks_total{status}, standardnigo_*iprocess_*kolektori, i merači izvoza revizionog dnevnika u Pro izdanju. -
Novi debag prostori imena
extra_varsirunner; pregledanje repozitorijuma beleži Git izlaz na nivou DEBUG. -
Izvoz i obnova rezervnih kopija projekta se beleže.
Bezbednost
- Povezivanje identiteta po ID-ju provajdera umesto po e-pošti; provera LDAPS sertifikata je podrazumevano uključena.
- Dodatne promenljive izvan komandne linije; tajne šifrovane Vault-om; Jinja2 u vrednostima se ne izvršava.
- Falsifikovani
workflow_run_id,workflow_node_idiartifactsse uklanjaju iz zadataka koje pošalje klijent. - Administratorske rute čuvaju eksplicitne globalne dozvole umesto administratorske oznake; nepoznati bitovi dozvola se odbijaju; zaštita od eskalacije privilegija pri upravljanju korisnicima.
- Birač playbook-ova je ograničen na korenski direktorijum repozitorijuma (
OpenRoot), sa ograničenim brojem unosa i filtriranjem. - Korenske vrednosti dodatnih promenljivih i YAML brojevi se validiraju; Galaxy CLI argumenti su na listi dozvoljenih.
- Akreditivi repozitorijuma se prikrivaju u logovima i listi događaja; znak
=se escape-uje u Git konfiguracionim parametrima. - Krajnje tačke revizionog dnevnika odbijaju čitanja sa drugih sajtova i neispravne kursore; mreže pouzdanih proksija se validiraju.
unregisterrunner-a se autentifikuje; klijent runner-a odbija preusmerenja.- ID-jevi projekta i integracije za webhook se proveravaju.
- Lokalni zadaci se zaustavljaju zajedno sa celom grupom procesa.
Napomene o nadogradnji
Prekidne promene i promene ponašanja
- Nazivi šablona moraju biti jedinstveni po projektu. Migracija
v2.20.4dodaje jedinstveni indeks; preimenujte duplikate pre nadogradnje. - Tabele uloga se ponovo grade (
v2.20.12/v2.20.13). Prvo napravite rezervnu kopiju. Prilagođena uloga čiji se slug, bez obzira na velika i mala slova, sudara sa ugrađenom ili drugom ulogom biva preimenovana (uz zapis u logu); dozvole nad šablonima koje pokazuju na nerazrešivu ulogu se odbacuju (uz zapis u logu). Članstvo je premešteno uproject__user_role; kolonaproject__user.roleje uklonjena. GET /api/project/{id}/usersvraćarolesamo za članove sa jednom ulogom — čitajteroles./roles*je premešten sa administratorske oznake na dozvolu Upravljanje globalnim ulogama; administratori nisu pogođeni.- LDAPS sertifikati se podrazumevano proveravaju. Postavite
ldap_tls_skip_verifyilitls_skip_verifyprovajdera za samopotpisane sertifikate. ansible-playbookse poziva drugačije:--extra-vars @file, uz drugi fajl i--vault-id <uuid>@promptkada zadatak ima tajne, čak i za šablone bez vault-a. Pogođeno je sve što parsira komandnu liniju, kao iansible.cfgkoji zabranjuje vault upite.- Jinja2 unutar vrednosti dodatnih promenljivih se više ne izvršava. Playbook koji se oslanjao na šablonizovanje vrednosti iz webhook-a ili upitnika to više neće raditi.
- Krajnja tačka za pokretanje toka posla je preimenovana:
POST …/workflows/{id}/run→…/runs. - Monorepo repozitorijumi imaju prednost nad šablonom: nema grane po šablonu, nema predefinisanja grane ni komita u zadacima.
repository_idinventara se odbacuje za sve tipove osimfile.- Zaustavljanje lokalnog zadatka prekida njegovu grupu procesa (na Windows-u još nema ekvivalenta).
- Docker i Kubernetes izvršioci još ne preuzimaju izlaze toka posla; tajne iz upitnika još ne dolaze do tih izvršilaca.
Nova konfiguracija
audit, metrics, auth.max_session_life_hours, ssh.{config_path,known_hosts_file,strict_host_key_checking},
git_attempts, git_submodule_jobs, ldap_providers, ldap_tls_skip_verify,
external_auth_email_matching, groups_claim i require_verified_email po OIDC provajderu,
runner.check_interval_seconds, runner.connection.timeout_seconds,
runners.{default_global_runners_mode,registration_token}. Sve stavke su opcione. Konfiguraciona polja
tipa pokazivača sada se mogu postaviti iz promenljivih okruženja. Referentne stranice za konfiguraciju
i CLI generišu se iz izvornog koda.
Migracije baze podataka
v2.20.0 spoljni identiteti · v2.20.1 tajne iz upitnika vezane za zadatak · v2.20.2 čvorovi
čekanja · v2.20.3 radni direktorijum · v2.20.4 jedinstveni nazivi šablona · v2.20.5 potiskivanje
obaveštenja o greškama · v2.20.7 konfiguracija hostova · v2.20.8 revizije tokova posla ·
v2.20.9–v2.20.11 revizioni dnevnik i indeksi, mapiranja ulaza na vezama, monorepo oznaka ·
v2.20.12–v2.20.13 tabele uloga, promenljive tokova posla · v2.20.14 integracije tokova posla i
mapiranja grupa · v2.20.16 globalne uloge.
Zavisnosti
Go 1.26; Docker slike na Alpine 3.24; dodat prometheus/client_golang 1.23; go-oidc 3.21,
go-ldap 3.4.14, golang.org/x/crypto 0.57, modernc.org/sqlite 1.59, logrus 1.10; na frontendu
js-yaml 5 i cron-parser 5.10. Nova postavljanja jednim klikom: Cloudzy, RepoCloud i Pethost.
