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% 折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。