2. Jenkins Pipeline 入门:安装、配置与第一个任务
说实话,很多新手一上来就折腾 Pipeline 语法,结果环境都没搭好,光报错就耗了半天。我个人的习惯是:先把 Jenkins 跑起来,再聊别的。本章我们就从零开始,把 Jenkins 装好、配好、跑通第一个 Pipeline 任务。你跟着我的步骤走,半小时之内应该能看到绿色的成功状态。
2.1 环境准备与安装方式选择
Jenkins 的安装方式有好几种:WAR 包手动启动、Docker 运行、系统包管理器安装。我个人最推荐 Docker 方式,原因很简单:干净、可重复、卸载不留残。你要是已经装了 Java,用 WAR 包也行,但记得 Java 版本要 11 或 17。
小提示:如果你在公司内网环境,Docker 拉镜像可能慢。可以先准备好 jenkins/jenkins:lts 的离线镜像包,我前几年在客户现场就这么干过,省了不少时间。
下面是我最常用的 Docker 启动命令:
docker run -d \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
注意:-v jenkins_home:/var/jenkins_home 是持久化 Jenkins 数据的关键。你要是忘了加,容器一删所有配置就都没了——嗯,我曾经吃过这个亏,当时差点重头再来。
2.2 初始化设置与解锁 Jenkins
启动容器后,访问 http://localhost:8080。第一次会让你输入管理员密码。密码在容器里:
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
复制这串 UUID 格式的密码,粘贴到网页上,点「继续」。接下来是插件安装向导:
- 安装推荐的插件:适合初学者,Jenkins 会帮你装一堆常用插件(Git、Pipeline、Blue Ocean 等)。
- 选择插件来安装:适合老手,我只装必要的。比如只勾选 Pipeline、Git、Credentials Binding。
我个人习惯选「安装推荐的插件」。虽然要等几分钟,但插件齐全,后面省心。记得我在一次线上培训时,图省事选了最小安装,结果演示到一半发现缺了 Blue Ocean 插件,现场装又断网……场面一度很尴尬。
插件安装完成后,创建第一个管理员用户:用户名、密码、全名、邮箱。这里填好记牢,后面登录全靠它。
最后设置 Jenkins URL,默认 http://localhost:8080 即可。如果是在局域网用,记得把 IP 换成实际内网地址。
2.3 认识 Jenkins 管理界面
安装完成后进入主面板。我简单说说几个核心区域:
| 区域 | 作用 |
|---|---|
| 左侧菜单 | 新建任务、人、构建历史、管理 Jenkins、我的视图 |
| 中央面板 | 显示任务列表、构建状态、队列 |
| 右上角 | 登录用户、设置、退出 |
你打开「管理 Jenkins」看看,里面有系统配置、插件管理、节点管理、全局工具配置等。以后很多调整都会在这里完成。
2.4 创建第一个 Pipeline 任务
万事俱备,我们来建个 Pipeline。所谓 Pipeline,就是把构建、测试、部署步骤写成代码(通常是 Jenkinsfile),Jenkins 按步骤执行。
点击左侧的「新建任务」,输入任务名称(比如 first-pipeline),选择「流水线」类型,点确定。
在配置页往下翻,找到「流水线」区域。这里有两种定义方式:Pipeline 脚本(直接写在框里)和从 SCM 获取(从代码仓库拉 Jenkinsfile)。初学阶段,我们先选「Pipeline 脚本」。
核心概念:Pipeline 脚本使用 Groovy 语法。最小结构包含 pipeline {} 块,里面至少有一个 agent 和 stages。我们写一个最简单的 Hello World。
在脚本输入框里粘贴以下内容:
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo 'Hello, Jenkins Pipeline!'
}
}
}
}
点「保存」,然后点击左侧的「立即构建」。稍等几秒,会在「构建历史」里出现一个 #1 的构建记录。点进去看「控制台输出」,你会看到:
Started by user admin
[Pipeline] Start of Pipeline
[Pipeline] node
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Hello)
[Pipeline] echo
Hello, Jenkins Pipeline!
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
看到那个蓝色的 SUCCESS 了吗?恭喜,你的第一个 Pipeline 跑通了!
2.5 理解 Pipeline 的基本结构
上面的脚本虽然简单,但包含了 Pipeline 的骨架。拆开来看:
- pipeline {}:声明式 Pipeline 的根块,所有逻辑都写在里面。
- agent any:指定在哪台节点上执行。any 表示任意可用节点(包括主节点)。
- stages {}:包含一个或多个 stage,每个 stage 代表一个阶段(比如编译、测试、部署)。
- stage('Hello') {}:一个具体的阶段名字。名字可以随意,但要有意义。
- steps {}:里面放具体的命令或步骤。每个 stage 必须有一个 steps。
避坑指南:我曾经在一次演示中写了两个 stage,第二个 stage 的 steps 里少了一对大括号,结果 Pipeline 一直报语法错误,检查了十分钟才发现。所以,steps {} 里的花括号一定要成对出现。
2.6 扩展练习:带参数的 Pipeline
光打印一句话不过瘾,我们加点参数。在任务配置页勾选「参数化构建过程」,添加一个字符串参数,名字叫 NAME,默认值 World。然后将 Pipeline 脚本改成:
pipeline {
agent any
parameters {
string(name: 'NAME', defaultValue: 'World', description: '输入你的名字')
}
stages {
stage('Greet') {
steps {
echo "Hello, ${params.NAME}!"
}
}
}
}
再次构建,这次弹出的窗口让你输入参数。试试输入你的名字,控制台输出就会变成 Hello, 你的名字!。
参数化构建在实际项目中非常常用——比如你想手动指定分支、环境、版本号等。我个人习惯把分支、配置文件路径、超时时间都做成参数,避免每次改脚本。
2.7 本章知识脉络
下面的图帮你理清本章的核心脉络:从环境搭建到第一个 Pipeline 任务,再到参数化扩展。
经验分享:刚开始学 Pipeline 不要贪多。先把 pipeline {}、stages、steps 这三个核心搞熟,后续再学习 post、environment、when 等高级特性。我见过太多人一上来就写复杂的声明式脚本,最后跑起来全是红色报错,反而打击信心。
现在你的 Jenkins 环境已经跑起来了,也体验了第一个 Pipeline 的完整流程。接下来你可以试着改改脚本,比如多写几个 stage,或者加上一步执行 shell 命令。放心折腾,反正容器坏了可以重来。嗯,这就是 Docker 最大的好处。