Jenkins 2.580 免向导搭建 CI 流水线:测试归档、上下游触发与参数化部署实测
一、为什么用 war 而不是 MSI
Jenkins 官方 Windows MSI 会装成系统服务并写注册表,实验环境一动就走形。java -jar jenkins.war最干净:绿、可移植、删目录即卸载。国内下载走清华 TUNA 镜像,直连速度可观。
启动命令只多一个参数——跳过首次配置向导:
java-Djenkins.install.runSetupWizard=false-jarjenkins.war--httpPort=18080日志出现Jenkins is fully up and running即就绪。免向导模式默认无插件、无安全,正好跑通"最小可用 CI":
不跳向导的话要手工去服务器翻 initialAdminPassword 文件,装插件还会卡更新源——实验环境一律建议免向导。
二、freestyle 作业:真实测试 + 制品归档
被测对象是一个 10 行的计算器模块,配 6 个 unittest 用例(含除零异常路径)。CI 入口run_ci.py跑测试并产出 JUnit XML。作业用 config.xml 直接建:
<project><builders><hudson.tasks.BatchFile><command>python run_ci.py</command></hudson.tasks.BatchFile></builders><publishers><hudson.tasks.ArtifactArchiver><artifacts>report/*</artifacts></hudson.tasks.ArtifactArchiver></publishers></project>触发构建实测:Ran 6 tests — OK,制品区归档出 junit.xml 与 build-info.txt,#1 耗时 4.7s、#2 耗时 9.3s,均 SUCCESS。
一个真实的坑:war 启动的裸 Jenkins 不带任何插件,配置里写 JUnitResultArchiver 能保存成功但发布步骤静默不执行(testReport 页 404)。想装 junit 插件会发现它拖出 prism-api、plugin-util-api、workflow-step-api 一串依赖,第二层还有 structs、commons-text-api……裸机党直接用制品归档承载测试报告,别恋战。
三、流水线编排:上游 SUCCESS 自动触发下游
不装 Pipeline 插件也能编排——freestyle 自带 BuildTrigger 发布器,阈值设 SUCCESS:
<hudson.tasks.BuildTrigger><childProjects>demo-app-deploy</childProjects></hudson.tasks.BuildTrigger>实测构建 #2 一跑完,console 出现Triggering a new build of demo-app-deploy,下游自动开跑并 SUCCESS。测试不过关时部署根本不会发生——这就是 CI/CD 的最小闭环。
四、参数化与定时:一次定义,多环境发布
deploy 作业声明字符串参数。必须包在 ParametersDefinitionProperty 里——直接裸写 StringParameterDefinition 会被静默忽略,buildWithParameters 直接 400(实测踩过):
<hudson.model.ParametersDefinitionProperty><parameterDefinitions><hudson.model.StringParameterDefinition><name>ENV_NAME</name><defaultValue>staging</defaultValue></hudson.model.StringParameterDefinition></parameterDefinitions></hudson.model.ParametersDefinitionProperty>然后一行 REST 切换部署目标:POST /job/demo-app-deploy/buildWithParameters?ENV_NAME=production,实测 console 输出Deploying build to production:
定时构建在作业配置里填 cron(5 4 * * *= 每天 04:05),Jenkins 会在配置页显示下次触发时间,帮你确认表达式没写错。
| 能力 | 配置方式 | 实测结果 |
|---|---|---|
| 自由风格作业 | config.xml POST createItem | 6/6 测试过,制品归档 |
| 上下游编排 | BuildTrigger 发布器 | 下游自动触发 SUCCESS |
| 参数化 | ParametersDefinitionProperty | production 环境一键部署 |
| 定时触发 | TimerTrigger cron | 配置回读一致 |
| REST 自动化 | crumb + cookie | 全程零 UI |
五、REST 全自动化:整条流水线零 UI
Jenkins 的 CSRF 防护要求每个写请求带 crumb,三件套固定用法:
curl-cck.txt http://127.0.0.1:18080/crumbIssuer/api/jsoncurl-bck.txt-H"Jenkins-Crumb: <val>"-XPOST...curlhttp://127.0.0.1:18080/job/X/lastCompletedBuild/api/json?tree=number,result本次实验从建作业、改配置、触发构建到读结果全部走 API,没有点过一次页面按钮。把这三条命令包进脚本,就是团队内部的迷你发布平台。
配套完整工程
Jenkins持续集成实战五步全流程(freestyle到参数化构建部署,附实测工程)
Jenkins持续集成实战五步全流程(freestyle到参数化构建部署,附实测工程)
被测工程、作业 config.xml 模板、jenkins.war、一键启动脚本与全量实测留档都在工程包里。