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.
- yw_jenkins_cli-0.1.0/.gitignore +21 -0
- yw_jenkins_cli-0.1.0/PKG-INFO +134 -0
- yw_jenkins_cli-0.1.0/README.md +121 -0
- yw_jenkins_cli-0.1.0/pyproject.toml +24 -0
- yw_jenkins_cli-0.1.0/setup.sh +136 -0
- yw_jenkins_cli-0.1.0/skill/SKILL.md +120 -0
- yw_jenkins_cli-0.1.0/src/jenkins_cli/__init__.py +3 -0
- yw_jenkins_cli-0.1.0/src/jenkins_cli/cli.py +348 -0
- yw_jenkins_cli-0.1.0/src/jenkins_cli/client.py +401 -0
- yw_jenkins_cli-0.1.0/src/jenkins_cli/config.py +98 -0
- yw_jenkins_cli-0.1.0/tests/__init__.py +0 -0
|
@@ -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 .`
|