Job / 任务
做什么工作?
例如 hello-world,是可以反复运行的任务。
先认识 Job、Build、Pipeline、Controller、Agent 等核心概念,
再对照 Jenkinsfile,理解你刚跑通的 Hello World。
Jenkins 是自动化调度工具:收到触发后,按你写的流程安排工作,并记录结果。把它想成一个调度中心:Job 是工作单,Pipeline 是操作清单,Build 是一次实际执行;Controller 负责安排,Agent 负责执行。
做什么工作?
例如 hello-world,是可以反复运行的任务。
这一次发生了什么?
例如 hello-world #2,有自己的参数、日志、结果。
按什么流程做?
完整流程定义;Jenkinsfile 是保存它的文件。
工作分成哪几段?
例如 Hello、Shell、Artifact,用来组织操作。
具体执行哪条操作?
例如 echo、sh、writeFile;阶段名本身不会做事。
谁负责管理和调度?
提供 Jenkins 网页,管理任务与执行记录。
有哪些执行环境?
可以是物理机、虚拟机或容器环境,不专指云服务器。
谁执行分配的工作?
连接控制器的执行程序;日常也常指其所在环境。
能同时承接多少工作?
像工位,不等同于 CPU 核;没有空位就可能排队。
这份工作交给谁?
mac-local 用于匹配节点,不会自动创建 Agent。
执行时在哪读写文件?
在执行节点上;可被清理,不适合当永久存储。
哪些结果值得保存?
hello.txt 归档后属于对应 Build,能从详情页下载。
这次让用户输入什么?
NAME 是本次问候对象,不改变 Job 的身份。
步骤使用什么运行环境?
env.BUILD_NUMBER 是编号,IMAGE_TAG 可作为镜像标签。
访问外部系统用什么身份?
保存 token、密码或私钥,流水线通过凭据 ID 引用。
Jenkins 要扩展什么能力?
如 Pipeline、Timestamper;不等于安装了节点命令。
代码和流程定义从哪来?
例如 Git;网页粘贴模式不会自动读取本地文件。
什么时候运行?
手动点击、定时、SCM 轮询或配置好的 webhook。
这张图是语法对照表,不是一段完整脚本。Hello World 已使用其中大部分;environment 会在 Go 应用案例中出现。先看懂“在哪做、做什么、怎么收尾”,不必先学完整 Groovy。
Job 是保存的工作,Pipeline 是工作流程,Build 是这次执行。下面展开一次 Build,才能看到各个 Stage 和 Step。
例如首页里的 hello-world。下次点击构建,仍然运行同一个任务。
定义阶段与步骤。Stage 的名字可以自定义,步骤才决定实际行为。
#1 和 #2 可以输入不同的 NAME,各有自己的日志、状态与产物。
以下对应尚未添加独立 Agent 的 Hello World 环境。Mac 上打开 Jenkins,不代表 Shell 就在 macOS 上运行。Docker Desktop 的 Linux 容器底层由 Linux 虚拟机承载,此处省略该层。
执行节点上的工作目录。writeFile 在这里生成文件,pwd 可以告诉你实际位置。
archiveArtifacts 将文件保存到对应构建记录,可在详情页下载。它不是永久备份。
节点有空闲执行槽,任务才有机会开始。Label 用于匹配节点,不会替你创建节点。
图中表示当前顺序流水线的普通成功与失败路径。catchError 等显式错误处理可以改变流程;超时、取消和节点失联也有不同处理情况。
节点离线、标签不匹配、执行槽忙,都可能导致等待。排队不等于代码执行失败。
它表示你配置的步骤成功。没有部署步骤,就不会因为显示成功而更新应用。
Console Output 中找到最早的关键错误,再确认阶段、节点、用户、目录和退出码。
定时构建按时间发起运行;SCM 轮询定期检查仓库,有相关变化才触发。Webhook 则由 Git 服务发通知。三者都需要正确配置。
UNSTABLE 常表示测试报告等标记出问题,不保证后续阶段自动跳过。ABORTED 表示被中止,例如停止构建或超时。
Go 案例让 Mac Agent 调用 Make 和 Docker。控制器负责调度;Go 工具负责测试与编译;Docker 负责镜像与容器;Compose 描述如何运行应用。
代码合入时自动构建和检查,尽早暴露问题。第一步先把测试与打包做好。
让验证过的版本处于可发布状态。正式发布可以保留人工决定。
通过检查的变更自动发布到目标环境。说 CD 时,要确认指的是哪一种。
Step 3 位于独立目录 goapp-server/,自带源码与构建配置;Step 2 的 goapp/ 保留 Mac 本地部署。新案例通过你配置的私有仓库 push/pull 分发镜像。Jenkins 仍调度 Mac Agent;Mac 上的 SSH 命令在服务器执行 Docker 部署操作。
Mac 将镜像 push 到 REGISTRY_HOST / REGISTRY_REPOSITORY;服务器独立登录并 pull。SSH 只发送部署配置。
Apple Silicon 常为 arm64,云服务器可能是 amd64。TARGET_PLATFORM 按服务器选择,脚本会检查。
SSH 私钥与 known_hosts 校验连接身份。仓库另设凭据:Jenkins 可 push,服务器使用只读 pull 账号。
服务器自检不等于 Mac 本地访问。SSH 隧道把 Mac 的 18081 转到服务器的 8081。
发布记录固定 digest 和 Compose。server-rollback 从仓库拉取旧 digest;仓库需保留该镜像。
失败部署可能已经替换容器。current 仍指向上次成功版本,不能替代 Docker 实时状态检查。
浏览器只是操作入口。当前 Hello World 在 Jenkins 容器的内置节点运行 Shell,因此看到的是容器的 Linux 环境。
已归档到第 1 次构建的文件不会因为这次写工作区文件而变化。历史记录和产物仍可能被保留策略清理。
构建只是得到软件包。还要在正确环境更新应用容器,并验证实际响应中的版本;Go 案例的 make verify 就是在检查这个结果。
建议下一步:在 Hello World 中观察 pwd、whoami、uname -s,再临时用 sh 'exit 1' 观察一次失败。做完后恢复脚本。