import type { JenkinsConfig, JobInfo } from './types.js'; export type BackendRuntime = 'jdk8' | 'jdk17'; export type JenkinsProjectType = 'backend' | 'frontend' | 'all'; export interface JenkinsJobParameterDefinition { name: string; type?: string; choices?: string[]; defaultValue?: string; } export declare function normalizeBranchName(branch: string): string; export declare function toJenkinsBranchJobName(branch: string): string; export declare function toJenkinsBranchPathSegment(branch: string): string; export declare function extractProjectGitUrlFromConfigXml(xml: string): string | null; export declare class JenkinsClient { protected url: string; private auth; protected headers: Record; protected credentialsId?: string; private viewsCache; private jobsCache; private jobInfoCache; private branchesCache; private crumbCache; constructor(config: JenkinsConfig); private hasPausedInput; /** * 获取当前最新构建号。 */ private getLastBuildNumber; /** * 等待构建号出现(触发构建后 Jenkins 需要时间创建构建记录) */ private waitForBuildNumber; /** * 从 Jenkins queue item 中获取实际构建号。 */ private waitForQueueBuildNumber; private resolveTriggeredBuildNumber; /** * 获取 Jenkins CSRF Crumb Token * Jenkins 默认启用 CSRF 保护,POST 请求需要附带 crumb token */ protected getCrumb(): Promise<{ crumbRequestField: string; crumb: string; } | null>; listViews(): Promise; listJobs(view: string): Promise; getJobInfo(job: string): Promise; getProjectGitUrl(projectName: string): Promise; listBranches(job: string): Promise; getJobParameterDefinitions(project: string, branch?: string): Promise; build(project: string, branch: string, parameters?: Record): Promise; /** * 从 Git URL 解析项目名 * 支持格式: * - SSH: git@github.com:org/repo.git -> repo * - HTTPS: https://github.com/org/repo.git -> repo */ parseProjectName(gitUrl: string): string; /** * 检查项目是否存在 */ projectExists(name: string): Promise; /** * 创建 Jenkins 项目 */ private createProject; /** * 触发多分支项目的分支扫描 */ private triggerBranchScan; /** * 等待多分支项目的分支扫描完成 * @param projectName Jenkins 项目名 * @param options 选项 * @returns 扫描是否成功完成 */ waitForBranchScan(projectName: string, options?: { interval?: number; timeout?: number; }): Promise<{ success: boolean; branches: string[]; message: string; }>; /** * 确保项目存在,不存在则创建 * @param projectName Jenkins 项目名 * @param gitUrl Git 仓库地址 * @param type 项目类型:backend、frontend 或 all * @param waitForScan 是否等待分支扫描完成,默认 true * @returns 操作结果 */ ensureProject(projectName: string, gitUrl: string, type: JenkinsProjectType, waitForScan?: boolean, projectXml?: string): Promise<{ status: 'created' | 'already_exists' | 'failed'; message: string; url?: string; branches?: string[]; }>; /** * 获取构建状态 */ getBuildStatus(project: string, branch: string, buildNumber?: number): Promise<{ number: number; result: string | null; building: boolean; duration: number; url: string; timestamp: number; description?: string; actions?: any[]; } | null>; /** * 等待构建完成 */ waitForBuildCompletion(project: string, branch: string, buildNumber?: number, options?: { interval?: number; timeout?: number; onProgress?: (status: any) => void; }): Promise<{ status: 'SUCCESS' | 'FAILURE' | 'UNSTABLE' | 'ABORTED' | 'NOT_FOUND' | 'TIMEOUT' | 'PAUSED'; build_number: number; duration: number; url: string; message: string; }>; }