3.4 KiB
3.4 KiB
Milestone: Jenkins 로그인과 credential 수명주기
위치
- Roadmap:
agent-roadmap/ROADMAP.md - Phase:
agent-roadmap/phase/usable-mvp/PHASE.md
목표
AppSok이 Jenkins에 접근할 수 있는 사용자인지 확인하고, 사용자별 권한으로 Jenkins API를 호출할 credential을 안전하게 저장한다. MVP에서는 수동 API token 입력 또는 WebView 기반 token 자동 발급 중 하나를 선택해 UX와 보안 균형을 맞춘다.
상태
[계획]
승격 조건
- 없음
구현 잠금
- 상태: 잠금
- 잠금 해제 조건: 사용자 리뷰에서 아래 항목을 승인하거나 방향을 결정할 때까지 credential 구현 방식을 확정하지 않는다.
- 결정 필요: 사용자 리뷰 체크리스트
- MVP 인증 방식을
수동 API token 입력으로 시작할지,Jenkins WebView 로그인 후 token 자동 발급으로 시작할지 결정한다. - Jenkins에서 사용자별 API token 자동 발급 endpoint와 crumb 발급 흐름을 사용할 수 있는지 확인한다.
- WebView 로그인 방식이 사내 보안 리뷰에서 허용 가능한지 확인한다.
- MVP 인증 방식을
범위
- Jenkins base URL과 username/API token 저장
- credential 저장/삭제/검증 UI
/whoAmI또는 사용자 API 호출 기반 로그인 상태 확인- macOS Keychain 저장과 로그 redaction
기능
Epic: [manual-token] 수동 token MVP
사용자가 직접 만든 Jenkins API token을 AppSok에 저장하고 검증한다.
- [settings-form] Jenkins base URL, username, API token 입력과 저장 UI를 제공한다.
- [keychain-store] credential을
TokenStore를 통해 macOS Keychain에 저장하고 삭제할 수 있다. 검증: mock storage 기반 unit test에서 save/read/clear가 통과한다. - [whoami-check] 저장된 credential로 Jenkins 사용자 확인 API를 호출해 로그인 상태를 표시한다.
- [redaction] API token이 화면 오류, debug log, test fixture에 원문으로 남지 않도록 처리한다.
Epic: [web-login] WebView 자동 token 후보
수동 token UX가 부담스러운 경우를 대비해 Jenkins 로그인 세션에서 token 발급을 자동화할 수 있는 구조를 둔다.
- [login-webview] Jenkins 로그인 URL을 WebView로 열고 로그인 완료를 감지하는 화면 흐름을 설계한다.
- [crumb-token] WebView same-origin 요청으로 crumb와 generate token 호출 후보를 검증한다.
- [fallback] WebView 자동화가 실패하면 수동 token 입력으로 돌아갈 수 있다.
완료 리뷰
- 상태: 없음
- 요청일: 없음
- 완료 근거: 모든 기능 Task와 Task 안에 명시된 검증 충족 후 기록한다.
- 리뷰 필요:
- 사용자가 완료 결과를 확인했다
- archive 이동을 승인했다
- 리뷰 코멘트: 없음
범위 제외
- LDAP 직접 연동
- 공용 Jenkins API token 내장
- Auth Broker 또는 Jenkins plugin 구현
작업 컨텍스트
- 관련 경로:
lib/src/features/settings/,lib/src/services/token_store.dart,lib/src/services/jenkins_client.dart,macos/Runner/*.entitlements - 표준선(선택): 사용자별 Jenkins 권한과 Keychain 저장을 기본 전제로 한다.
- 선행 작업: 제품 골격 안정화
- 후속 작업: Artifact 탐색과 다운로드
- 확인 필요: 구현 잠금의 사용자 리뷰 체크리스트가 MVP 인증 방식, Jenkins token 자동 발급 가능 여부, WebView 로그인 허용 여부를 다룬다.