
Semaphore UI 2.20, SIEM dışa aktarımlı bir denetim günlüğü ekler, İş Akışları’nı gecikme düğümleri, sürümler, görevler arasında iletilen çıktılar ve iş akışı değişkenleriyle gerçek bir işlem hattı motoruna dönüştürür, rolleri yeniden ele alarak bir üyenin birden fazla rol taşımasını sağlar ve yöneticilere örnek genelinde roller ile IdP grup eşlemeleri verir, host başına SSH ve Git kimlik bilgileri için host yapılandırması sunar, her Ansible ek değişkenini Vault ile şifrelenmiş dosyalara taşır ve Prometheus metriklerini açar.
Seri v2.20.0 ile başlar. Yama sürümleri yayınlandıkça bu sayfanın sonunda listelenecektir.
Öne Çıkanlar
- Denetim günlüğü — kim, nereden, neyi, hangi sonuçla yaptı; bir yönetici ekranı, saklama süresi ve SIEM’ler için Syslog / Splunk HEC dışa aktarımı (dışa aktarım ve filtreler Pro’da).
- İş Akışları — gecikme düğümleri, çalıştırmalara sabitlenen değiştirilemez sürümler, sonraki görevin girdisi olarak teslim edilen çıktılar, bir Çalıştır iletişim kutusunda sorulan iş akışı değişkenleri, kısayol tuşları ve geri alma içeren yeniden tasarlanmış düzenleyici ve iş akışı başlatan web kancaları.
- Üye başına birden fazla rol, kimlik ve kısa ada (slug) sahip roller, örnek genelinde izinlere sahip global roller (Pro) ve oturum açarken uygulanan IdP grubu → rol eşlemeleri (Enterprise).
- Harici kimlikler — LDAP ve OIDC oturum açmaları hesaplara e-posta ile değil, sağlayıcının kalıcı kimliğiyle bağlanır; tek bir oturum açma sayfasında birden fazla LDAP dizini.
- Host yapılandırması — SSH host’larını ve Git URL’lerini proje kimlik bilgilerine eşleyin; klonlamalarda, Galaxy’de, Terraform modüllerinde ve Ansible’da uygulanır.
- Ansible ek değişkenleri artık asla komut satırında değil; gizli anahtarlar Ansible Vault ile şifrelenmiş bir dosyada taşınır ve değerlerin içindeki Jinja2 artık değerlendirilmez.
- Şablonlar: Ansible çalışma dizini, benzersiz adlar ve görev API’sinde
template_name, bastırılan hata bildirimleri, gizlenen Dry Run / Diff, Galaxy kurulum seçenekleri, çoklu seçimli anket değişkenleri, uzak runner’larda anket gizli anahtarları. - Monorepo depoları şablonlar arasında tek bir çalışma kopyasını paylaşır; Git yeniden denemeleri, paralel alt modül çekme, SSH host anahtarı denetimi.
/api/metricsadresinde Prometheus metrikleri.- Sunucuda SSH anahtar çifti oluşturun ve genel anahtarı Key Store’dan kopyalayın.
Denetim günlüğü

Semaphore artık güvenlik açısından önemli olayları özel, yalnızca ekleme yapılan bir günlüğe kaydediyor. Şununla etkinleştirin:
"audit": {
"enabled": true,
"instance_id": "semaphore-prod"
}
(SEMAPHORE_AUDIT_ENABLED, SEMAPHORE_AUDIT_INSTANCE_ID; instance_id zorunludur ve her olayda
kurulumu adlandırır.)
Nelerin kaydedildiği. Sekiz kategoride 116 olay türü: auth (oturum açma, oturum kapatma, MFA,
API belirteci reddetmeleri, reddedilen istekler, CSRF engellemeleri), iam (kullanıcılar, parolalar,
API belirteçleri, kimlikler, üyelikler, roller, şablon izinleri), resource (projeler, yedekler,
envanterler, depolar, şablonlar, zamanlamalar, entegrasyonlar, host yapılandırmaları, iş akışları,
değişken grupları), secret (kimlik bilgileri ve gizli anahtar depoları), task (tetikleyicisiyle
başlatma, sonuç ve süreyle tamamlanma, onaylar, durdurmalar, geçmiş silme), runner (kayıt,
değişiklikler, reddedilen raporlar), system (ayarlar, lisans) ve audit kategorisinin kendisi
(başlatma, saklama, dışa aktarım). Parolalar, belirteçler, gizli anahtar değerleri, görev çıktısı ve
değişkenler asla yazılmaz.
Olay zarfı. Her olay bir UUID, boşluksuz bir sıra numarası, mikrosaniye hassasiyetinde UTC zaman
damgası, eyleyen (kullanıcı / anonim / sistem / runner / entegrasyon; oturum veya API belirteci
kimlik doğrulaması ve bir belirteç parmak izi ile), kaynak IP ve User-Agent, hedef, proje, bir istek
kimliği (ayrıca X-Request-ID yanıt başlığında döndürülür), örnek kimliği ve HA düğüm kimliği
taşır. Sonuçlar, kapalı bir neden listesiyle success veya failure olur; nesneyi kaydeden ancak
sonraki bir adımda başarısız olan bir eylem, partial = true ile başarı sayılır. Bir ters vekil
sunucu arkasında X-Forwarded-For yalnızca audit.trusted_proxy_cidrs kaynaklıysa güvenilir
kabul edilir.

Yönetici ekranı. Kullanıcı menüsündeki Audit log (/audit-log) olayları en yeniden başlayarak
sayfa başına 50 kayıt halinde listeler; Older / Newer ile sayfalama yapılır. Bir satır Who,
Object, Where, When, Details ve Technical bölümlerini ve olayı SIEM’e gönderilen JSON
olarak kopyalayan bir düğmeyi içeren bir kart açar. Erişim için yeni Read the audit log global
izni gerekir.
Saklama. audit.retention_days eski olayları toplu halde, HA düğümlerinin çakışmaması için
saatlik ve dağılımlı (jitter) olarak siler; silme yapan her geçiş de kendisi kaydedilir.
Pro: filtreler ve dışa aktarım. Döneme, kullanıcıya, projeye, olay türüne, sonuca ve IP’ye göre filtreleyin; herhangi bir kart değerinden hareketle daraltın; geçerli seçimi CSV veya JSON Lines olarak dışa aktarın.
Pro: SIEM dışa aktarımı. Bir alıcı devre dışı kaldığında hiçbir şey atlanmasın diye her biri
kendi imlecine sahip iki hedef: audit.syslog ile TLS üzerinden Syslog (RFC 5424, gövde olarak
olay JSON’u) ve audit.splunk_hec ile Splunk HTTP Event Collector (url, token, index,
source, sourcetype, ca_file, …). Teslimat en az bir kez yapılır ve sıra numarasına göre
sıralıdır; HA’da hedef başına yalnızca bir düğüm dışa aktarır ve bu, bir Redis kirası üzerinden
eşgüdümlenir. Dışa aktarıcıyı üç Prometheus serisi tanımlar:
semaphore_audit_export_pending_events, semaphore_audit_export_oldest_pending_seconds ve
semaphore_audit_export_errors_total.
Depolama: audit_event, audit_event_sequence, audit_export_state tabloları (v2.20.9 – v2.20.11
geçişleri). API: GET /api/audit/events ve GET /api/audit/events/export.
İş Akışları
İş Akışları bir Pro özelliğidir; Beta etiketi kaldırıldı.
Gecikme düğümleri
Görev, onay ve nota ek olarak dördüncü bir düğüm türü: Delay çalıştırmayı belirli bir saniye
boyunca duraklatır ve ardından kenarlarını serbest bırakır. Çalıştırma görünümü kart üzerinde canlı
bir geri sayım gösterir; durdurulan bir çalıştırma gecikmeyi iptal eder. delay_seconds alanı,
v2.20.2 geçişi.
Sürümler
Bir iş akışının her kaydedilişi grafiğin yeni bir sürümünü oluşturur; bir çalıştırma başladığı
sürümü sabitler, böylece bir iş akışını düzenlemek devam eden bir çalıştırmayı asla değiştirmez ve
geçmiş çalıştırmaların düğümlerini asla sahipsiz bırakmaz. Düzenleyici bir rev. N çipi ve kaç
çalıştırmanın hâlâ daha eski bir sürümü yürüttüğünü gösterir; çalıştırma görünümü hangi sürümü
yürüttüğünü gösterir. Hiçbir çalıştırmanın başvurmadığı sürümler, daha yenisi kaydedildiğinde
silinir. API: GET …/workflows/{id}/revisions ve …/revisions/{revision_id}.
Çıktılar ve girdiler

Bir görev kendisinden sonraki düğümlere yapılandırılmış veri verebilir. Bir iş akışının başlattığı
her görev SEMAPHORE_OUTPUTS_FILE alır; oraya bir JSON nesnesi olarak yazdığı her şey o görevin
çıktıları olur:
cat > "$SEMAPHORE_OUTPUTS_FILE" <<EOF
{"image_tag": "1.4.2", "replicas": 3, "subnet_ids": ["subnet-1", "subnet-2"]}
EOF
Ansible, paketle gelen bir callback eklentisi aracılığıyla ansible.builtin.set_stats ile çıktı
üretir; Terraform, OpenTofu ve Terragrunt çıktıları output -json üzerinden otomatik olarak
yakalanır (sensitive değerler atlanır ve Not captured olarak listelenir). Çıktılar yalnızca
görev başarılı olduğunda okunur; sınırlar 100 çıktı, her biri 32 KB ve dosya başına 256 KB’dir.
Bir görev düğümüne gelen bağlantı girdi teslim eder — hedef şablonun anket değişkenlerini kaynak düğümün çıktılarından doldurur:
- Ada göre (varsayılan): adı bir anket değişkeniyle eşleşen her çıktı o değişkeni doldurur.
- Girdileri açıkça eşleyin: teslim edilecek
variable ← output keyçiftlerini listeleyin; iş akışının tamamlanmış bir çalıştırması olduğunda panel o çalıştırmanın ürettiği anahtarları önerir.

Değerler değişken türüne dönüştürülür, onay ve gecikme düğümleri çıktıları aktarır, açık bir eşleme
ada göre teslimata üstün gelir ve değersiz bırakılan bir zorunlu değişken, düğümün görevini
başlamadan önce başarısız kılar; böylece çalıştırma On failure kenarlarını izler. Çalıştırma
görünümü düğüm başına bir N outputs etiketi gösterir, görev iletişim kutusunda bir Outputs
tablosu bulunur ve görev günlüğü, teslim edilen her değer için bir
Input "x" <- output "y" of node N satırıyla başlar. Çıktılar düz metin olarak saklanır ve asla bir
secret değişkenini doldurmaz; bir secret çıktılar üzerinden iletilemez. Uzak runner’lardaki
görevler çıktı üretir ve alır; Docker ve Kubernetes yürütücüleri bunları henüz yakalamıyor.

İş akışı değişkenleri ve Çalıştır iletişim kutusu
Bir iş akışının kendi anket değişkenleri vardır; bunlar çalıştırma başlarken bir Run “…”
iletişim kutusunda bir kez sorulur (değişkeni olmayan bir iş akışı, önceden olduğu gibi hemen
başlar). Yanıtlar çalıştırmada saklanır, çalıştırma tuvalinin üzerindeki bir Variables
şeridinde çip olarak gösterilir ve bir göreve yalnızca düğüm panelindeki açık bir bağlama
aracılığıyla ulaşır — bir iş akışı değişkeni asla ada göre bir şablona sızmaz. İş akışı değişkeni
olarak gizli anahtarlara izin verilmez. POST …/workflows/{id}/runs,
{"environment": {"image_tag": "1.4.3"}} gövdesini kabul eder; türüne uymayan bir yanıt veya eksik
bir zorunlu değer başlatmayı reddeder.
Bir iş akışı görevinin ortamı
Bir iş akışının başlattığı her görev, her uygulama için ve uzak runner’larda
SEMAPHORE_WORKFLOW_ID, SEMAPHORE_WORKFLOW_RUN_ID, SEMAPHORE_WORKFLOW_URL (web_host
gerektirir) ve SEMAPHORE_OUTPUTS_FILE değişkenlerini alır.
Yeniden tasarlanmış düzenleyici

- Tür döşemesi, durum, süre, çıktı etiketi ve satır içi Approve / Reject içeren yeni düğüm kartları; yerinde koşul açılır listesi ve silme düğmesi olan kenar etiketleri; noktalı ızgara tuval.
- Bir düğümün
+tutamacından, tuvalde sağ tıklamayla veya boş durum düğmesinden açılan hızlı ekleme menüsü: düğüm türlerinin ve görev şablonlarının aranabilir listesi; yeni düğüm başarı durumunda bağlanır. - Geri al / yinele (
Ctrl/⌘+Z,Ctrl/⌘+Shift+Z), iş akışının satır içi yeniden adlandırılması, hatalı düğüme odaklanan bir Problems menüsü, kaydedilmemiş değişiklikler için bir Save etiketi ve sayfadan ayrılma koruması. - Tuval üzerinde kısayol tuşları: oklar kaydırır (büyük adım için
Shift),+/-yakınlaştırır,0grafiği sığdırır,1yakınlaştırmayı sıfırlar,Escseçimi temizler; düğüm kartları klavyeyle odaklanabilir. - Yüzen kontroller: yakınlaştır / uzaklaştır, görünüme sığdır, Tidy up otomatik düzen, yakınlaştırma yüzdesi.
- Tek bir şerit işareti paleti ve ana gezinmeyi birlikte daraltır; durum hatırlanır.
- Trackpad’de aşırı kaydırma artık macOS’ta tarayıcının Geri hareketini tetiklemiyor.

Web kancaları iş akışı başlatır
Bir entegrasyon artık bir şablon yerine bir iş akışı çalıştırabilir (entegrasyon formunda
Runs: Template / Workflow). Çıkarılan her değer, iş akışının anketine bir yanıt olur. Bu tür
entegrasyonları yönetmek Pro workflow_integrations_management özelliğini gerektirir. Şablon
entegrasyonlarında, git_branch adlı çıkarılmış bir Task Params değeri, şablon geçersiz kılmaya
izin verdiğinde başlatılan görevin dalını belirler.
API değişiklikleri
POST …/workflows/{id}/run, POST …/workflows/{id}/runs olarak yeniden adlandırıldı ve
environment gövdesini kabul ediyor. Çalıştırma ayrıntıları revision_id, revision, düğüm başına
bir delay nesnesi ve task.artifacts taşır. Bir görevde istemci tarafından sağlanan
workflow_run_id, workflow_node_id ve artifacts yok sayılır; böylece bir görev başkasının
çalıştırmasına ait bir düğüm gibi davranamaz.
Roller ve erişim denetimi
Üye başına birden fazla rol

Bir proje üyesi, Takım sayfasında çip olarak düzenlenen bir rol kümesi taşır. API, eski role
alanının yanında roles: ["manager", "release_approver"] kabul eder; yanıt, skaler role alanını
yalnızca tek rollü üyeler için korur. Yönetici olmayan bir kullanıcı, yerleşik Owner rolünü son
sahibinden alamaz.
Kimlik, kısa ad ve kapsama sahip roller
Roller artık tam sayı bir id ve bir slug (^[A-Za-z0-9_-]{1,100}$, formdaki addan türetilir)
içeren satırlardır; dört yerleşik rol de birer satırdır ve artık özel bir rolle gölgelenemez.
Rollerin bir kapsamı vardır: yerleşik, paylaşımlı (her projede kullanılabilir) veya proje.
Kullanımda olan bir rolü silmek, etkisini (üyeler, projeler, şablon izinleri, eşlemeler) içeren bir
409 yanıtı verir ve ?force=true ile yinelenebilir — arayüzde Delete with assignments.
v2.20.12 ve v2.20.13 geçişleri rol tablolarını yeniden oluşturur; yükseltme notlarına bakın.
Global roller ve izinler (Pro)

Örnek genelindeki haklar artık yalnızca yönetici bayrağından ibaret değil. Bir global rol dört
iznin bir maskesini verir — Manage users, Manage global roles, Manage system settings,
Read the audit log — ve kullanıcılara Kullanıcılar sayfasının Roles sekmesinde (/users/roles)
ve kullanıcı iletişim kutusunun Global roles sekmesinde atanır; bu sekme aynı zamanda etkin
izinleri ve her birini hangi rolün verdiğini gösterir. Her yönetici rotası bu dört bitten biriyle
korunur; GET /api/user, global_permissions döndürür. Bir örnek her zaman en az bir yönetici
tutar; bu, HA düğümleri arasında güvenli olan bir satır kilidiyle zorunlu kılınır. Manage users
iznine sahip bir kullanıcı, bir yöneticiyi veya kendisinde olmayan bir izni taşıyan birini
düzenleyemez. API: /api/global-roles, /api/users/{id}/global-roles,
/api/users/{id}/global-permissions, katalog /api/global-roles/permissions adresinde.
Grup rol eşlemeleri (Enterprise)

Yeni Group mappings sayfasında (/role-mappings) bir kimlik sağlayıcı grubunu bir proje rolüne
eşleyin: sağlayıcı, grup, proje, rol. Her OIDC oturum açmasında kullanıcının eşlenmiş rolleri,
belirteçteki gruplarla (sağlayıcının groups_claim alanı) eşleşecek şekilde güncellenir. Eşlenmiş
roller Takım sayfasında provider: group ipucuna sahip kilitli çipler olarak görünür ve üye rolü
olarak kaldırılamaz; eşlenmiş roller projenin son sahibi olarak sayılmaz. Parola veya LDAP ile
oturum açma, grup bilgisi getirmediği için eşlenmiş rolleri temizler. API: /api/role_mappings.
Kimlik doğrulama ve kimlikler

- Harici kimlikler. LDAP ve OIDC oturum açmaları, Semaphore hesaplarına e-posta ile değil,
sağlayıcının kalıcı kimliğiyle (OIDC
sub, LDAP DN) yeniuser__external_identitytablosunda bağlanır. Bu, yazılan herhangi bir adresi kabul eden bir IdP’nin başkasının hesabını devralmasına yol açan hata sınıfını kapatır.external_auth_email_matching(varsayılanauto, ayrıcaalways,never), kimliği olmayan mevcut bir harici kullanıcının bir kez daha e-posta ile eşleştirilip eşleştirilemeyeceğini denetler; yerel parola hesapları asla devralınmaz. OIDC e-postası yalnızcaemail_verifiedolduğunda ve sağlayıcırequire_verified_emailayarını yaptığında geçerli sayılır. Kullanıcılar kimlikleri hesap iletişim kutusundan kendileri bağlar ve bağlantıyı kaldırır (/api/users/{id}/identities,POST /api/user/identities/ldap,/api/auth/oidc/{provider}/login?link=1). - Birden fazla LDAP dizini.
ldap_providers, her biri kendi sunucusu, bağlaması (bind), araması, eşlemeleri, rengi ve sırası olan adlandırılmış dizinlerin bir haritasıdır; eski düzldap_*bloğuldapsağlayıcısı olarak çalışmaya devam eder. Oturum açma sayfası birden fazla sekme olduğunda bir seçici gösterir ve dahili sekme bir dizine asla parola göndermez.GET /api/auth/login,ldap_providersvelogin_with_passworddöndürür. - LDAPS sertifikaları varsayılan olarak doğrulanır. Kendinden imzalı bir sertifika için
ldap_tls_skip_verify(düz blok) veyatls_skip_verify(sağlayıcı başına) ayarını kullanın. - Mutlak oturum ömrü.
auth.max_session_life_hours(SEMAPHORE_AUTH_MAX_SESSION_LIFE_HOURS), etkinliğinden bağımsız olarak bir oturumu oturum açmadan belirli bir süre sonra sona erdirir;0yalnızca hareketsizlik zaman aşımını korur. - Projesi olmayan ve proje oluşturamayan bir kullanıcı, gönderemeyeceği bir form yerine
No projects yet sayfasını görür; bu durumda
POST /api/projects,403döndürür. - Kullanıcı menüsünde seçilen dil sunucuda saklanır ve kullanıcıyı tarayıcılar arasında takip eder
(
/api/user/optionsiçindekilang).
Host yapılandırması

Yeni bir proje sayfası olan Host config, SSH host’larını ve Git URL’lerini proje kimlik bilgilerine eşler:
- bir Host eşlemesi (
bastion.example.com), oluşturulan birssh_configdosyasınınHostbloğu olarak bir SSH anahtarı ekler; - bir URL eşlemesi (
https://github.com/acme/;/ile biten bir ön ek bir grubu kapsar), GitinsteadOfyeniden yazması olarak bir SSH anahtarı veya bir kullanıcı adı/parola (yalnızca HTTPS) ekler; en özgül URL kazanır.
Eşlemeler şablon deposuna ve alt modüllerine, requirements.yml rollerine ve koleksiyonlarına,
terraform init modüllerine, bir playbook’un çalıştırdığı git komutlarına, envanter depolarına ve
envanter host’larına, ayrıca dal ve playbook gezinmesine uygulanır; uzak runner’lara gönderilirler.
Özel anahtarlar asla diske yazılmaz — eşleme başına bir SSH aracısı, IdentityAgent ile bağlanır;
parolalar GIT_CONFIG_PARAMETERS üzerinden geçer ve depo URL’leri görev günlüklerinde maskelenir.
Bir eşlemenin başvurduğu bir anahtar silinemez. Eşlemeler proje yedeklerinin parçasıdır.
git_client: cmd_git gerektirir. project__host_config tablosu, v2.20.7 geçişi; API
/api/project/{id}/host_configs.
Şablonlar ve görevler

-
Ansible çalışma dizini. Different working directory,
ansible-playbook’u deponun bir alt dizininden çalıştırır; yol çalışma kopyasının içinde kalmalıdır (working_directory,v2.20.3geçişi). -
Proje başına benzersiz şablon adları (
v2.20.4geçişi) vePOST /api/project/{id}/tasksartıktemplate_idyerinetemplate_namekabul ediyor. -
Mevcut başarı bastırmasının yanında şablon başına hata bildirimlerini bastırma; e-posta uyarıları ilk kez her ikisine de uyuyor (
suppress_error_alerts,v2.20.5geçişi). -
Şablon başına görev iletişim kutusundan Dry Run / Diff’i gizleme; sunucu da o şablon için
--check/--diffeklemeyi bırakır (task_params.hide_dry_run,hide_diff). -
Galaxy kurulum seçenekleri — Skip Galaxy install,
ansible-galaxy role installvecollection installiçin ayrı CLI argümanları (bayraklar için bir izin listesi;--token,--api-keyve yol bayrakları reddedilir) ve görev başına geçersiz kılma sorusu içeren daraltılabilir bir bölüm. -
Playbook seçici siz yazarken alt dizinleri listeler; uygulamaya göre filtreler (Ansible için
.yml, Terraform / OpenTofu / Terragrunt / Pulumi için üst düzey dizinler,.sh,.py,.ps1), Ansible düzen dizinlerini ve nokta dizinlerini atlar, 30 girdiyle sınırlıdır ve depo kök dizinine kapatılmış sığ bir klon üzerinde gezinir. -
Çoklu seçimli anket değişkenleri — yeni
selecttürü birden fazla değer kabul eder ve görev iletişim kutusunda çip olarak gösterilir;default_valuebir dizi olabilir.
-
Anket gizli anahtarları uzak runner’lara ulaşıyor. Bir
secretanket yanıtı eskiden runner’a boş geliyordu. Artık göreve bağlı bir erişim anahtarı olarak şifreli saklanıyor (access_key.task_id,expire_at,v2.20.1geçişi), runner’a hizmet veren HA düğümü tarafından çözülüyor, görev bittiğinde siliniyor ve saatlik olarak süpürülüyor; Key Store’dan, yedeklerden ve anahtar API’sinden gizlidir. -
YAML ek değişkenleri. Değişken grubu düzenleyicisi bir Table | JSON | YAML geçişi ve tam ekran bir düzenleyici kazandı; dönüşümler katıdır (tarihler dize kalır, nesne olmayan kökler ve sonlu olmayan sayılar reddedilir). Depolama değişmedi.

-
Görev sayfası, bir görevi başlatan zamanlamayı veya entegrasyonu adlandırır ve bağlantılar; silinmiş bir kaynağı
#id (deleted)olarak işaretler. Bir günlük kopyalanırken günlük zaman damgaları artık seçilmiyor. -
Zamanlamalar kaydedilmeden önce ifadeyi sunucuda doğrular, böylece
@hourlykabul edilir ve saat dilimi bildirimi kapatılabilir.
-
Yerel bir görevi durdurmak tüm süreç grubunu sonlandırır:
SIGTERM, 15 saniyelik bir bekleme süresi, ardındanSIGKILL; sahipsiz kalansshveya sağlayıcı süreçleri artık görevden uzun yaşamıyor. Durdurulan bir Terraform planı artık devam etmiyor;SIGTERMüzerine0ile çıkan bir plan başarı olarak okunmuyor. -
Envanter
repository_idalanı yalnızcafiletürü için saklanır ve projeye ait olmalıdır. -
Sunucu günlükleri Task added to queue / Task started kayıtlarında kullanıcıyı adlandırır.
Gizli anahtarlar ve Ansible Vault
-
Ek değişkenler komut satırında değil, dosyalarda taşınır. Değişken grupları, anket yanıtları, iş akışı girdileri ve görev ayrıntıları,
--extra-vars @fileolarak iletilen bir0600YAML dosyasına yazılır. Gizli anahtarlar —secretanket yanıtları ve değişken grubu gizli anahtarları — yerel bir Go uygulaması tarafından Ansible Vault 1.1 / AES-256 biçiminde şifrelenmiş ikinci bir dosyaya girer (ansible-vaultikili dosyasına gerek yoktur); dosya,ansible-playbook’un--vault-id <uuid>@promptsorusuna verilen tek kullanımlık bir parolayla açılır. Ne değerler ne de parolapsçıktısında görünür ve görev bittiğinde her iki dosya da silinir. -
Değerlerdeki Jinja2 veridir, kod değildir.
{{,{%,{#veya bir#jinja2:başlığı içeren her dize özyinelemeli olarak!unsafeetiketlenir; böylece{{ lookup('pipe', 'id') }}gibi bir anket yanıtı olduğu gibi iletilir. Sınırlayıcı içermeyen dizeler bilinçli olarak etiketlenmez: ansible-core ≥ 2.19!unsafeskalerlerini yeniden çözümler ve bu da"2026.08"değerini bir kayan noktalı sayıya dönüştürür. -
Yeni bir
extra_varshata ayıklama ad alanı (SEMAPHORE_DEBUG_FILTER=extra_vars), değişkenlerin nasıl bölündüğünü ve yazıldığını günlüğe kaydeder — yalnızca adlar, dosyalar ve boyutlar, asla değerler. -
Sunucuda bir SSH anahtar çifti oluşturun. Key Store’daki Generate SSH Key bir RSA anahtarı oluşturur; genel anahtar anahtarla birlikte saklanır, Show / Hide ve bir kopyalama düğmesiyle gösterilir ve oluşturulduktan hemen sonra bir iletişim kutusunda sunulur (
generate_ssh_key).
-
Bir anahtar güncellemesi
type,secretve genel kısmı yalnızca Override ayarlandığında yazar; böylece bir istemci, gizli anahtarı değiştirmeden bir anahtarın yükünü değiştiremez. -
Bir kimlik bilgisinin bir sunucu ortam değişkeninden veya
dirs.secretsaltındaki bir dosyadan okunması artık belgelendi (Key Store formunun Env / File sekmeleri).
Depolar ve Git
- Monorepo: tüm şablonlar için tek çalışma kopyası. Bir depo seçeneği, depoyu şablon başına bir
kopya yerine bir kez klonlar ve şablonlar arasında paylaştırır; çalışma kopyası fetch ve pull için
kilitlenir, görevler ise paralel çalışır. Böyle bir deponun şablonları kendi dalına sahip olamaz ve
görevleri dalı veya commit’i geçersiz kılamaz (
monorepo,v2.20.11geçişi). - Git yeniden denemeleri.
clonevepull, bir dakikayla sınırlı üstel bir gecikmeyle yeniden denenir;git_attempts(SEMAPHORE_GIT_ATTEMPTS, varsayılan4). - Paralel alt modüller.
git_submodule_jobs(SEMAPHORE_GIT_SUBMODULE_JOBS, varsayılan4)--jobsolarak iletilir. - SSH host anahtarı denetimi. Yeni
sshbölümü:config_path,known_hosts_file(SEMAPHORE_SSH_KNOWN_HOSTS_FILE) vestrict_host_key_checking—no(varsayılan),yesveyaaccept-new— SSH üzerinden Git’e uygulanır. - Depo gezinmesi dal başına anahtarlanmış sığ bir klon kullanır; kimlik bilgileri çıplak donanım klonları için yüzde kodlamasıyla kodlanır, günlüklerde ve olay akışında maskelenir.
Runner’lar ve entegrasyonlar
-
runner.check_interval_seconds(SEMAPHORE_RUNNER_CHECK_INTERVAL_SECONDS, varsayılan5), bir runner’ın ne sıklıkta yoklama yaptığını belirler; Runner’lar sayfasındaki bir Advanced options düğmesi bunu oluşturulan env, yapılandırma ve Docker parçacıklarına koyar (v2.19.17ile yayınlandı). -
runner.connection.timeout_seconds(SEMAPHORE_RUNNER_CONNECTION_TIMEOUT_SECONDS, varsayılan3), bağlanmayı, TLS el sıkışmasını ve yanıt başlıklarını ayrı ayrı sınırlar; günlük yüklemeleri kesilmez. -
runners.default_global_runners_mode(SEMAPHORE_DEFAULT_GLOBAL_RUNNERS_MODE:disable,prefer,require), kullanımdan kaldırılanuse_remote_runneryerine geçer;runners.registration_token, üst düzeyrunner_registration_tokenyerine geçer. -
SEMAPHORE_DEBUG_FILTER=runneraltında sunucu taraflı runner tanılaması: belirteç reddetme nedenleri, yeniden başlatma ve çevrimiçi algılama, reddedilen ilerleme raporları, dağıtım izleme. -
Runner
unregisteristekleri kimlik doğrulamasından geçer; runner istemcisi HTTP yönlendirmelerini reddeder. -
Mevcut HMAC-SHA256’nın yanında HMAC-SHA512 web kancası kimlik doğrulaması (
hmac-sha512); imza başlığı yapılandırılabilir.
-
Entegrasyonu başka bir projeye ait olan bir web kancası reddedilir.
Gözlemlenebilirlik
-
Prometheus metrikleri. Statik bir servis kimlik bilgisiyle HTTP Basic Auth arkasında
GET /api/metrics:"metrics": { "enabled": true, "username": "prometheus", "password": "…" }(
SEMAPHORE_METRICS_ENABLED,SEMAPHORE_METRICS_USERNAME,SEMAPHORE_METRICS_PASSWORD.) Seriler:semaphore_tasks_running,semaphore_tasks_total{status}, standartgo_*veprocess_*toplayıcıları ve Pro’da denetim dışa aktarım göstergeleri. -
Yeni
extra_varsverunnerhata ayıklama ad alanları; depo gezinmesi Git çıktısını DEBUG düzeyinde günlüğe kaydeder. -
Proje yedeklerinin dışa aktarımı ve geri yüklenmesi günlüğe kaydedilir.
Güvenlik
- Kimlik bağlama e-posta yerine sağlayıcı kimliğiyle; LDAPS sertifika doğrulaması varsayılan olarak açık.
- Ek değişkenler komut satırı dışında; gizli anahtarlar Vault ile şifreli; değerlerdeki Jinja2 değerlendirilmiyor.
- İstemci görevlerinden sahte
workflow_run_id,workflow_node_idveartifactsalanları temizleniyor. - Yönetici rotaları, yönetici bayrağı yerine açık global izinlerle korunuyor; bilinmeyen izin bitleri reddediliyor; kullanıcı yönetiminde yetki yükseltme koruması.
- Playbook seçici depo kök dizinine kapatıldı (
OpenRoot), sınırlandı ve filtrelendi. - Ek değişken kökleri ve YAML sayıları doğrulanıyor; Galaxy CLI argümanları izin listesine alındı.
- Depo kimlik bilgileri günlüklerde ve olay akışında maskeleniyor; Git yapılandırma
parametrelerinde
=kaçış karakteriyle yazılıyor. - Denetim uç noktaları siteler arası okumaları ve bozuk imleçleri reddediyor; güvenilir vekil sunucu ağları doğrulanıyor.
- Runner
unregisterkimlik doğrulamasından geçiyor; yönlendirmeler runner istemcisi tarafından reddediliyor. - Web kancası proje ve entegrasyon kimlikleri doğrulanıyor.
- Yerel görevler tüm süreç gruplarıyla birlikte durduruluyor.
Yükseltme notları
Kırıcı ve davranışsal değişiklikler
- Şablon adları proje başına benzersiz olmalıdır.
v2.20.4geçişi benzersiz bir dizin ekler; yükseltmeden önce yinelenen adları değiştirin. - Rol tabloları yeniden oluşturulur (
v2.20.12/v2.20.13). Önce yedek alın. Kısa adı (slug) büyük/küçük harf duyarsız olarak bir yerleşik veya başka bir rolle çakışan özel bir rol yeniden adlandırılır (günlüğe kaydedilir); çözümlenemeyen bir role işaret eden şablon izinleri kaldırılır (günlüğe kaydedilir). Üyelikproject__user_roletablosuna taşındı;project__user.rolesütunu kaldırıldı. GET /api/project/{id}/usersyalnızca tek rollü üyeler içinroledöndürür —rolesalanını okuyun./roles*taşındı: yönetici bayrağından Manage global roles iznine; yöneticiler etkilenmez.- LDAPS sertifikaları varsayılan olarak doğrulanır. Kendinden imzalı sertifikalar için
ldap_tls_skip_verifyveya bir sağlayıcınıntls_skip_verifyayarını kullanın. ansible-playbookfarklı çağrılır:--extra-vars @file, ayrıca görev gizli anahtar içerdiğinde — vault’u olmayan şablonlarda bile — ikinci bir dosya ve bir--vault-id <uuid>@prompt. Komut satırını ayrıştıran her şey veya vault sorularını yasaklayan biransible.cfgbundan etkilenir.- Ek değişken değerlerinin içindeki Jinja2 artık değerlendirilmiyor. Bir web kancası veya anket değerini şablonlamaya dayanan bir playbook bunu yapmayı bırakacaktır.
- İş akışı çalıştırma uç noktası yeniden adlandırıldı:
POST …/workflows/{id}/run→…/runs. - Monorepo depoları şablonu geçersiz kılar: şablon başına dal yok, görevlerde dal veya commit geçersiz kılması yok.
- Envanter
repository_idalanı,filedışındaki her tür için kaldırıldı. - Yerel bir görevi durdurmak süreç grubunu sonlandırır (Windows’ta henüz eşdeğeri yok).
- İş akışı çıktıları Docker ve Kubernetes yürütücüleri tarafından henüz yakalanmıyor; anket gizli anahtarları henüz bu yürütücülere ulaşmıyor.
Yeni yapılandırma
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, OIDC sağlayıcısı başına groups_claim ve require_verified_email,
runner.check_interval_seconds, runner.connection.timeout_seconds,
runners.{default_global_runners_mode,registration_token}. Tümü isteğe bağlıdır. İşaretçi türündeki
yapılandırma alanları artık ortam değişkenlerinden ayarlanabilir. Yapılandırma ve CLI referans
sayfaları kaynaktan oluşturulur.
Veritabanı geçişleri
v2.20.0 harici kimlikler · v2.20.1 göreve bağlı anket gizli anahtarları · v2.20.2 gecikme
düğümleri · v2.20.3 çalışma dizini · v2.20.4 benzersiz şablon adları · v2.20.5 hata uyarısı
bastırma · v2.20.7 host yapılandırması · v2.20.8 iş akışı sürümleri · v2.20.9–v2.20.11
denetim günlüğü ve dizinler, kenar girdi eşlemeleri, monorepo bayrağı · v2.20.12–v2.20.13 rol
tabloları, iş akışı değişkenleri · v2.20.14 iş akışı entegrasyonları ve grup eşlemeleri ·
v2.20.16 global roller.
Bağımlılıklar
Go 1.26; Alpine 3.24 üzerinde Docker imajları; prometheus/client_golang 1.23 eklendi; go-oidc 3.21,
go-ldap 3.4.14, golang.org/x/crypto 0.57, modernc.org/sqlite 1.59, logrus 1.10; ön uçta
js-yaml 5 ve cron-parser 5.10. Yeni tek tıkla dağıtımlar: Cloudzy, RepoCloud ve Pethost.
