yw-jenkins-cli 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ # Byte-compiled
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.egg-info/
6
+ dist/
7
+ build/
8
+ *.egg
9
+
10
+ # Environment
11
+ .env
12
+ .venv/
13
+
14
+ # IDE
15
+ .idea/
16
+ .vscode/
17
+ *.swp
18
+ *.swo
19
+
20
+ # Credentials (never commit!)
21
+ .jenkins-ywwl
@@ -0,0 +1,134 @@
1
+ Metadata-Version: 2.4
2
+ Name: yw-jenkins-cli
3
+ Version: 0.1.0
4
+ Summary: A simple Jenkins CI/CD CLI tool for triggering builds, monitoring status, and streaming logs
5
+ License-Expression: MIT
6
+ Requires-Python: >=3.11
7
+ Requires-Dist: click>=8.0
8
+ Requires-Dist: httpx>=0.28.0
9
+ Provides-Extra: dev
10
+ Requires-Dist: pytest; extra == 'dev'
11
+ Requires-Dist: ruff; extra == 'dev'
12
+ Description-Content-Type: text/markdown
13
+
14
+ # yw-cicd — Jenkins CI/CD CLI
15
+
16
+ 简洁的 Jenkins 命令行工具,一条命令管理构建部署。支持任意 Jenkins 实例。
17
+
18
+ ## 安装
19
+
20
+ ```bash
21
+ pip install yw-jenkins-cli
22
+ ```
23
+
24
+ ## 配置
25
+
26
+ 首次使用需要配置 Jenkins 连接信息(三选一):
27
+
28
+ **方式一:配置文件(推荐)**
29
+
30
+ ```bash
31
+ cat > ~/.jenkins-cli << 'EOF'
32
+ JENKINS_URL=https://your-jenkins.example.com
33
+ JENKINS_USER=your-username
34
+ JENKINS_TOKEN=your-api-token
35
+ EOF
36
+ chmod 600 ~/.jenkins-cli
37
+ ```
38
+
39
+ **方式二:环境变量**
40
+
41
+ ```bash
42
+ export JENKINS_URL="https://your-jenkins.example.com"
43
+ export JENKINS_USER="your-username"
44
+ export JENKINS_TOKEN="your-api-token"
45
+ ```
46
+
47
+ **方式三:一键安装脚本**(从源码安装时,自动引导配置)
48
+
49
+ ```bash
50
+ git clone <repo-url> && cd yw-jenkins-cli && bash setup.sh
51
+ ```
52
+
53
+ > **API Token 获取方式**: 打开 `<你的Jenkins>/me/configure` → API Token → Add new Token
54
+
55
+ 验证配置:
56
+
57
+ ```bash
58
+ yw-cicd auth
59
+ ```
60
+
61
+ ## 命令一览
62
+
63
+ ```bash
64
+ yw-cicd list [FILTER] # 列出任务(支持正则过滤)
65
+ yw-cicd info <任务名> # 查看任务参数
66
+ yw-cicd build <任务名> K=V ... # 触发构建
67
+ yw-cicd status <任务名> [构建号] # 查看构建状态
68
+ yw-cicd history <任务名> [-n N] # 构建历史
69
+ yw-cicd log <任务名> <构建号> # 查看构建日志
70
+ yw-cicd stop <任务名> <构建号> # 停止构建
71
+ yw-cicd auth # 验证认证
72
+ ```
73
+
74
+ ## 常见场景
75
+
76
+ ### 部署项目
77
+
78
+ ```bash
79
+ # 1. 查看有哪些参数
80
+ yw-cicd info my-web-project
81
+
82
+ # 2. 触发构建(等待完成 + 实时日志)
83
+ yw-cicd build my-web-project ENV=test BranchName=master --follow-log
84
+ ```
85
+
86
+ ### 查看最近构建
87
+
88
+ ```bash
89
+ yw-cicd history my-web-project -n 5
90
+ ```
91
+
92
+ ### 排查构建失败
93
+
94
+ ```bash
95
+ yw-cicd status my-web-project # 查看最近状态
96
+ yw-cicd log my-web-project 42 # 查看失败日志
97
+ ```
98
+
99
+ ### 搜索任务
100
+
101
+ ```bash
102
+ yw-cicd list order # 搜索包含 "order" 的任务
103
+ yw-cicd list "web|frontend" # 正则搜索
104
+ ```
105
+
106
+ ## Claude Code 集成
107
+
108
+ 项目附带 Claude Code Skill(`skill/SKILL.md`),安装后可在 Claude Code 中直接对话操作 Jenkins:
109
+
110
+ ```bash
111
+ # 安装 Skill
112
+ mkdir -p ~/.claude/skills/yw-cicd
113
+ cp skill/SKILL.md ~/.claude/skills/yw-cicd/
114
+ ```
115
+
116
+ 之后直接对 Claude 说:
117
+ - "部署 my-project 到 test 环境"
118
+ - "查看 xxx 最近的构建"
119
+ - "构建失败了,帮我看下日志"
120
+
121
+ ## 项目结构
122
+
123
+ ```
124
+ yw-jenkins-cli/
125
+ ├── setup.sh # 一键安装脚本
126
+ ├── pyproject.toml
127
+ ├── src/jenkins_cli/
128
+ │ ├── cli.py # CLI 入口(click)
129
+ │ ├── client.py # Jenkins API 客户端(httpx)
130
+ │ └── config.py # 认证配置
131
+ ├── skill/
132
+ │ └── SKILL.md # Claude Code Skill
133
+ └── tests/
134
+ ```
@@ -0,0 +1,121 @@
1
+ # yw-cicd — Jenkins CI/CD CLI
2
+
3
+ 简洁的 Jenkins 命令行工具,一条命令管理构建部署。支持任意 Jenkins 实例。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ pip install yw-jenkins-cli
9
+ ```
10
+
11
+ ## 配置
12
+
13
+ 首次使用需要配置 Jenkins 连接信息(三选一):
14
+
15
+ **方式一:配置文件(推荐)**
16
+
17
+ ```bash
18
+ cat > ~/.jenkins-cli << 'EOF'
19
+ JENKINS_URL=https://your-jenkins.example.com
20
+ JENKINS_USER=your-username
21
+ JENKINS_TOKEN=your-api-token
22
+ EOF
23
+ chmod 600 ~/.jenkins-cli
24
+ ```
25
+
26
+ **方式二:环境变量**
27
+
28
+ ```bash
29
+ export JENKINS_URL="https://your-jenkins.example.com"
30
+ export JENKINS_USER="your-username"
31
+ export JENKINS_TOKEN="your-api-token"
32
+ ```
33
+
34
+ **方式三:一键安装脚本**(从源码安装时,自动引导配置)
35
+
36
+ ```bash
37
+ git clone <repo-url> && cd yw-jenkins-cli && bash setup.sh
38
+ ```
39
+
40
+ > **API Token 获取方式**: 打开 `<你的Jenkins>/me/configure` → API Token → Add new Token
41
+
42
+ 验证配置:
43
+
44
+ ```bash
45
+ yw-cicd auth
46
+ ```
47
+
48
+ ## 命令一览
49
+
50
+ ```bash
51
+ yw-cicd list [FILTER] # 列出任务(支持正则过滤)
52
+ yw-cicd info <任务名> # 查看任务参数
53
+ yw-cicd build <任务名> K=V ... # 触发构建
54
+ yw-cicd status <任务名> [构建号] # 查看构建状态
55
+ yw-cicd history <任务名> [-n N] # 构建历史
56
+ yw-cicd log <任务名> <构建号> # 查看构建日志
57
+ yw-cicd stop <任务名> <构建号> # 停止构建
58
+ yw-cicd auth # 验证认证
59
+ ```
60
+
61
+ ## 常见场景
62
+
63
+ ### 部署项目
64
+
65
+ ```bash
66
+ # 1. 查看有哪些参数
67
+ yw-cicd info my-web-project
68
+
69
+ # 2. 触发构建(等待完成 + 实时日志)
70
+ yw-cicd build my-web-project ENV=test BranchName=master --follow-log
71
+ ```
72
+
73
+ ### 查看最近构建
74
+
75
+ ```bash
76
+ yw-cicd history my-web-project -n 5
77
+ ```
78
+
79
+ ### 排查构建失败
80
+
81
+ ```bash
82
+ yw-cicd status my-web-project # 查看最近状态
83
+ yw-cicd log my-web-project 42 # 查看失败日志
84
+ ```
85
+
86
+ ### 搜索任务
87
+
88
+ ```bash
89
+ yw-cicd list order # 搜索包含 "order" 的任务
90
+ yw-cicd list "web|frontend" # 正则搜索
91
+ ```
92
+
93
+ ## Claude Code 集成
94
+
95
+ 项目附带 Claude Code Skill(`skill/SKILL.md`),安装后可在 Claude Code 中直接对话操作 Jenkins:
96
+
97
+ ```bash
98
+ # 安装 Skill
99
+ mkdir -p ~/.claude/skills/yw-cicd
100
+ cp skill/SKILL.md ~/.claude/skills/yw-cicd/
101
+ ```
102
+
103
+ 之后直接对 Claude 说:
104
+ - "部署 my-project 到 test 环境"
105
+ - "查看 xxx 最近的构建"
106
+ - "构建失败了,帮我看下日志"
107
+
108
+ ## 项目结构
109
+
110
+ ```
111
+ yw-jenkins-cli/
112
+ ├── setup.sh # 一键安装脚本
113
+ ├── pyproject.toml
114
+ ├── src/jenkins_cli/
115
+ │ ├── cli.py # CLI 入口(click)
116
+ │ ├── client.py # Jenkins API 客户端(httpx)
117
+ │ └── config.py # 认证配置
118
+ ├── skill/
119
+ │ └── SKILL.md # Claude Code Skill
120
+ └── tests/
121
+ ```
@@ -0,0 +1,24 @@
1
+ [project]
2
+ name = "yw-jenkins-cli"
3
+ version = "0.1.0"
4
+ description = "A simple Jenkins CI/CD CLI tool for triggering builds, monitoring status, and streaming logs"
5
+ readme = "README.md"
6
+ license = "MIT"
7
+ requires-python = ">=3.11"
8
+ dependencies = [
9
+ "click>=8.0",
10
+ "httpx>=0.28.0",
11
+ ]
12
+
13
+ [project.scripts]
14
+ yw-cicd = "jenkins_cli.cli:cli"
15
+
16
+ [build-system]
17
+ requires = ["hatchling"]
18
+ build-backend = "hatchling.build"
19
+
20
+ [tool.hatch.build.targets.wheel]
21
+ packages = ["src/jenkins_cli"]
22
+
23
+ [project.optional-dependencies]
24
+ dev = ["pytest", "ruff"]
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env bash
2
+ # yw-cicd 一键安装脚本
3
+ # 用法: bash setup.sh
4
+ set -euo pipefail
5
+
6
+ GREEN='\033[0;32m'
7
+ YELLOW='\033[1;33m'
8
+ RED='\033[0;31m'
9
+ NC='\033[0m'
10
+
11
+ info() { echo -e "${GREEN}✓${NC} $1"; }
12
+ warn() { echo -e "${YELLOW}⚠${NC} $1"; }
13
+ error() { echo -e "${RED}✗${NC} $1"; }
14
+
15
+ REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
+ SKILL_DIR="$HOME/.claude/skills/yw-cicd"
17
+ CONFIG_FILE="$HOME/.jenkins-cli"
18
+
19
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
20
+ echo " yw-cicd 安装向导"
21
+ echo " Jenkins CI/CD CLI"
22
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
23
+ echo
24
+
25
+ # ── Step 1: 检查 Python ──────────────────────────────────────────
26
+ echo "【1/4】检查 Python 环境..."
27
+ if ! command -v python3 &>/dev/null; then
28
+ error "未找到 python3,请先安装 Python 3.11+"
29
+ exit 1
30
+ fi
31
+
32
+ PY_VERSION=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
33
+ PY_MAJOR=$(echo "$PY_VERSION" | cut -d. -f1)
34
+ PY_MINOR=$(echo "$PY_VERSION" | cut -d. -f2)
35
+
36
+ if [[ "$PY_MAJOR" -lt 3 ]] || [[ "$PY_MAJOR" -eq 3 && "$PY_MINOR" -lt 11 ]]; then
37
+ error "Python 版本 $PY_VERSION 过低,需要 3.11+"
38
+ exit 1
39
+ fi
40
+ info "Python $PY_VERSION"
41
+
42
+ # ── Step 2: 安装 CLI ─────────────────────────────────────────────
43
+ echo
44
+ echo "【2/4】安装 yw-cicd CLI..."
45
+ cd "$REPO_DIR"
46
+ pip install -e . -q 2>&1 | tail -1
47
+ if command -v yw-cicd &>/dev/null; then
48
+ info "CLI 安装成功: $(which yw-cicd)"
49
+ else
50
+ error "CLI 安装失败,请检查 pip 输出"
51
+ exit 1
52
+ fi
53
+
54
+ # ── Step 3: 配置认证 ─────────────────────────────────────────────
55
+ echo
56
+ echo "【3/4】配置 Jenkins 认证..."
57
+
58
+ if [[ -f "$CONFIG_FILE" ]]; then
59
+ info "已有配置文件: $CONFIG_FILE"
60
+ if yw-cicd auth &>/dev/null; then
61
+ info "认证有效"
62
+ else
63
+ warn "配置文件存在但认证失败,请重新配置"
64
+ rm -f "$CONFIG_FILE"
65
+ fi
66
+ fi
67
+
68
+ if [[ ! -f "$CONFIG_FILE" ]]; then
69
+ echo
70
+ read -rp " 请输入 Jenkins URL (如 https://jenkins.example.com): " jenkins_url
71
+ echo
72
+ echo " 请在浏览器打开: ${jenkins_url}/me/configure"
73
+ echo " → 找到 API Token 部分 → 点击 Add new Token → 复制 token"
74
+ echo
75
+ read -rp " 请输入你的 Jenkins 用户名: " jenkins_user
76
+ read -rp " 请输入你的 API Token: " jenkins_token
77
+
78
+ if [[ -z "$jenkins_url" || -z "$jenkins_user" || -z "$jenkins_token" ]]; then
79
+ error "URL、用户名和 Token 不能为空"
80
+ exit 1
81
+ fi
82
+
83
+ # 去掉末尾斜杠
84
+ jenkins_url="${jenkins_url%/}"
85
+
86
+ cat > "$CONFIG_FILE" << EOF
87
+ JENKINS_URL=${jenkins_url}
88
+ JENKINS_USER=${jenkins_user}
89
+ JENKINS_TOKEN=${jenkins_token}
90
+ EOF
91
+ chmod 600 "$CONFIG_FILE"
92
+ info "配置已写入: $CONFIG_FILE (权限 600)"
93
+
94
+ if yw-cicd auth &>/dev/null; then
95
+ FULL_NAME=$(yw-cicd auth 2>/dev/null | python3 -c "import sys,json; print(json.load(sys.stdin)['fullName'])" 2>/dev/null || echo "")
96
+ info "认证成功!欢迎, ${FULL_NAME:-$jenkins_user}"
97
+ else
98
+ error "认证失败,请检查 URL、用户名和 Token 是否正确"
99
+ rm -f "$CONFIG_FILE"
100
+ exit 1
101
+ fi
102
+ fi
103
+
104
+ # ── Step 4: 安装 Claude Code Skill (可选) ────────────────────────
105
+ echo
106
+ echo "【4/4】安装 Claude Code Skill..."
107
+
108
+ if command -v claude &>/dev/null; then
109
+ mkdir -p "$SKILL_DIR"
110
+ if [[ -f "$REPO_DIR/skill/SKILL.md" ]]; then
111
+ cp "$REPO_DIR/skill/SKILL.md" "$SKILL_DIR/SKILL.md"
112
+ info "Skill 已安装到: $SKILL_DIR"
113
+ else
114
+ warn "Skill 文件未找到,跳过 (不影响 CLI 使用)"
115
+ fi
116
+ else
117
+ warn "未检测到 Claude Code,跳过 Skill 安装 (不影响 CLI 使用)"
118
+ fi
119
+
120
+ # ── 完成 ─────────────────────────────────────────────────────────
121
+ echo
122
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
123
+ echo " ✅ 安装完成!"
124
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
125
+ echo
126
+ echo " 常用命令:"
127
+ echo " yw-cicd list # 列出所有任务"
128
+ echo " yw-cicd list <关键词> # 按关键词搜索"
129
+ echo " yw-cicd info <任务名> # 查看构建参数"
130
+ echo " yw-cicd build <任务名> KEY=VALUE ..."
131
+ echo " yw-cicd status <任务名> # 最近一次构建状态"
132
+ echo " yw-cicd history <任务名> # 构建历史"
133
+ echo " yw-cicd log <任务名> <构建号>"
134
+ echo
135
+ echo " 更多用法: yw-cicd --help"
136
+ echo
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: yw-cicd
3
+ description: |
4
+ Jenkins CI/CD 操作工具(cicd.ywwl.com),通过 yw-cicd CLI 管理构建与部署。
5
+ 触发:用户提到"部署"、"发布"、"构建"、"deploy"、"build"、"trigger" + 项目名;
6
+ "构建状态"、"构建日志"、"构建历史"、"build status"、"build log";
7
+ "停止构建"、"取消构建"、"stop build"、"abort build";
8
+ "列出 Jenkins 任务"、"list Jenkins jobs"、"Jenkins 上有哪些项目";
9
+ 或出现 DEV-WEB-*、DEV-e-commerce-*、TEST_DEV-WEB-* 等任务名前缀时触发。
10
+ 不触发:GitHub Release 发布流程(使用 release skill);与 cicd.ywwl.com 无关的 CI/CD 讨论。
11
+ ---
12
+
13
+ # Jenkins CI/CD 操作 (cicd.ywwl.com)
14
+
15
+ 通过 `yw-cicd` CLI 工具操作 Jenkins。所有命令输出结构化 JSON。
16
+
17
+ ## 前置检查
18
+
19
+ 每次操作前确认:
20
+
21
+ ```bash
22
+ # 1. CLI 是否可用
23
+ which yw-cicd || (cd ~/Development/projects/self/yw-jenkins-cli && pip install -e .)
24
+
25
+ # 2. 认证是否有效
26
+ yw-cicd auth
27
+ ```
28
+
29
+ 认证失败时,引导用户:
30
+ - 创建 API Token: https://cicd.ywwl.com/me/configure → API Token → Add new Token
31
+ - 配置到 `~/.jenkins-ywwl` 或环境变量 `JENKINS_USER` / `JENKINS_TOKEN`
32
+
33
+ ## 命令速查
34
+
35
+ | 命令 | 用途 | 示例 |
36
+ |------|------|------|
37
+ | `yw-cicd list [FILTER]` | 列出任务(正则过滤)| `yw-cicd list DEV-WEB` |
38
+ | `yw-cicd info JOB` | 查看任务参数 | `yw-cicd info DEV-WEB-xiaoy-zhibo-wx` |
39
+ | `yw-cicd build JOB [PARAMS...]` | 触发构建 | `yw-cicd build JOB ENV=test BranchName=master` |
40
+ | `yw-cicd status JOB [NUMBER]` | 构建状态 | `yw-cicd status JOB` (默认最近一次) |
41
+ | `yw-cicd history JOB [-n N]` | 构建历史 | `yw-cicd history JOB -n 5` |
42
+ | `yw-cicd log JOB NUMBER [--follow]` | 构建日志 | `yw-cicd log JOB 42 --follow` |
43
+ | `yw-cicd stop JOB NUMBER` | 停止构建 | `yw-cicd stop JOB 42` |
44
+ | `yw-cicd auth` | 验证认证 | `yw-cicd auth` |
45
+
46
+ ## 核心工作流
47
+
48
+ ### 工作流 1: 触发构建并监控(部署/发布)
49
+
50
+ 这是最常见的操作,**必须按顺序执行**:
51
+
52
+ 1. **获取任务参数** — `yw-cicd info <job>`
53
+ 2. **展示参数给用户确认** — 列出所有参数的 choices/默认值,让用户选择
54
+ 3. **用户确认后触发** — `yw-cicd build <job> KEY1=val1 KEY2=val2 --wait --follow-log`
55
+ - `--wait`: 等待构建完成(默认)
56
+ - `--follow-log`: 实时流式输出日志
57
+ - `--no-wait`: 仅触发不等待
58
+ 4. **报告结果** — 成功/失败 + 耗时
59
+
60
+ **关键规则**: 触发构建前 **必须** 先 `info` 展示参数,与用户确认后才执行。这是不可逆操作。
61
+
62
+ ### 工作流 2: 查看构建状态/历史
63
+
64
+ ```bash
65
+ # 最近一次构建
66
+ yw-cicd status <job>
67
+
68
+ # 最近 N 次构建
69
+ yw-cicd history <job> -n 5
70
+ ```
71
+
72
+ ### 工作流 3: 排查构建失败
73
+
74
+ 1. `yw-cicd history <job>` — 找到失败的构建号
75
+ 2. `yw-cicd log <job> <number>` — 获取完整日志
76
+ 3. 分析日志中的错误信息,向用户解释原因和建议
77
+
78
+ ### 工作流 4: 停止构建
79
+
80
+ 1. `yw-cicd status <job>` — 确认 `building: true`
81
+ 2. 与用户确认是否停止(不可逆)
82
+ 3. `yw-cicd stop <job> <number>`
83
+ 4. 再次 `status` 确认已停止
84
+
85
+ ## 决策树
86
+
87
+ ```
88
+ 用户请求
89
+ ├─ 提到具体任务名
90
+ │ ├─ "部署/发布/构建/build/deploy" → 工作流 1(触发构建)
91
+ │ ├─ "状态/结果/status" → 工作流 2(查看状态)
92
+ │ ├─ "日志/log/报错/失败" → 工作流 3(排查失败)
93
+ │ ├─ "停止/取消/stop/abort" → 工作流 4(停止构建)
94
+ │ └─ "参数/详情/info" → yw-cicd info
95
+ ├─ 未提到具体任务名
96
+ │ ├─ "列出/list/有哪些" → yw-cicd list
97
+ │ ├─ "搜索/查找 xxx" → yw-cicd list <filter>
98
+ │ └─ 模糊描述 → 先 yw-cicd list 帮用户定位任务名
99
+ └─ 讨论性问题 → 直接回答,不调用命令
100
+ ```
101
+
102
+ ## 任务命名规范
103
+
104
+ | 前缀 | 含义 |
105
+ |------|------|
106
+ | `DEV-WEB-*` | 前端 Web 项目(开发/测试环境)|
107
+ | `DEV-WEB-ywCloud-*` | 云平台相关前端 |
108
+ | `DEV-WEB-YWFE-BIZ-*` | 业务前端项目 |
109
+ | `DEV-e-commerce-*` | 电商相关项目 |
110
+ | `TEST_DEV-WEB-*` | 测试环境变体 |
111
+ | 中文名(如 `cdn刷新`)| 特殊工具类任务 |
112
+
113
+ 用户提到项目名但未使用完整前缀时,用 `yw-cicd list <关键词>` 模糊匹配。
114
+
115
+ ## 错误处理
116
+
117
+ - **认证失败 (401/403)**: 引导用户检查 `~/.jenkins-ywwl` 或到 `/me/configure` 重新生成 Token
118
+ - **任务不存在 (404)**: 用 `yw-cicd list` 搜索相似名称
119
+ - **队列超时**: 提示执行器可能繁忙,建议查看 Jenkins 面板
120
+ - **CLI 未安装**: `cd ~/Development/projects/self/yw-jenkins-cli && pip install -e .`
@@ -0,0 +1,3 @@
1
+ """Jenkins CI/CD CLI tool for cicd.ywwl.com."""
2
+
3
+ __version__ = "0.1.0"