Jenkins Pipeline 流水线搭建教程
Jenkins 是目前最成熟、应用最广泛的持续集成与持续部署(CI/CD)工具。通过 Jenkins Pipeline,你可以将代码的构建、测试、部署全流程用代码定义,实现完全自动化的 DevOps 工作流。本文将在搬瓦工 VPS 上从零搭建 Jenkins,并编写 Pipeline 流水线实现自动化构建与部署。
一、环境要求
- 操作系统:Ubuntu 20.04+ 或 Debian 11+(推荐 Ubuntu 22.04)。
- 内存:至少 2GB,推荐 4GB 以上(Jenkins 本身比较消耗内存)。
- Java:Jenkins 需要 Java 17 运行环境。
- 磁盘:建议预留 20GB 以上空间用于构建产物和日志。
搬瓦工 VPS 的 KVM 方案完全满足以上要求,推荐选择 2GB 内存以上的方案。购买时使用优惠码 NODESEEK2026 可享 6.77% 折扣,购买地址:bwh81.net。
二、安装 Java 环境
Jenkins 依赖 Java 运行时,首先安装 OpenJDK 17:
apt update
apt install openjdk-17-jdk -y
验证 Java 版本:
java -version
三、安装 Jenkins
3.1 添加 Jenkins 仓库
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | 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/" | tee /etc/apt/sources.list.d/jenkins.list > /dev/null
3.2 安装 Jenkins 包
apt update
apt install jenkins -y
3.3 启动 Jenkins 服务
systemctl start jenkins
systemctl enable jenkins
Jenkins 默认监听 8080 端口,确保防火墙已开放:
ufw allow 8080/tcp
3.4 获取初始管理员密码
cat /var/lib/jenkins/secrets/initialAdminPassword
在浏览器中访问 http://你的IP:8080,输入上述密码完成初始化向导。建议安装推荐插件,并创建管理员账号。
四、使用 Docker 安装 Jenkins(推荐)
如果你已经安装了 Docker,使用 Docker 部署 Jenkins 更加灵活:
docker run -d \
--name jenkins \
--restart=always \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:lts
挂载 Docker socket 允许 Jenkins 在流水线中直接调用宿主机的 Docker 进行构建。
五、创建第一个 Pipeline
5.1 新建 Pipeline 项目
登录 Jenkins 后,点击"新建任务",输入项目名称,选择"流水线(Pipeline)"类型,点击确定。
5.2 编写 Jenkinsfile
在流水线配置的"Pipeline"区域,选择"Pipeline script",输入以下示例:
pipeline {
agent any
environment {
APP_NAME = 'my-app'
DEPLOY_DIR = '/opt/app'
}
stages {
stage('拉取代码') {
steps {
git branch: 'main',
url: 'https://github.com/your-repo/my-app.git'
}
}
stage('构建') {
steps {
sh 'echo "开始构建..."'
sh 'npm install'
sh 'npm run build'
}
}
stage('测试') {
steps {
sh 'npm run test'
}
}
stage('部署') {
steps {
sh """
rsync -avz --delete dist/ ${DEPLOY_DIR}/
systemctl restart my-app
"""
}
}
}
post {
success {
echo '流水线执行成功!'
}
failure {
echo '流水线执行失败,请检查日志。'
}
}
}
5.3 Pipeline 语法说明
- agent:指定流水线运行的节点,
any表示任意可用节点。 - environment:定义环境变量,可在所有阶段中使用。
- stages:定义流水线的各个阶段,按顺序执行。
- post:流水线执行完毕后的操作,可根据结果执行不同动作。
六、Docker 构建 Pipeline
结合 Docker 进行容器化构建和部署是更现代的做法:
pipeline {
agent any
stages {
stage('构建镜像') {
steps {
sh 'docker build -t my-app:${BUILD_NUMBER} .'
}
}
stage('推送镜像') {
steps {
withCredentials([usernamePassword(
credentialsId: 'docker-hub',
usernameVariable: 'DOCKER_USER',
passwordVariable: 'DOCKER_PASS'
)]) {
sh """
echo \$DOCKER_PASS | docker login -u \$DOCKER_USER --password-stdin
docker tag my-app:${BUILD_NUMBER} \$DOCKER_USER/my-app:${BUILD_NUMBER}
docker push \$DOCKER_USER/my-app:${BUILD_NUMBER}
"""
}
}
}
stage('部署') {
steps {
sh """
docker stop my-app || true
docker rm my-app || true
docker run -d --name my-app -p 80:3000 my-app:${BUILD_NUMBER}
"""
}
}
}
}
七、配置 Webhook 自动触发
在 GitHub 或 GitLab 中配置 Webhook,当代码推送时自动触发 Jenkins 构建:
- 在 Jenkins 项目设置中勾选"GitHub hook trigger for GITScm polling"。
- 在 GitHub 仓库的 Settings → Webhooks 中添加
http://你的IP:8080/github-webhook/。 - Content type 选择
application/json,触发事件选择push。
八、安装常用插件
在"系统管理 → 插件管理"中安装以下推荐插件:
- Blue Ocean:提供现代化的流水线可视化界面。
- Pipeline Stage View:显示各阶段执行状态。
- Docker Pipeline:在 Pipeline 中使用 Docker 容器作为构建环境。
- Credentials Binding:安全管理密钥和凭据。
- Git:Git 代码管理集成。
九、安全加固
9.1 配置反向代理
建议使用 Nginx 反向代理 Jenkins 并启用 HTTPS:
server {
listen 80;
server_name jenkins.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name jenkins.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/jenkins.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jenkins.yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
9.2 权限管理
在"系统管理 → 安全配置"中:
- 启用"Matrix Authorization Strategy"进行细粒度的权限控制。
- 禁止匿名用户访问。
- 为不同团队成员分配不同的项目权限。
十、常见问题
Jenkins 启动后页面空白
检查 Java 版本是否匹配:
java -version
systemctl status jenkins
journalctl -u jenkins -f
Pipeline 执行超时
在 Pipeline 中添加超时控制:
options {
timeout(time: 30, unit: 'MINUTES')
}
磁盘空间不足
定期清理旧的构建记录,在项目设置中配置"丢弃旧的构建"策略,保留最近 10 次构建即可。
总结
Jenkins Pipeline 是实现自动化 CI/CD 的强大工具,通过代码定义构建流程,可以实现版本控制和复用。搭配 Docker 使用效果更佳。搬瓦工 VPS 提供稳定的运行环境,选购方案请参考 全部方案,使用优惠码 NODESEEK2026 享受 6.77% 折扣。