jenkins/pctPlugin Compatibility Tester (PCT) 是一个用于生成 Jenkins 插件与 Jenkins 核心版本兼容性矩阵的工具。注意:该镜像已不再发布,仅作历史参考用途。
适用于 Jenkins 插件开发者,在插件开发过程中测试插件与不同版本 Jenkins 核心的兼容性,验证插件在特定 Jenkins 版本下的功能正确性。
测试指定插件与最新 Jenkins 核心
克隆插件仓库并针对最新 Jenkins 核心版本运行 PCT:
shelldocker run -ti --rm -v maven-repo:/root/.m2 -v $(pwd)/out:/pct/out -e ARTIFACT_ID=ssh-slaves -e VERSION=ssh-slaves-1.24 jenkins/pct
测试指定插件与自定义 Jenkins WAR
针对指定 Jenkins WAR 文件(支持 SNAPSHOT 构建)测试插件最新版本:
shelldocker run -ti --rm -v maven-repo:/root/.m2 -v $(pwd)/out:/pct/out -v my/jenkins.war:/pct/jenkins.war:ro -e ARTIFACT_ID=ssh-slaves jenkins/pct
测试自定义 Jenkins 和插件版本
通过卷挂载自定义 Jenkins WAR 和插件源码进行测试:
shelldocker run -ti --rm -v maven-repo:/root/.m2 -v $(pwd)/out:/pct/out -v my/jenkins.war:/pct/jenkins.war:ro -v my/plugin:/pct/plugin-src:ro jenkins/pct
测试自定义仓库分支
针对自定义 Git 仓库的特定分支运行 PCT:
shelldocker run --rm -v maven-repo:/root/.m2 -v $(pwd)/out:/pct/out -e CHECKOUT_SRC=[***] -e VERSION=JENKINS-26374 jenkins/pct
若需测试 WAR 文件(如通过 Custom War Packager 生成)中包含的多个插件,可使用以下配置避免为每个插件启动新容器:
shelldocker run -ti --rm -v maven-repo:/root/.m2 -v $(pwd)/out:/pct/out -v my/jenkins.war:/pct/jenkins.war:ro -e ARTIFACT_ID=ssh-slaves,credentials -e DO_NOT_OVERRIDE_PCT_CHECKOUT=true jenkins/pct
PCT 提供 CLI 接口支持本地手动运行:
mvn clean installPLUGIN_SRC 目录mvn clean install -DskipTests 初始化 artifactsshelljava -jar target/plugins-compat-tester-cli.jar \ --working-dir $(pwd)/tmp/work \ --include-plugins ${PLUGIN_ARTIFACT_ID} \ --war jenkins.war --local-checkout-dir ${PLUGIN_SRC} \ --mvn ${PATH_TO_MAVEN}
执行 java -jar target/plugins-compat-tester-cli.jar -help 获取完整选项列表。
注意:目前同时测试多个插件需确保插件已发布,测试 SNAPSHOT 版本需为每个插件单独执行上述步骤。
shellmake demo TEST_JDK_HOME=${YOUR_JDK_HOME} PLUGIN_NAME=git
通过 JDK_VERSION 环境变量指定 Java 版本(镜像内置 Java 17 和 11):
shellmake demo-docker JDK_VERSION=17 PLUGIN_NAME=git
完整选项可参考 Makefile。
| 环境变量 | 描述 |
|---|---|
ARTIFACT_ID | 待测试插件的 artifact ID。若定义 CHECKOUT_SRC 或挂载 /pct/plugin-src,镜像可自动识别该 ID |
VERSION | 待检出和测试的标签/提交/分支,默认值为 master |
CHECKOUT_SRC | 自定义 Git 克隆源(如 [***]),默认值为 [***]{ARTIFACT_ID}-plugin.git |
JAVA_OPTS | 传递给 PCT CLI 的 Java 选项 |
DEBUG | 布尔标志,启用远程调试模式(端口 5000) |
M2_SETTINGS_FILE | 自定义 Maven 配置文件路径(需配合卷挂载使用) |
INSTALL_BUNDLED_SNAPSHOTS | 是否将 JAR 和插件快照安装到本地仓库,默认值为 true |
SKIP_LOCAL_SNAPSHOT_INSTALLATION | 若存在,将不安装 WAR 快照(核心和插件);若不存在,将安装 WAR 快照 |
DO_NOT_OVERRIDE_PCT_CHECKOUT | 让 PCT CLI 而非 run-pct 脚本检出插件版本,确保测试所有插件 |
JDK_VERSION | Docker 运行时指定 Java 版本(支持 17 或 11) |
| 卷路径 | 描述 |
|---|---|
/pct/plugin-src | 插件源码目录,若未指定将自动检出源码 |
/pct/jenkins.war | 用于测试的 Jenkins WAR 文件 |
/pct/m2-settings.xml | 自定义 Maven 配置文件(可选)。若指定 M2_SETTINGS_FILE,则优先使用该变量指定的路径 |
/pct/out | PCT 输出目录,所有报告将存储于此 |
/pct/tmp | 临时目录,可挂载用于分析运行失败 |
/root/.m2 | Maven 仓库目录,可用于传递 settings.xml 或缓存 artifacts |
注意:若未提供 WAR 文件,PCT 镜像的入口脚本会在调用 PCT 前尝试检出插件源码。对于依赖
PreCheckoutHooks的插件(如多模块项目),标准 docker run 会因入口脚本未运行PreCheckoutHooks而失败。此时可通过以下方式解决:使用 WAR 文件、挂载插件源码、覆盖入口点手动运行 PCT 或手动运行 PCT。
如需调试 Docker 环境中的 PCT 实例,使用 -e DEBUG=true -p 5005:5005 标志,然后通过 IDE 的远程调试器连接容器:
shelldocker run --rm -v maven-repo:/root/.m2 -v $(pwd)/out:/pct/out -e ARTIFACT_ID=job-restrictions -e DEBUG=true -p 5005:5005 -i jenkins/pct
PCT 本身支持 Windows,但开发 Makefile 可能需要特殊配置。需安装 Make 和 Maven(如通过 Chocolatey 包管理器)并正确设置环境变量:
batchset JAVA_HOME=... make demo PLUGIN_NAME=artifact-manager-s3 WAR_PATH=test-wars/mywar.war MVN_EXECUTABLE="C:\ProgramData\chocolatey\bin\mvn.exe"
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务