介绍
Walk Weekender 正在为一场虚构的河畔活动准备访客资料。资料包包含一个小型网站、一张路线插图、一份站点 CSV 和访客须知。Jenkins 中已有可正常工作的资料包构建程序,但每次运行后都会清理临时工作区。你的任务是保留一份完整、可下载且与其构建关联的成果。
本实验要求你掌握 Jenkins 的基本页面操作,能看懂一段简短的声明式流水线,并具备包括解压 ZIP 在内的基本文件操作能力。实验会在使用前解释归档、指纹和工作区生命周期。你不需要编写网站、安装软件或了解 Java。
使用 Pack Desk 体验参考访客资料包,使用 Jenkins 运行构建和进行配置。这是同一台已准备好的 VM 中的两个服务。浏览器下载的文件保存在你的电脑上,与训练 VM 中的 Jenkins 文件分开存放。每个单元都独立初始化。预计用时由作者估算,包含阅读和常见错误的处理时间,尚未经初学者实测。
查看构建生成的文件去了哪里
在这一步中,你将查看预期的访客资料,运行原始任务,并了解为什么构建成功并不意味着会自动留下可下载的资料包。请从 Pack Desk 开始。
本次需求是制作 Riverwalk Saturday 的访客版本 RW-02。在 Reference visitor pack 区域,选择 Open the reference pack。参考资料包展示了预期的访客体验;你要交付的则是你自己的 Jenkins 构建所保留的 ZIP。
选择 Explore the route。路线包含三个编号站点:Garden gate、Willow bridge 和 Orchard yard。选择 Download all route stops,使用你常用的文本或电子表格查看工具打开保存的 CSV。CSV 是一种以逗号分隔字段的文本格式,第一行给出各列名称。文件开头如下:
order,stop_id,name,map_x,map_y,visitor_note
1,gate,Garden gate,150,340,Meet beside the blue gate.
选择 Read the visitor notes 并阅读下载的文本文件。确认的集合时间是 10:00。这些文件、正常工作的页面和路线图片共同组成完整的资料包。下载文件不会改变当前页面。使用浏览器的 Back 操作两次,从路线页面经过资料包概览返回资料台。
切换到 Jenkins Tab。打开 create-riverwalk-pack,选择 Build with Parameters。等待参数表单加载完成。将 EDITION 保持为 river-v2,然后选择 Build。这个参数用于选择已准备好的访客版本;提供的程序会创建实际的 ZIP。
等待带编号的构建结束。在 Builds 下打开该构建,然后选择 Console Output。找到以下输出行:
Prepared visitor edition: Riverwalk Saturday / RW-02
Complete event-pack.zip created.
...
Finished: SUCCESS
程序确实创建了资料包。继续向下阅读 Pipeline 日志,在最后的 post 操作下找到 [Pipeline] deleteDir。提供的清理操作会在各阶段结束后删除本次运行的工作区文件。
工作区(workspace)是 Jenkins 分配给任务执行的工作目录。构建可以在其中创建文件,也可以随后删除这些文件。SUCCESS 描述的是本次运行的结果,并不表示 Jenkins 自动保留了所有生成的文件。
通过面包屑导航链接返回这次带编号构建的状态页面。原始运行没有提供 event-pack.zip 构建产物下载。任务构建了文件,却没有先保留归档,就将它们清理掉了。请在历史中保留这次构建,以便与下一次运行比较。
在清理前保留归档
在这一步中,你将保留完整的访客 ZIP,同时保留工作区清理,并使用下载的文件。请从 Jenkins 中的 create-riverwalk-pack 任务页面开始。
选择 Configure,然后找到 Pipeline 区域。其中的 Script 编辑器包含提供的构建阶段和一个 post 块。该块中的 always 部分会在各阶段之后运行,即使本次运行失败也会执行。其中的 deleteDir() 操作会清空分配的工作区;请保留这项清理。
archiveArtifacts 会在清理之前,将选定的工作区文件复制为该构建保留的构建产物。它的 artifacts 设置是相对于该工作区的文件名或匹配模式。'event-pack.zip' 两侧的单引号表示这是一个字符串。fingerprint: true 还会记录 Jenkins 的文件使用标识,帮助你在下一个引导实验中追踪这个 ZIP 在不同任务之间的使用情况。指纹记录文件身份及使用情况,并不是发布者的签名。
冒号分隔每项设置与其值,逗号分隔各项设置。添加一个 Archive pack 阶段,放在 Build pack 之后、stages 内。保留参数、构建命令和清理操作。如需可完整复制的版本,请点击 Script 内部,在 Windows/Linux 上使用 Ctrl+A,或在 macOS 上使用 Command+A 选中全部内容,然后替换为:
pipeline {
agent any
parameters {
choice(name: 'EDITION', choices: ['river-v2'], description: 'Visitor edition to prepare')
}
stages {
stage('Prepare workspace') {
steps { deleteDir() }
}
stage('Build pack') {
steps { sh 'sh /var/jenkins_home/walk-pack-fixtures/build-pack.sh' }
}
stage('Archive pack') {
steps {
archiveArtifacts artifacts: 'event-pack.zip', fingerprint: true
}
}
}
post {
always { deleteDir() }
}
}
选择 Save。再次运行 Build with Parameters。等待参数表单加载完成,将 EDITION 保持为 river-v2,然后选择 Build。等待这次新的带编号构建成功结束。控制台应显示 Archiving artifacts、Recording fingerprints 和最后的清理操作。
打开新构建的状态页面,找到 Build Artifacts。下载 event-pack.zip。即使工作区已被清空,Jenkins 仍将这个 ZIP 作为该构建的一部分保留了下来。
使用电脑上的归档工具,将整个 ZIP 解压到一个新文件夹。在浏览器中打开解压后文件夹中的 index.html。将以下八个文件保持在一起:
index.html
route.html
styles.css
route-map.png
stops.csv
visitor-notes.txt
event.json
build.json
确认活动为 Riverwalk Saturday、版本为 RW-02、集合时间为 10:00。点击 Explore the route,查看全部三个站点,下载路线 CSV,并选择 Read the visitor notes 阅读本地文本文件。根据浏览器的行为,这个文本文件可能会直接在页面中打开,而不是再次触发下载;它已包含在解压后的文件夹中。图片和链接使用本地文件,因此这个访客资料包可以独立于训练 VM 使用。

如果解压后的页面缺少样式或图片,请检查是否解压了整个 ZIP,以及打开的 index.html 是否与 styles.css 和 route-map.png 位于同一目录。仅从 ZIP 查看器内打开一个 HTML 文件,可能使它与所需资源分离。请将原始下载文件解压到一个新文件夹,而不是重新构建文件。
如果 Jenkins 报告 Groovy 语法错误,请返回 Configure,恢复上面的完整脚本,选择 Save 并再次运行 river-v2。保留花括号和单引号。如果你在第一次运行原始任务之前就进行了编辑,请暂时仅移除 Archive pack,保存并运行一次;然后恢复完整脚本并再次运行。
最终结果必须来自当前保存的 Pipeline。此后每次编辑,都要重新运行。保留之前的构建和提供的资料包文件。这个训练 VM 是临时的;完成实验后,请保留已下载的副本。
总结
你观察了真实的资料包如何从临时工作区消失,随后通过 Jenkins 归档和指纹功能保留了完整 ZIP。你保留了清理操作,下载了原始构建产物,并将其中的页面、图片、路线数据和访客须知作为一个自包含的访客资料包使用。



