클라우드 시크릿 매니저 통합 자세히

버전 2.18

클라우드 플랫폼을 사용하는 조직은 런타임에 클라우드 공급자의 시크릿 관리 서비스에서 직접 시크릿을 가져올 방법이 필요하며, 이를 통해 자격 증명 복제를 방지하고 기존 교체 정책을 활용할 수 있습니다. 이 기능은 AWS Secrets Manager 및 Azure Key Vault와의 네이티브 통합을 Enterprise 전용 기능으로 추가합니다.

Enterprise

  • AWS Secrets Manager 통합 — IAM 역할, 접근 키 또는 위임 역할을 사용하여 런타임에 AWS Secrets Manager에서 시크릿을 가져옵니다. 필드 추출 및 자동 교체가 포함된 JSON 구조 시크릿을 지원합니다. (#2248)
  • Azure Key Vault 통합 — 관리 ID 또는 서비스 주체 인증을 사용하여 런타임에 Azure Key Vault에서 시크릿을 가져옵니다. 자동 교체가 포함된 시크릿, 키 및 인증서를 지원합니다. (#2248, #3170)
  • 시크릿 캐싱 — 확인된 시크릿을 메모리에 캐싱하여 클라우드 공급자에 대한 API 호출을 줄입니다.

영구 저장소 캐시

버전 2.18

현재 Semaphore는 각 작업 템플릿마다 별도의 디렉토리에 저장소를 클론(또는 풀)하는데, 대규모 저장소의 경우 속도가 느리고 디스크 I/O를 낭비합니다. 이 기능은 저장소별 플래그를 추가하여 AWX가 프로젝트 업데이트를 처리하는 방식과 유사하게 백그라운드에서 주기적으로 업데이트되는 공유 영구 클론으로 전환합니다. 활성화하면 해당 저장소를 참조하는 모든 템플릿이 단일 작업 복사본을 공유하며(Semaphore에서 로컬 저장소에 이미 사용되는 동일한 모델), 개별 작업 실행 시 더 이상 클론이나 풀을 트리거하지 않습니다.

Community

  • 저장소 설정의 “Cache Repository” 플래그 — 각 저장소에 토글을 추가하여 활성화 시 작업 실행마다 클론하는 대신 단일 영구 클론을 유지합니다. 클론은 해당 저장소를 사용하는 모든 템플릿에서 공유되며, 로컬 저장소가 이미 가지고 있는 동작과 일치합니다. (#1212)
  • 백그라운드 주기적 동기화 — 캐시 플래그가 활성화되면 작업 시작 시가 아닌 백그라운드 워커에서 설정 가능한 간격(예: 5분마다)으로 업데이트를 풀하여 작업이 항상 최근 체크아웃에 대해 즉시 실행됩니다.
  • 수동 동기화 작업 — 저장소 UI에 “Sync Now” 버튼과 해당 API 엔드포인트를 제공하여 주기적 스케줄 외에 즉시 풀을 트리거할 수 있습니다.
  • 강제 푸시/히스토리 재작성 복원력 — 업스트림 강제 푸시를 정상적으로 처리합니다(예: git fetch --all && git reset --hard origin/<branch>). 일반 풀에서 실패하는 대신 올바르게 처리합니다. (#800)
  • 더티 작업 트리 복구 — 풀하기 전에 더티 작업 트리(예: 남아있는 .retry 파일)를 자동으로 감지하고 정리하여 “local changes” 오류를 방지합니다. (#308)
  • 오래된 클론 정리 — 삭제되었거나 URL이 변경된 저장소의 캐시된 클론을 가비지 컬렉션하여 디스크 공간을 회수합니다. (#1497, #2679)
  • 동기화 상태 가시성 — 저장소 상세 페이지에 마지막 동기화 타임스탬프와 상태(성공/실패)를 표시하여 사용자가 작업 복사본의 최신 상태를 알 수 있도록 합니다.
  • 저장소별 동기화 스케줄 — 개별 저장소에서 글로벌 동기화 간격을 재정의할 수 있습니다(예: 변경이 잦은 저장소는 매분, 안정적인 저장소는 매시간).

LDAP 및 OpenID 그룹 매핑

버전 2.18

Semaphore는 인증을 위해 LDAP 및 OpenID Connect(OIDC)를 지원하지만, 통합은 로그인에서 멈춥니다 — ID 공급자 그룹 멤버십을 기반으로 한 자동 역할 또는 프로젝트 할당이 없습니다. 모든 OIDC/LDAP 사용자는 첫 로그인 후 수동으로 프로젝트 및 역할에 할당해야 합니다. 또한 OIDC 리다이렉트 처리, 클레임 파싱, LDAP 구성에 인증 경험을 불안정하게 만드는 여러 버그가 있습니다.

Community

  • 클레임별 OIDC 로그인 제한 — 특정 클레임 값(예: 필수 그룹 멤버십 또는 이메일 도메인)을 가진 사용자만 로그인하도록 허용합니다. (#2626, #2938)
  • SSO 자동 로그인 — 로그인 화면을 우회하고 OIDC/SSO 공급자로 직접 리다이렉트하며, SSO가 다운된 경우를 위한 복구용 안전 URL을 제공합니다. (#2548, #2899)
  • OIDC PKCE 지원 — RFC 9700에서 권장하는 대로 OIDC 인가 코드 흐름에 Proof Key for Code Exchange를 추가합니다. (#3072)
  • OIDC 환경 변수 구성 — 설정 파일만이 아닌 환경 변수를 통해 OIDC 공급자를 구성할 수 있어, 컨테이너에서의 시크릿 관리를 간소화합니다. (#2528, #3120)
  • web_host/web_root 사용 시 OIDC 리다이렉트 수정web_host가 비어 있거나 web_root가 하위 경로로 설정된 경우 OIDC 로그인 후 404 오류를 해결합니다. (#2681, #1524, #2532, #3121)
  • OIDC 클레임 처리 수정username_claim이 무시되고, email 클레임이 인식되지 않으며, client_secret_file이 잘못된 요청을 생성하는 문제를 해결합니다. (#1731, #2818, #3122)
  • LDAP 클레임 표현식 수정 — LDAP 매핑에서 깨진 템플릿 표현식을 해결합니다(예: mail | {{ .username }}@domain.com<no value>로 해석되는 문제). (#3127)
  • LDAP 사용자 이름 할당 수정 — LDAP 사용자가 무작위로 생성된 문자열 대신 실제 LDAP 사용자 이름을 받도록 합니다. (#3688)
  • LDAP 로컬 인증 폴백 — LDAP가 활성화된 경우에도 로컬 관리자 계정이 로그인할 수 있도록 허용하여, LDAP 서버가 다운된 경우 잠금을 방지합니다. (#1363)
  • LDAP 디버그 로깅 — 문제 해결이 가능하도록 LDAP 인증 실패에 대한 유용한 로그 출력을 추가합니다. (#2932)
  • OIDC/LDAP 사용자-로컬 계정 연결 — 중복을 생성하지 않고 기존 로컬 계정을 외부 ID 공급자로 변환하거나 연결할 수 있습니다. (#3339)
  • OIDC 공급자 로그아웃 — Semaphore에서 로그아웃할 때 IdP 세션(예: Keycloak)을 종료하여 적절한 계정 전환을 가능하게 합니다. (#1496)

Pro

  • LDAP 자격 증명을 접근 키에 동기화 — 선택적으로 로그인 시 LDAP 비밀번호가 변경되면 접근 키 비밀번호를 자동 업데이트하여 Ansible 자격 증명을 동기화 상태로 유지합니다. (#3696)

Enterprise

  • OIDC 그룹-역할 매핑 — OIDC 클레임(예: groups 클레임)을 기반으로 Semaphore 역할 및 프로젝트 멤버십을 자동 할당하여, 첫 로그인 후 수동 사용자 설정을 제거합니다. (#1499, #2483)
  • LDAP 그룹-역할 매핑 — 그룹 멤버십을 통한 관리자 역할 할당을 포함하여 Active Directory/LDAP 그룹을 Semaphore 역할에 매핑합니다. (#3226, #1316)
  • LDAP/OIDC 통합 전체 RBAC — 외부 ID 공급자 그룹에서의 자동 역할 할당으로 세분화된 역할 기반 접근 제어(글로벌 관리자, 프로젝트 관리자, 프로젝트 사용자, 읽기 전용)를 구현합니다. (#891)
  • 플러그형 인증 아키텍처 — 여러 인증 백엔드를 지원하고 새 공급자 추가를 간소화하기 위해 인증을 공급자 인터페이스로 추상화합니다. (#465, #1820)
  • 사용자 삭제 시 고아 데이터 수정 — 사용자를 삭제할 때 project__user 매핑을 정리하여 팀 뷰 충돌을 방지합니다. (#3514)

유연한 알림 시스템

버전 2.19

Semaphore UI의 현재 알림 시스템은 config.json을 통해서만 구성되며, 제한된 채널 세트(이메일, Telegram, Slack, MS Teams)를 지원하고, 프로젝트별 사용자 정의가 최소화된 글로벌 수준에서 작동합니다. 이 기능은 UI에서 관리 가능하고, 확장 가능하며, 프로젝트 및 템플릿 단위로 구성할 수 있도록 알림을 처음부터 재설계합니다.

Community

  • 확장 가능한 채널 아키텍처 — 채널별 구현으로 알림 채널에 대한 공통 인터페이스를 정의하여 핵심 로직을 수정하지 않고도 새 채널을 쉽게 추가할 수 있습니다. 한 번에 많은 공급자를 포괄하기 위해 범용 알림 라이브러리(예: nikoksr/notify) 또는 게이트웨이(예: Apprise) 채택을 고려합니다. (#2325, #1290)
  • UI 관리 알림 구성 — 알림 설정을 설정 파일에서 웹 UI로 이동하여 프로젝트별 및 템플릿별 세분성을 지원하고, 동일한 채널 유형의 여러 인스턴스를 지원합니다. (#3387, #1821, #3588)
  • 템플릿 기반 메시지 사용자 정의 — 데이터베이스가 아닌 디스크의 파일로 저장되는 사용자 정의 메시지 템플릿을 지원합니다.
  • 프로젝트별 채널 선택 — 프로젝트 설정을 통해 프로젝트별로 활성화할 알림 채널을 구성할 수 있습니다. (#3588)
  • 아웃바운드 웹훅 이벤트 — 이벤트 유형(START, SUCCESS, FAILURE)을 정의하고, 구성 가능한 URL, 헤더 및 HMAC 인증을 사용하여 프로젝트별 웹훅 템플릿을 생성할 수 있습니다. (#1825, #2594, #3066)
  • 새로운 알림 채널 — Discord (#2924), Ntfy (#3383), Google Chat (#1148), Rocket.Chat (#1091), Pushover (#2594) 지원을 추가합니다.
  • “Fixed” 알림 — GitLab CI 복구 알림과 유사하게, 실패 후 첫 번째 성공 실행 시 알림을 전송합니다. (#3380)
  • 템플릿별 모든 알림 비활성화 — 기존 “성공 알림 비활성화” 체크박스와 함께 “모든 알림 비활성화” 옵션을 추가합니다. (#3724)
  • 성공 시 이메일 발송 — 성공 알림 경로에 이메일을 포함합니다(현재 성공 시 Telegram/Slack/MS Teams만 발송됨). (#3503)
  • 알림 내 작업 URL 수정 — 모든 채널(이메일, Slack, MS Teams)이 상대 경로가 아닌 스키마와 호스트가 포함된 정규화된 작업 URL을 수신하도록 합니다. (#2097, #2311, #3292)
  • 이메일 전송 문제 수정 — SMTP 포트 465(암시적 TLS) 지원, TLS 전 인증 순서, Date 헤더 형식 문제를 해결합니다. (#2201, #2971, #3542, #3209)
  • Telegram 스레드/토픽 지원 — 프로젝트별 및 템플릿별로 구성 가능한 message_thread_id를 통해 특정 Telegram 그룹 스레드에 알림을 보낼 수 있습니다. (#3493, #1456)
  • Slack 템플릿 개선 — Slack Workflow Builder 호환성을 위해 최상위 필드(title, text, color)를 노출합니다. (#2607)
  • 알림 프록시 지원 — 시스템 전체 프록시 없이도 아웃바운드 알림 요청에 대한 HTTP 프록시를 구성할 수 있습니다. (#1484)

Pro

  • Pro 전용 알림 채널 — Pro 플랜에서만 특정 알림 채널을 지원합니다.
  • 장시간 실행 작업 알림 — 작업이 구성 가능한 기간 임계값을 초과하면 알림을 트리거합니다. (#1393)

Enterprise

  • 알림 감사 로그 — 전송 상태, 타임스탬프, 수신자 세부 정보와 함께 전송된 모든 알림의 검색 가능한 로그를 유지합니다. 실패 시 수신자 컨텍스트를 포함하도록 오류 로깅을 개선합니다. (#3410)
  • 인시던트 관리 플랫폼 통합 — 자동 인시던트 생성 및 수명 주기 추적을 위한 PagerDuty, Opsgenie, ServiceNow와의 네이티브 통합.
  • 역할 기반 알림 접근 제어 — 조직의 역할 및 권한에 따라 알림 규칙 및 채널을 구성할 수 있는 사용자를 제한합니다.

템플릿별 다중 인벤토리

버전 2.19

Ansible CLI는 기본적으로 여러 -i 인수를 전달하여 인벤토리를 구성할 수 있습니다(예: ansible-playbook -i common_vars.yml -i staging_hosts.yml). Semaphore는 현재 각 작업 템플릿을 단일 인벤토리로 제한하여, 사용자가 인벤토리 스크립트, 병합 파일 또는 추가 환경 변수와 같은 우회 방법을 사용해야 합니다. 이 기능은 해당 제한을 해제하고 더 광범위한 인벤토리 관리 격차를 해결합니다.

Community

  • 다중 인벤토리 지원 — 단일 작업 템플릿에 여러 인벤토리를 연결하여 Ansible에 순차적 -i 인수로 전달할 수 있습니다(예: ansible-playbook -i common_vars.yml -i staging_hosts.yml). 템플릿당 하나의 인벤토리 제한을 해결합니다. (#2093)
  • 선택적 인벤토리 필드ansible.cfg에서 이미 인벤토리 소스를 지정한 경우 템플릿의 인벤토리 필드를 선택 사항으로 만듭니다. (#1574)
  • URL/HTTP 인벤토리 소스 — 원격 URL 또는 API 엔드포인트에서 인벤토리를 가져올 수 있도록 지원하며, 파일 시스템 접근이 없는 호스팅/SaaS 환경에 필수적입니다. (#1924)
  • 런타임 인벤토리 선택 — 작업 실행 시 드롭다운을 통해 인벤토리를 선택할 수 있도록 하여 현재의 자유 텍스트 우회 방법을 대체합니다. (#1354)
  • 예약 작업 인벤토리 지속성 수정 — 스케줄 대화 상자에서 선택한 인벤토리가 템플릿 기본값으로 되돌아가지 않고 실행 시 저장 및 사용되도록 합니다. (#3566, #3293)
  • 프로젝트 내보내기/복원 시 인벤토리 저장소 링크 손실 수정 — 프로젝트 내보내기 중 인벤토리-저장소 연결이 삭제되고 가져오기 시 복원되지 않는 문제를 수정합니다. (#3369, #3177)
  • 동적 인벤토리에 환경 변수 전달 — 컨테이너/호스트 환경 변수가 동적 인벤토리 스크립트 및 플러그인(예: Python 스크립트, microsoft.ad.ldap)에서 사용 가능하도록 합니다. (#2724, #2783)
  • Git 기반 인벤토리 인증 수정 — 인벤토리용 원격 브랜치를 가져올 때 저장소 자격 증명을 사용하여 인증되지 않은 접근 시도를 수정합니다. (#3539)
  • 호스트별 자격 증명 재정의 — 인벤토리에 정의된 호스트별 ansible_user 및 연결 변수를 글로벌 --extra-vars로 재정의하는 것을 중지합니다. 다중 사용자 인벤토리 패턴을 허용합니다. (#1464, #1621)
  • UI에서 인벤토리 내용 보기 — 검사 및 디버깅을 위해 파일 기반 및 동적 인벤토리 내용을 UI에 표시하며, 외부 저장소의 소스 파일에 대한 링크를 제공합니다. (#3169, #1555, #3543)
  • 작업 컨텍스트에서 인벤토리 이름 노출 — 플레이북에서 활성 인벤토리를 참조할 수 있도록 semaphore_vars 또는 환경 변수로 인벤토리 이름을 사용할 수 있게 합니다. (#1580)

Pro

  • 인벤토리-러너 친화성 — 인벤토리 호스트를 러너 태그와 연결하여 대상 호스트에 네트워크 접근이 가능한 러너에만 작업이 디스패치되도록 하여 다중 네트워크 환경에서의 실패를 방지합니다. (#3322)
  • 인벤토리별 다중 SSH 키 — 각 호스트가 고유한 SSH 키를 사용하는 플릿을 위해 단일 인벤토리에 여러 키 저장소 항목을 할당할 수 있습니다. (#3336)
  • 하이퍼바이저 인벤토리 통합 — 하이퍼바이저 API(VMware, Proxmox)와의 네이티브 통합으로 동적 인벤토리를 자동 생성 및 갱신합니다. (#2709)
  • 호스트 그룹 관리 API — 전체 인벤토리 페이로드를 다시 작성하지 않고 인벤토리 그룹에서 호스트를 추가/제거할 수 있는 API를 제공합니다. (#1560)

Enterprise

  • 템플릿별 허용 인벤토리 제한 — 템플릿에 "인벤토리 묻기"가 활성화된 경우, 선택 가능한 인벤토리를 관리자가 정의한 허용 목록으로 제한하여 잘못된 환경을 실수로 대상으로 지정하는 것을 방지합니다. (#3587)
  • 중앙 호스트 레지스트리 — 호스트 변경(예: 호스트 이름 또는 IP 업데이트)이 수동 편집 없이 해당 호스트를 참조하는 모든 인벤토리에 전파되도록 공유 호스트 관리 계층을 제공합니다. (#564)
  • 호스트 팩트 저장 및 시각화 — 호스트별 Ansible 팩트를 저장하고 diff 및 히스토리 기능으로 작업 실행 전후 상태를 표시합니다. (#930)

템플릿별 다중 변수 그룹

버전 2.20

Semaphore는 현재 각 작업 템플릿에 단일 변수 그룹(환경)만 연결할 수 있습니다. 이로 인해 여러 템플릿이 공통 설정을 공유할 때 그룹 간에 변수를 복제하거나, 모든 것을 포함하는 모놀리식 변수 그룹을 만들어야 합니다. 이 기능은 템플릿별로 여러 변수 그룹을 구성할 수 있게 하고, 직렬화, 우선순위, 전파, 설문 변수 수명 주기 등 변수 처리의 수많은 버그를 수정합니다.

Community

  • 다중 환경 구성 — 공유 변수 세트(예: 공통 기본값, 지역별 재정의)를 구성하고 템플릿 전체에서 재사용할 수 있도록 단일 작업 템플릿에 여러 변수 그룹을 연결할 수 있습니다. (#2612)
  • 변수 그룹 복제 — 몇 가지 값만 다른 환경을 모든 필드를 처음부터 다시 만들지 않고 설정할 수 있도록 복제 작업을 추가합니다. (#3295)
  • 재사용 가능한 설문 변수 세트 — 설문 변수를 작업 템플릿에서 분리하여 독립적으로 할당 가능한 객체로 만들어 템플릿별 중복을 방지합니다. (#2212)
  • extra-vars JSON 직렬화 수정 — 복잡한 extra-vars를 Go 맵 문자열 대신 올바른 JSON으로 직렬화하여 Terraform/OpenTofu의 jsondecode 실패를 수정합니다. (#3748, #1644, #2619)
  • 설문 변수 우선순위 수정 — 환경 extra-vars와 설문에 동일한 변수 이름이 존재할 때 무시되는 재정의를 해결합니다. 명확한 우선순위를 정의하거나 오류를 발생시킵니다. (#3108)
  • 빈/선택적 설문 변수 처리 수정 — 선택적 설문 변수가 무작위로 혼합되지 않고 일관되게 생략되거나 빈 문자열로 전달되도록 합니다. (#2182)
  • 예약 작업용 설문 기본값 — 작업 예약 시 설문 변수의 기본값을 지정할 수 있어, 자동 실행이 필수 프롬프트에서 실패하지 않습니다. (#2244)
  • Bash 작업용 환경 변수로 설문 변수 전달 — 셸 유형 작업에서 CLI 인수 대신 설문 변수를 OS 환경 변수로 노출합니다. (#2433)
  • Tofu/Terraform init 중 설문 변수 전달 — 변수 기반 백엔드 구성을 지원하기 위해 설문 변수를 plan/apply뿐만 아니라 init 단계로도 전달합니다. (#2554)
  • 추가 CLI 인수에서 Jinja2 참조 — 템플릿 구문(예: -l {{ hosts }})을 사용하여 추가 CLI 인수 필드에서 설문 및 환경 변수를 참조할 수 있습니다. (#1053)
  • 실행 준비 단계의 환경 변수 — 작업 실행 중뿐만 아니라 준비 단계(예: galaxy install, Git 역할 인증) 중에도 환경 변수를 사용할 수 있도록 합니다. (#3178)
  • 저장소 파일에서 extra-vars 로드 — UI의 인라인 대신 저장소의 JSON/YAML 파일에서 extra-vars 로드를 지원하여 GitOps 워크플로를 활성화합니다. (#2343)
  • API를 통한 런타임 환경 재정의 — API를 통해 작업을 실행할 때 다른 변수 그룹을 전달할 수 있습니다. (#1367, #3291)

Pro

  • 복잡한 설문 변수 유형 — 구조화된 JSON 배열로 전달되는 동적 객체 목록 설문 변수(예: VLAN 구성)를 지원합니다. (#3557)
  • 스케줄별 변수 재정의 — 동일한 템플릿이 다른 매개변수로 다른 스케줄에서 실행될 수 있도록 예약 작업에 사용자 정의 변수 값을 연결합니다. (#2378)
  • 사용자 컨텍스트의 동적 변수 값 — 로그인한 사용자의 ID(예: {{ current_user }})로 변수를 자동 채웁니다. (#2524, #909)

Enterprise

  • 변수를 비공개로 표시 — 실행 로그, 작업 히스토리 및 API 응답에 값이 표시되지 않도록 변수에 “비공개” 플래그를 추가합니다. (#2887)
  • 환경 변수 가시성 제한 — 변수 그룹 내용을 관리자 역할로만 제한하여 공유 프로젝트 템플릿에서 자격 증명 노출을 방지합니다. (#1126)
  • 빌드 수준 변수 스냅샷 — 작업 실행 시 변수 값을 스냅샷하여 재실행 시 현재 값이 아닌 원래 값을 사용합니다. (#1097)

사용자 소유 시크릿

버전 2.20

Semaphore의 키 저장소는 현재 모든 프로젝트 구성원이 공유합니다. 프로젝트 접근 권한이 있는 모든 사용자가 저장된 모든 자격 증명을 사용할 수 있으며, 경우에 따라 볼 수도 있습니다. 이는 팀 구성원이 자신의 자격 증명에만 접근해야 하는 다중 사용자 환경에서 보안 문제를 야기합니다. 또한 키 저장소에는 암호화, 시크릿 업데이트, 참조 무결성과 관련된 여러 버그가 있으며, 외부 시크릿 관리 시스템과의 통합이 부족합니다.

Community

  • 개인 키 저장소 — 개인 자격 증명(SSH 키, sudo 비밀번호)이 다른 프로젝트 구성원과 격리되고 프로젝트 수준 키 저장소를 통해 공유되지 않도록 사용자별 키 저장소를 제공합니다. (#1483, #1373)
  • 시크릿 업데이트 동작 수정 — 시크릿 환경 변수를 편집하면 성공한 것처럼 보이지만 실제로 값이 저장되지 않는 문제를 해결합니다. (#2546)
  • 프로세스 목록에서 시크릿 숨기기 — OS 프로세스 목록에 표시되는 명령줄 인수를 통해 시크릿 extra-vars를 전달하는 것을 중지합니다. 보안 메커니즘(예: 임시 파일, stdin)을 사용합니다. (#3219)
  • 키 저장소의 SSH 인증서 지원 — 인증서 기반 인증 워크플로를 위해 SSH 키와 함께 SSH 인증서를 저장할 수 있습니다. (#3171)
  • SSH 공개 키 표시 — 편의를 위해 키 저장소 UI에 저장된 SSH 키의 공개 키 부분을 표시합니다. (#1643)
  • Docker 시크릿 지원_FILE env var 패턴(예: POSTGRES_PASSWORD_FILE)을 지원하여 환경 변수를 통해 전달하는 대신 Docker/Kubernetes 시크릿을 마운트하고 읽을 수 있습니다. (#1268)
  • Docker에서 암호화 키 처리 수정SEMAPHORE_ACCESS_KEY_ENCRYPTION env var가 존중되고 컨테이너 재시작 시 임의의 키로 덮어쓰이지 않도록 합니다. (#2228, #3068, #3204)
  • 키 저장소 이름 변경 시 참조 깨짐 수정 — 키 저장소 항목의 이름을 변경하면 연결된 모든 인벤토리와 템플릿이 깨지는 문제를 해결합니다. (#3188)
  • Vault 비밀번호 API 수정 — 중복 키 제약 조건 오류 없이 REST API를 통해 Ansible Vault 비밀번호를 설정 및 업데이트할 수 있습니다. (#3413, #2773)

Pro

  • 외부 시크릿 저장소 통합 — Semaphore 데이터베이스에 시크릿을 저장하는 대신 런타임에 HashiCorp Vault, Azure Key Vault, AWS KMS 또는 Bitwarden에서 가져옵니다. (#2248, #658)

Enterprise

  • 글로벌 접근 키 — 중앙 관리 및 프로젝트 간 연결을 통해 키 저장소 항목을 프로젝트 간에 중복 없이 공유합니다. (#110)
  • 시크릿 접근 감사 추적 — 컴플라이언스 및 포렌식을 위해 키 저장소 항목 및 시크릿 변수의 모든 접근 및 사용을 기록합니다.

워크플로우

버전 2.21

Semaphore는 현재 각 작업 템플릿을 독립적인 단위로 취급합니다 — 여러 템플릿을 다단계 실행 파이프라인으로 연결하는 내장 방법이 없습니다. 이 기능은 워크플로우를 도입합니다 — 조건부 분기, 단계 간 변수 전달, 선택적 인간 승인 게이트를 갖춘 작업 템플릿의 방향 비순환 그래프(DAG)입니다. 설계는 AWX Workflow Job Templates, Rundeck 작업 워크플로우, Jenkins/GitLab CI 파이프라인 개념을 참고합니다.

Community

  • 워크플로우 템플릿 — 조건(on_success, on_failure, always)이 있는 방향 간선으로 연결된 작업 템플릿 노드의 DAG를 정의하는 새로운 최상위 엔티티를 도입하여 프로젝트 내에서 다단계 자동화 파이프라인을 가능하게 합니다. (#3182, #2334, #1383, #836)
  • 워크플로우 실행 엔진 — 간선 조건을 준수하고 독립적인 분기를 병렬로 실행하며, 여러 부모를 가진 노드에 ALL 수렴을 적용하여 토폴로지 순서로 워크플로우 노드를 실행합니다. (#2281, #3088)
  • 워크플로우 실행 대시보드 — 노드별 상태(대기 중, 실행 중, 성공, 실패, 건너뜀)가 표시된 DAG 그래프, 클릭 가능한 노드 로그, 전체 타이밍을 보여주는 워크플로우 실행의 통합 뷰를 제공합니다.
  • 노드 간 변수 전달 — 작업 템플릿이 출력 변수를 생성(알려진 파일 또는 Ansible set_stats 경유)하고 하위 노드에 추가 변수로 자동 주입할 수 있도록 합니다. (#3182)
  • 워크플로우 스케줄링 및 API 트리거 — 워크플로우의 cron 스케줄링, API 트리거 실행, webhook 트리거를 지원하며 워크플로우 수준의 선택적 설문 변수를 포함합니다. (#3088)

Pro

  • 비주얼 워크플로우 편집기 — 실시간 DAG 검증, 노드 위치 지정, 간선의 조건 선택기를 갖춘 UI에서 워크플로우를 설계하는 드래그 앤 드롭 그래픽 편집기.
  • 노드별 오버라이드 — 워크플로우 노드 수준에서 템플릿의 인벤토리, 자격 증명, 변수 그룹 또는 CLI 인수를 오버라이드하여 단일 워크플로우 내에서 다른 환경 간에 동일한 템플릿을 재사용할 수 있습니다.
  • 승인 게이트 — 구성 가능한 타임아웃, 승인자 알림, UI 또는 API에서의 승인/거부 작업을 통해 지정된 지점에서 워크플로우 실행을 일시 중지하고 인간의 승인을 기다립니다.

Enterprise

  • 워크플로우 RBAC — 워크플로우 생성, 편집, 실행, 승인을 위한 세분화된 권한, 역할 기반 승인 게이트 할당 및 감사 로깅.
  • 프로젝트 간 워크플로우 — 워크플로우에서 다른 프로젝트의 작업 템플릿을 참조하여 인프라, 애플리케이션, 모니터링 프로젝트에 걸친 조직 전체 자동화 파이프라인을 가능하게 합니다.
  • 워크플로우 버전 관리 및 롤백 — diff가 포함된 워크플로우 정의의 버전 기록을 유지하고, 이전 버전을 복원하며, 각 실행에 사용된 버전을 기록합니다.