
Semaphore UI 2.19, 2.x serisinin en büyük sürümüdür. Grafiksel düzenleyiciye sahip İş Akışları (Workflows) sunar, runner’ların görevleri Docker konteynerlerinde ve Kubernetes pod’larında yürütmesine olanak tanır, Semaphore’un çalışan görevlere kısa ömürlü JWT kimlik belirteçleri vermesini sağlar, şifreleme anahtarı rotasyonu ekler, runner güvenilirliğini kalıcı olarak çözer ve uzun bir güvenlik sıkılaştırma listesi içerir.
Bu seri v2.19.0 ile v2.19.14 arasındaki sürümleri kapsar. Yama sürümleri sonda listelenmiştir.
Öne Çıkanlar
- İş Akışları (Beta) — onay kapılarıyla görev şablonlarını bir işlem hattına bağlayın, grafiksel düzenleyicide çizin ve aynı tuval üzerinde canlı olarak izleyin.
- Docker ve Kubernetes yürütücüleri — runner’lar her görevi temiz bir konteyner veya pod içinde yürütebilir (Pro / Enterprise).
- Görevler için JWT kimlik belirteçleri — playbook’lardan Vault’a, AWS’ye, GCP’ye, Azure’a ve OIDC belirteçlerini kabul eden diğer tüm servislere anahtarsız kimlik doğrulama.
- Şifreleme anahtarı rotasyonu — dinamik yeniden yükleme ve
vaults checkkomutu ile etiketli anahtarlık (keyring). - Ortam değişkeni olarak anket değişkenleri, ayrıca
int,textve yeniden biçimlendirilmişenumtürleri. - Görev geçmişinde gerçek sunucu taraflı sayfalama — milyonlarca göreve sahip projeler bile hızlı kalır.
- Runner güvenilirliği — çevrimiçi/çevrimdışı durum, tek kullanımlık karma kayıt belirteçleri ve çöken runner’da takılan görevlerin otomatik kurtarılması.
SEMAPHORE_DEBUG_FILTERile seçici hata ayıklama günlüğü.- Güvenlik sıkılaştırması: geçerli parola doğrulaması, CSRF kaynak doğrulaması, güvenli tanımlama bilgileri (cookies), API genelinde daha sıkı girdi doğrulaması.
- BoltDB kaldırıldı — yalnızca SQLite, MySQL ve PostgreSQL desteklenir.
İş Akışları (Beta)
Bir iş akışı, tek bir birim olarak çalışan görev şablonları grafiğidir. Her düğüm bir görev (bir şablonu çalıştırır), bir onay (bir kullanıcı onaylayana veya reddedene kadar çalıştırmayı duraklatır) veya bir nottur (asla yürütülmeyen serbest biçimli açıklama). Kenarlar bir koşul taşır: başarı durumunda, başarısızlık durumunda veya her zaman.
İş Akışları, proje kenar çubuğunda Beta etiketiyle işaretlenmiş yeni bir Workflows öğesi olarak görünür. Pro sürümünde mevcuttur; beta süresince plana bakılmaksızın etkindir.
Grafiksel düzenleyici

Düzenleyici, Drawflow üzerine kurulu tam sayfa bir tuvaldir:
- paletten düğümleri sürükleyin, bir düğüm tutamacından sürükleyerek bağlayın;
- koşulunu değiştirmek için bir kenara tıklayın; kenarlar renk kodludur ve köşede bir açıklama yer alır;
- yan panelde özelliklerini düzenlemek için bir düğüme tıklayın: şablon, yakınsama modu (tüm üst öğeler / herhangi bir üst öğe), onay zaman aşımı ve mesajı, not metni;
- döngüler ve çevrimler çizildikçe otomatik olarak reddedilir ve Sorunlar paneli sunucu taraflı doğrulamayı yansıtarak hatalı bir grafiğin kaydedilmesini engeller;
- düğüm konumları kalıcıdır; koordinatları olmadan API aracılığıyla oluşturulan iş akışları otomatik topolojik düzen alır;
- araç çubuğu veya
Ctrl+ fare tekerleği ile yakınlaştırın, gezinmek için tuvali sürükleyin, yer kazanmak için paleti daraltın; - Başlangıç sürümü çalıştırma sürümünü başlatır (
1.4.0,1.4.1, …); sürüm, iş akışının başlattığı her göreve iletilir.

Canlı çalıştırma görünümü
Çalıştırma görünümü aynı tuvali yeniden kullanır. Her düğüm görev durumunu gösterir, etkin düğüm vurgulanır ve bekleyen onaylar doğrudan tuval üzerinde Onayla / Reddet düğmelerini görüntüler. Bir Durdur düğmesi çalıştırmanın tüm görevlerini zorla durdurur, bekleyen onayları reddeder ve çalıştırmayı stopped olarak işaretler.

Çalıştırma durumları running, approval, success, failed ve stopped şeklindedir. İş akışı ilerlemesi sunucu tarafından yürütülür: herhangi bir iş akışı görevi bittiğinde sonraki düğümler planlanır.

Düğüm başına görev parametreleri
Her görev düğümü, manuel çalıştırmanın yapabildiği gibi şablonuna ilettiği parametreleri (değişkenler, envanter, dal, bağımsız değişkenler, sürüm, mesaj) geçersiz kılabilir.
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}
Beta sürümünün bilinen kısıtlamaları: minimap, geri al/yinele veya çoklu seçim henüz yoktur; iş akışı yapıları (set_stats değerleri) henüz uzak runner’larda yürütülen görevler arasında akmamaktadır.
Docker ve Kubernetes yürütücüleri (Pro / Enterprise)
Runner’lar, her görevi doğrudan runner ana makinesinde çalıştırmak yerine yalıtılmış bir ortamda yürütebilir. Yürütücü, runner işlemi başına bir kez runner.executor.type (local, docker, k8s) ile seçilir.
Docker (runner.executor.docker, Pro):
| Seçenek | Ortam Değişkeni | Varsayılan |
|---|---|---|
host |
SEMAPHORE_RUNNER_DOCKER_HOST |
yerel soket |
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):
| Seçenek | Ortam Değişkeni | Varsayılan |
|---|---|---|
kubeconfig |
SEMAPHORE_RUNNER_K8S_KUBECONFIG |
küme içi (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 |
CI tarafından iki yeni imaj yayınlanmaktadır: semaphoreui/job (Ansible, Terraform, OpenTofu, Terragrunt, paramiko) ve semaphoreui/helper. Bir şablon, şablon formundaki yeni Executor image alanıyla kendi görevleri için imajı geçersiz kılabilir.
Runner bağlantısı ayrıca runner.connection.server_ca_cert_file ve runner.connection.skip_tls_verify seçeneklerini kazandı.
Görevler için JWT kimlik belirteçleri
Semaphore, çalışan görevler için bir OIDC tarzı kimlik sağlayıcı gibi davranabilir; böylece bir playbook uzun ömürlü kimlik bilgileri olmadan Vault, bulut STS uç noktaları veya dahili servislere kimlik doğrulaması yapabilir.

- Şablon başına Issue JWT to task runner ile etkinleştirin; bir veya daha fazla hedef kitle (audiences) ve bir TTL (
jwt.max_ttlile sınırlı) belirleyin. - Görev, belirteci
SEMAPHORE_JWTortam değişkeninde alır. - Belirteçler ES256 (ECDSA P-256) imzalıdır ve yalnızca kimlikleri taşır:
task_id,project_id,template_id,user_idartı standartiss,sub,aud,exp,nbf,iat,jtitalepleri. - Genel anahtarlar
GET /.well-known/jwks.jsonadresinde yayınlanır.
Sunucu yapılandırması:
"jwt": {
"enabled": true,
"issuer": "https://semaphore.example.com",
"default_ttl": "1h",
"max_ttl": "24h"
}
Ortam değişkenleri: SEMAPHORE_JWT_ENABLED, SEMAPHORE_JWT_ISSUER, SEMAPHORE_JWT_DEFAULT_TTL, SEMAPHORE_JWT_MAX_TTL.
Anket değişkenleri
Bir değişkeni ortam değişkeni olarak iletme
Bir anket değişkeni artık Değişkeni şu şekilde ilet ayarına sahiptir: uygulamaya özel CLI yöntemi (Ansible için --extra-vars, Terraform/OpenTofu için -var, kabuk betikleri için bir CLI argümanı) veya bir süreç ortam değişkeni. Değişken adı olduğu gibi kullanılır, bu nedenle bir Terraform kullanıcısı değişkeni basitçe TF_VAR_region olarak adlandırabilir. Ortam değişkenleri süreç listelerinde görünmez, bu da onları gizli anahtarlar için daha güvenli bir seçim yapar.

Yeni türler
int— doğrulamalı sayısal girdi;text— çok satırlı metin;enum— ad/değer çiftleri ve bir varsayılan içeren yeniden stillendirilmiş düzenleyici.

Görev iletişim kutusu her türü uygun şekilde işler:

Mevcut survey_vars JSON yapısında saklanır — veritabanı geçişi gerekmez.
Şablonlar ve görevler
-
Dinamik playbook seçici. Path to playbook file alanı, depoda bulunan playbook’ları listeler (
GET /api/project/{id}/repositories/{repository_id}/playbooks). Liste seçilen dalı takip eder ve depo okunamadığında serbest metin girişine geri döner. -
Ansible Galaxy kurulumunu atla —
requirements.yml’den rol ve koleksiyon kurulumunu atlamak için şablon başına seçenek. -
Değişken gruplarında türü belirtilmiş değişkenler, sayılar dahil:

-
Görev geçmişi sayfalaması. Geçmiş sayfası daha önce en yeni 200 görevi alır ve istemci tarafında sayfalar halinde gösterirdi. Arka uç artık
COUNT(*)veOFFSETolmadan bir anahtar kümesi imleci (?count=20&before=<task_id>,X-Has-Nextyanıt başlığı) kullanarak her seferinde bir sayfa döndürür. Altbilgi, Sayfa başına satır ve önceki/sonraki kontrollerini sunar.
-
Görev listeleri en fazla 5 saniyede bir yeniden yüklenir; gereksiz istekler kaldırıldı.
-
Zamanlamalar sunucu taraflı cron ayrıştırıcısıyla doğrulanır.
-
Bir görevdeki dal geçersiz kılma, yalnızca şablon izin verdiğinde kabul edilir.
-
Git işlemleri depo dizini başına serileştirilir. Paralel görevlere izin ver etkin olan şablonlar tek bir çalışma kopyasını paylaşır ve eşzamanlı
git pull/git checkoutbunu bozabilir. Güncelleme ve ödeme artık tek bir kritik bölüm oluşturur.
Runner’lar

-
Runner’lar sayfasında sinyal (heartbeat) canlılığına dayalı çevrimiçi / çevrimdışı durum.
-
Tek kullanımlık kayıt belirteçleri. Bir runner önce arayüzde oluşturulabilir ve daha sonra bir kez gösterilen, yalnızca SHA-256 karması olarak saklanan ve bir saat sonra süresi dolan bir
smrs_…belirteci ile kaydedilebilir. İletişim kutusu ortam değişkenleri, yapılandırma dosyası ve Docker için kopyalanmaya hazır komutlar gösterir.
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 -
Askıda kalan görevleri kurtarma. Runner’lar süreç başlangıç zamanlarını (
X-Runner-Started-At) gönderir. Yoklamayı durduran bir runner,runners.offline_timeout_sec(120 sn) sonrasında çevrimdışı olarak işaretlenir: yeni görev almaz vestartingdurumundaki görevleri yeniden atanır.runners.task_fail_timeout_sec(420 sn) sonrasındarunninggörevleri net bir mesajla başarısız kılınır. Uzlaşma herrunners.reconcile_interval_sec(30 sn) sürede bir çalışır. -
Bir runner’dan başka yöne atanan görevler eski runner’da sonlandırılır.
-
Eski runner geri dönüşü kaldırıldı: tüm runner’lar çevrimdışı olduğunda, görevler 30 dakikaya kadar yoklama yapmayan bir runner’a gönderilmek yerine kuyrukta bekler.
-
Runner başına RSA şifreleme anahtarları kaldırıldı. Runner-sunucu trafiği TLS’e dayanır; bu, kayıt ve
setupaşamalarındaki anahtar değişimi adımını ortadan kaldırır. -
Runner istemcisinde bir TCP bağlantı sızıntısı giderildi; geçersiz kayıt belirteçleri
400döndürür.
Gizli anahtarlar ve şifreleme
- Şifreleme anahtarı rotasyonu. Yeni
encryptionbloğu etiketli bir anahtarlık tanımlar: satır içikeys(değer veya dosya) veya her dosyanın dosya adıyla adlandırılmış bir anahtar olduğu birkeys_folder, ayrıca gizli anahtar ve seçenek anahtarı içinactiveişaretçileri. Şifreli metin artık bir anahtar kimliği taşır, böylece anahtarlar büyük çaplı bir yeniden şifreleme olmadan döndürülebilir.keys_poll_interval(varsayılan15s) ileencryption.keys_fileanahtarlığı dinamik olarak yeniden yükler. Yeni CLI komutları:semaphore vaults check;semaphore vaults rekeyanahtarlık etrafında yeniden yazıldı. option_encryption— veritabanında saklanan seçenekler için ayrı bir anahtar.- Kendi simgesine sahip OpenBao gizli depolama türü (Vault sağlayıcısı üzerinden yönlendirilir).
- Statik kimlik bilgileri olmadan AWS Secrets Manager — bir Use IAM role onay kutusu.
- Vault/OpenBao depolamaları için TLS-skip-verify seçeneği.
- Senkronize edilmiş ve salt okunur gizli anahtar alanları artık güncelleme sırasında silinmez.
Gözlemlenebilirlik
- Ad alanlı hata ayıklama günlüğü.
--debug-filter/SEMAPHORE_DEBUG_FILTER, hangi alt sistemlerin Node.jsdebugtarzında hata ayıklama çıktısı vereceğini seçer:runner,runner,task_pool,task_*,*,*,-db. Kullanılabilir ad alanları:runner,task_pool,task_runner,task_logger,git,terraform,session,ldap,schedule,db,ha. Filtre yalnızca günlük düzeyiDEBUGolduğunda geçerlidir. Syslog kancaları da aynı filtreyi dikkate alır. - Runner’lar, görevler ve kimlik doğrulama genelinde birçok yeni bağlamsal hata ayıklama ifadesi; seçilen çalışma alanı başlangıçta yazdırılır.
Güvenlik

- Parola değiştirmek artık geçerli parolayı gerektirir (CWE-620).
- Durum değiştiren isteklerde Origin / Referer doğrulaması (CSRF sıkılaştırması).
- HTTPS üzerinden sunulduğunda oturum çerezleri
Secureolarak işaretlenir. - Runner kayıt belirteçleri karma olarak saklanır ve süresi dolar; runner başına şifreleme anahtarları kaldırıldı.
- Özel rol oluşturma, çağıranın izinlerini kontrol eder (yetki yükseltme düzeltmesi).
- Git URL doğrulaması; özel olarak hazırlanmış bir ref’in bir bayrak olarak okunmaması için git’e
--end-of-optionsiletilir; commit karmaları format kontrolünden geçer; dallar depo gezinmesinden önce doğrulanır. - Erişim anahtarı yükleri ve şablon
appalanı doğrulanır. - JWT talepleri yalnızca kimlikleri taşır — harici sistemlere hiçbir ad veya e-posta sızmaz.
- Runner belirteçleri artık proje yedeklerine yazılmaz.
- Güvenlik SLA’sı
SECURITY.mddosyasında yayımlandı; sürüm varlıkları[email protected]GPG anahtarıyla imzalanır.
Arayüz ve yerelleştirme

- Çekçe çeviri eklendi.
- Şablon formunun JWT ve zamanlama bölümleri için açılır kartlar.
- Panoya kopyala simgesi açık modda görünür hale getirildi; çalışan görev yükleme animasyonları düzeltildi; şablon formu dolgusu düzeltildi; iş akışı Beta etiketi eklendi.
- Entegrasyon değişkeni çıkarma işlemi, JSON nesnelerini ve dizilerini dizeye dönüştürmek yerine korur.
Yükseltme notları
Kırıcı ve davranışsal değişiklikler
- BoltDB kaldırıldı.
boltartık geçerli bir veritabanı türü değildir; sunucu “Bolt is not supported starting from version 2.19” hatası ile başlamayı reddeder. Önce SQLite, MySQL veya PostgreSQL’e geçiş yapın. - Runner şifreleme anahtarları kaldırıldı. Sunucu ve runner’ların her ikisi de 2.19 sürümünde olmalıdır. Runner-sunucu trafiğinin TLS korumalı olduğundan emin olun.
- Görev listesi API’leri sayfalandırıldı.
GET /api/project/{id}/tasks/lastartıkcountvebeforeparametrelerini alır; tek yanıtta en yeni 200 göreve güvenen istemciler sayfalamayı kullanmalıdır. - Eski runner geri dönüşü yok. Tüm runner’lar çevrimdışı olduğunda görevler kuyrukta kalır.
- Runner kaydından runner
activebayrağı kaldırıldı. - Proje yedekleri artık runner belirteçlerini içermez.
- SQLite:
v2.19.14, uygun yabancı anahtarları eklemek içinsessionvetasktablolarını yeniden oluşturur (kullanıcı silme işlemini düzeltir). Yükseltmeden önce veritabanını yedekleyin.
Yeni yapılandırma
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. Tümü isteğe bağlıdır; mevcut yapılandırmalar çalışmaya devam eder.
Veritabanı geçişleri
v2.18.6 (şablon jwt_params), v2.18.15 (iş akışı tabloları), 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 yeniden oluşturma). MariaDB 12.1 geçiş uyumluluğu düzeltildi.
Yama sürümleri
| Sürüm | Değişiklikler |
|---|---|
| 2.19.8 | SQLite geçişi düzeltildi; kullanıcı silme düzeltildi (session/task yabancı anahtarları); veritabanı sorgularında büyük/küçük harfe duyarsız dize karşılaştırması |
| 2.19.9 | SEMAPHORE_RUNNER_EXECUTOR_TYPE ortam değişkeni; yapılandırmada omitempty temizliği |
| 2.19.10 | Yürütücü yapılandırma düzeltmesi; Docker derleme seçeneği düzeltmesi |
| 2.19.11 | Seçilen çalışma alanı loglarda yazdırılır; yardımcı imaj için latest etiketi; veritabanı geçiş testleri |
| 2.19.12 | Runner yapılandırma seçeneklerinde nil işaretçisi düzeltildi; hata yayma düzeltmesi |
| 2.19.14 | Yapılandırmada eski secrets_path işleme düzeltmesi |
Bağımlılıklar
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. Dokümantasyon bir git alt modülü olarak eklendi; THIRD-PARTY-LICENSES.md yeniden oluşturuldu.
