multica-platform-jenkins · git:20260910.8db057c · 2026-09-10 · sha256 113993e9f60a08c4

multica-platform-jenkins git:20260910.8db057cA

Immutable. This exact content is served forever at /api/v1/blob/113993e9f60a08c4.

---
name: multica-platform-jenkins
description: Jenkins 读写:触发带参构建、轮询状态、取控制台日志。平台 skill,凭据共用域账号。Python 实现,Windows / Linux 通用。
metadata:
  credentials:
    priority:
      - ATLASSIAN_USER / ATLASSIAN_PASS
      - ATLASSIAN_USER / ATLASSIAN_PASS
      - JENKINS_USER / JENKINS_PASSWORD
  runtime:
    python: ">=3.10"
    deps: scripts/requirements.txt
---

# Platform · Jenkins

## Purpose

Jenkins **读 + 写**能力:触发 Job、轮询构建、取 `consoleText`、回传构建 URL。

> **跨平台**:Python 3,Windows / Linux 一致。  
> **参数自动发现**:连 Jenkins API 读取每个 Job 的必填参数,禁止 Agent 硬编码参数名。

默认 Jenkins:`http://<JENKINS_URL>`

## Agent 标准流程(必读)

```text
1. 解析 service(jobs-catalog / issue_service_map)+ **deploy branch**(Issue「Git 分支」区块,非 feature)
2. discover(必做)— 默认从 lastSuccessfulBuild 复制参数,仅覆盖 deploy branch:
     python scripts/trigger_env.py --env sit --service <service> --branch release/<ISSUE>-<slug> --discover-only --json
3. ready=false → --param 补 missing 或 BLOCKED 问人类
4. 触发:multica-artifact-cicd-sync → trigger_cicd.py --json
```

**参数优先级**:`--param` > **分支 hint**(branchName 等)> **上次 SUCCESS 构建参数** > Jenkins 默认值

## Files

```text
multica-platform-jenkins/
├── SKILL.md
├── config.yaml
├── jobs-catalog.yaml     # dev/sit Job 全量清单(service → Job 名)
├── reference.md
├── .env.example
└── scripts/
    ├── trigger_env.py    # ★ 按 env + service 触发
    ├── list_jobs.py      # 列出 / 查询 Job
    ├── jenkins_cli.py    # 底层 API
    ├── build_sit.py      # 兼容别名 → trigger_env --env sit
    └── lib/
```

## 安装依赖(一次)

```bash
pip install -r scripts/requirements.txt
```

## 列出 Job

```bash
python scripts/list_jobs.py --env dev
python scripts/list_jobs.py --env sit --service <service>
```

## 发现参数(连 Jenkins,按 Job 实时拉取)

```bash
python scripts/jenkins_cli.py discover-params --env sit --service <service> --branch feature/<ISSUE_KEY>-foo --json
```

返回示例(节选):

```json
{
  "ready": true,
  "last_success": {
    "number": 795,
    "url": "http://<JENKINS_URL>/job/<JENKINS_JOB_NAME>/<BUILD_ID>/",
    "params": { "env": "sit", "deployVersion": "1.75.0_795", "branchName": "release/20260826" }
  },
  "parameters": [
    { "name": "branchName", "last_success_value": "release/20260826", "resolved": "feature/<ISSUE_KEY>-foo", "source": "hint:branch" },
    { "name": "deployVersion", "last_success_value": "1.75.0_795", "resolved": "1.75.0_795", "source": "last_success" }
  ]
}
```

## 触发构建(默认 auto-params)

```bash
python scripts/trigger_env.py --env sit --service <service> --branch feature/<ISSUE_KEY>-foo --json

# 补缺失参数
python scripts/trigger_env.py --env sit --service <service> --branch feature/... --param deployVersion=1.75.0_795 --json
```

## 凭据

| 变量 | 说明 |
| --- | --- |
| `ATLASSIAN_USER` / `ATLASSIAN_PASS` | 域账号(**优先**) |
| `JENKINS_USER` / `JENKINS_PASSWORD` | skill `.env` 回退 |
| `JENKINS_CURL_RESOLVE` | DNS 绕行 `host:port:ip`(见 `reference.md`) |

## 成功标准

- 脚本 exit code `0`
- 每个 build `result=SUCCESS`
- 回传构建 URL 列表

## 与编排 skill 的关系

| 编排 skill | 调用 |
| --- | --- |
| `multica-artifact-cicd-sync` | `trigger_cicd.py` → 内部调用本 skill 的 Python 脚本 |

## 为什么有效

Python + Jenkins API 参数发现:不同项目参数名不同,Agent 先 discover 再 trigger,避免写死 branchName。Job 名清单在 `jobs-catalog.yaml`。