Jenkins流水线搭建:从零到可运行Pipeline的完整步骤
Jenkins流水线搭建:从零到可运行Pipeline的完整步骤
Jenkins 流水线搭建的核心目标,是把代码拉取、编译、测试、打包、部署这些重复动作,用一份可版本管理的脚本自动串起来。
本文按照零基础用户能照做的顺序,从安装 Jenkins 开始,到写出第一条可运行的 Pipeline,并给出每一步的验证方法和常见报错处理。
适用环境:Linux 服务器(Ubuntu 20.04 及以上或 CentOS 7 及以上),具备 sudo 权限,服务器能访问外网。
如果你使用 Windows,建议在 WSL2 中操作,命令基本一致。
一、先把 Jenkins 环境准备好
Jenkins 依赖 Java 运行环境。
当前 Jenkins 较新版本通常要求 Java 11 或 Java 17,具体以你安装的 Jenkins 版本说明为准。
下面以 Ubuntu 为例。
安装 Java:
sudo apt update
sudo apt install -y openjdk-17-jdk
java -version
如果 java -version 输出 17.x,说明 Java 就绪。
添加 Jenkins 软件源并安装:
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt update
sudo apt install -y jenkins
启动并设置开机自启:
sudo systemctl enable jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins
看到 active (running) 表示 Jenkins 已启动。
默认监听 8080 端口,在浏览器访问 http://你的服务器IP:8080。
解锁 Jenkins:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
把输出的密码粘贴到页面中,选择“安装推荐的插件”,等待插件安装完成,创建管理员账号。
注意:如果服务器开启了防火墙,需要放行 8080 端口。
使用云服务器时,还要在安全组中放行该端口。
二、创建第一条 Pipeline 任务
Jenkins 流水线有两种常见写法:Pipeline script(直接写在任务里)和 Pipeline script from SCM(从代码仓库读取 Jenkinsfile)。
生产环境更推荐后者,因为脚本能跟随代码一起做版本管理。
先创建一条最简单的 Pipeline,确认环境可用:
- 在 Jenkins 首页点击“新建任务”。
- 输入任务名称,例如
demo-pipeline,选择“流水线”,点击确定。 - 在“流水线”区域,定义选择“Pipeline script”。
- 在脚本框中粘贴以下内容:
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
echo '正在拉取代码...'
}
}
stage('构建') {
steps {
echo '正在执行构建...'
}
}
stage('部署') {
steps {
echo '正在执行部署...'
}
}
}
post {
always {
echo '流水线执行结束'
}
}
}
- 点击“保存”,然后点击“立即构建”。
- 在“构建历史”中点击本次构建编号,选择“控制台输出”。
如果看到三个阶段依次输出对应文字,并在最后输出“流水线执行结束”,说明 Jenkins 流水线搭建的基础环境已经跑通。
三、把 Jenkinsfile 放到代码仓库
实际项目中,流水线脚本应该跟代码放在一起。
在项目根目录创建 Jenkinsfile 文件,内容可以参考下面这个结构:
pipeline {
agent any
parameters {
string(name: 'BRANCH', defaultValue: 'main', description: '要构建的分支')
}
stages {
stage('检出代码') {
steps {
git branch: "${params.BRANCH}", url: 'https://你的代码仓库地址.git'
}
}
stage('编译') {
steps {
echo '这里替换为实际的编译命令,例如 mvn clean package'
}
}
stage('测试') {
steps {
echo '这里替换为实际的测试命令'
}
}
stage('归档产物') {
steps {
archiveArtifacts artifacts: 'target/*.jar', allowEmptyArchive: true
}
}
}
}
然后回到 Jenkins 任务配置中,把“流水线”区域改为“Pipeline script from SCM”:
- SCM 选择 Git
- 填写仓库地址
- 脚本路径保持默认
Jenkinsfile
保存后再次构建,Jenkins 会从仓库拉取代码并执行 Jenkinsfile 中定义的阶段。
容易踩的坑:
- 仓库地址使用 HTTPS 时,需要配置凭据;使用 SSH 时,要把 Jenkins 的公钥加到代码平台。
- 分支名要和实际仓库一致,默认的
main或master写错会导致检出失败。 archiveArtifacts的路径要跟实际构建产物匹配,路径不对会提示找不到文件。
四、构建结果怎么验证
每次构建结束后,不要只看“成功”两个字,建议按下面几项检查:
- 控制台输出中每个 stage 是否都有明确的开始和结束标记
- 构建产物是否出现在任务页面的“构建产物”区域
- 如果配置了部署步骤,目标服务器上的服务是否真的更新
- 构建耗时是否在合理范围,明显变慢时检查是否重复下载依赖
如果构建失败,先看控制台输出中第一个报错行,再根据报错类型处理。
常见情况包括:命令不存在、权限不足、网络超时、凭据错误。
五、几个常见疑问
Jenkins 流水线和普通任务有什么区别?
普通任务通常通过页面勾选配置,流水线把整个流程写成代码,能纳入版本管理,也更容易复制和排查。
一定要用 Jenkinsfile 吗?
不是必须,但推荐使用。直接在页面里写脚本适合临时验证,长期维护还是放在仓库里更稳妥。
构建时提示权限不足怎么办?
先确认 Jenkins 运行用户(通常是 jenkins)对工作目录和构建产物路径有读写权限,再看是否需要给部署目标配置凭据。
流水线执行成功但部署没生效怎么办?
检查部署阶段的命令是否真的执行了,以及目标服务是否重启。可以在部署步骤后加一条 echo 或检查命令,确认输出和实际状态一致。
总结
Jenkins 流水线搭建并不复杂,关键是先把 Java 和 Jenkins 服务跑起来,再用最简单的 Pipeline 确认环境通,最后把 Jenkinsfile 放进代码仓库,逐步替换成真实的编译、测试和部署命令。
整个过程建议每完成一步就验证一次,不要一次性写完所有阶段再调试,否则报错时很难定位是哪一步出的问题。