Jenkins 安装与使用教程:从零搭建 CI/CD 流水线,Git 提交自动构建部署


每次改完代码都要手动上传、打包、重启服务?测试环境反复手工部署太累?Jenkins 是使用最广的开源持续集成/持续部署(CI/CD)工具:你只需要把代码推到 Git,Jenkins 自动完成拉代码、构建、测试、部署,全程无人值守。这篇文章从零安装 Jenkins,并带你把第一条流水线跑起来。

一、Jenkins 是什么?能解决什么问题

传统部署流程:改代码 -> 打包 -> 上传服务器 -> 停服务 -> 重启,全靠手工,还容易出错。

Jenkins 的工作方式:

Git 提交代码
    |
    v
Jenkins 检测到变更(轮询或 Webhook 触发)
    |
    v
自动执行流水线:拉代码 -> 构建/测试 -> 部署到服务器 -> 通知结果
场景 传统方式 Jenkins 方式
发布新版本 手工打包上传 提交代码自动发布
每次改完都要测 手动跑测试 流水线自动跑
发布结果反馈 等同事喊 构建成功/失败自动通知

二、安装 Jenkins

前提:已安装 JDK(Jenkins 需要 Java)。

java -version   # 需要 JDK 8+,没有就装:yum install -y java-1.8.0-openjdk

CentOS 7 安装:

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
yum install -y jenkins

Ubuntu/Debian 安装:

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
apt update && apt install -y jenkins

启动:

systemctl start jenkins
systemctl enable jenkins
systemctl status jenkins
ss -tlnp | grep 8080    # Jenkins 默认端口 8080

三、初始化配置

第 1 步:解锁 Jenkins

浏览器访问 http://服务器IP:8080,会要求输入初始管理员密码:

cat /var/lib/jenkins/secrets/initialAdminPassword

第 2 步:选择插件

  • 新手直接选"安装推荐的插件"(Install suggested plugins),包含 Git、Pipeline、构建工具等常用插件;
  • 也可以自定义选择需要的插件。

第 3 步:创建管理员账号

填用户名、密码、邮箱,保存后进入主界面。

四、配置 Git 和凭据

第 1 步:确认 Git 已安装

yum install -y git

第 2 步:在 Jenkins 里添加 Git 仓库凭据

  1. 系统管理 -> 凭据(Credentials)-> 全局 -> 添加凭据;
  2. 类型选 "Username with password"(或 SSH Key);
  3. 填 Git 仓库的用户名密码/Token,保存。

五、创建第一条流水线(Pipeline)

方式 A:图形化自由风格项目(新手友好)

  1. 新建任务 -> 输入名称 -> 选择"自由风格软件项目";
  2. 源码管理:选 Git,填仓库地址,凭据选刚才添加的;
  3. 构建触发器:选"轮询 SCM",填 H/5 * * * *(每 5 分钟检查一次代码变更);
  4. 构建环境:勾选需要的选项;
  5. 构建步骤:添加"执行 shell",填构建命令:
# 示例:PHP 项目无编译,直接检查语法 + 部署
php -l index.php
rsync -avz --delete /var/lib/jenkins/workspace/项目名/ root@目标服务器:/www/wwwroot/site/
  1. 保存后点"立即构建",看控制台输出,蓝色=成功,红色=失败。

方式 B:Pipeline 流水线脚本(推荐,可版本化管理)

新建任务 -> 选择"流水线"(Pipeline)-> 在 Pipeline 脚本里写:

pipeline {
    agent any
    stages {
        stage('拉取代码') {
            steps {
                git branch: 'main', url: 'https://git.example.com/team/web.git',
                    credentialsId: 'my-git-cred'
            }
        }
        stage('构建') {
            steps {
                sh 'npm install && npm run build'
            }
        }
        stage('部署') {
            steps {
                sh 'rsync -avz --delete dist/ root@192.168.1.20:/www/wwwroot/site/'
            }
        }
    }
    post {
        success { echo '部署成功!' }
        failure { echo '部署失败,请查看日志' }
    }
}

这样流水线本身也可以存到 Git 仓库(Jenkinsfile),实现"配置即代码"。

六、Git 提交自动触发(Webhook)

轮询 SCM 有延迟,想要"推代码就立刻构建",配置 Webhook(以 Gitea/GitHub 为例):

第 1 步:Jenkins 装插件并生成触发地址

  1. 插件管理安装 "Generic Webhook Trigger";
  2. 构建触发器里勾选,记录 Jenkins 的 Webhook URL:http://JenkinsIP:8080/generic-webhook-trigger/invoke;

第 2 步:在 Git 仓库后台配置 Webhook

Gitea/GitHub 仓库 -> Webhooks -> 添加:

URL: http://JenkinsIP:8080/generic-webhook-trigger/invoke?token=自定义Token
事件:Push

之后每次 git push,仓库会自动通知 Jenkins 触发构建。

七、构建产物归档与邮件通知

归档构建产物:

在流水线 post 或自由风格项目"构建后操作"里添加:

archiveArtifacts artifacts: 'dist/**'

邮件通知:

  1. 系统管理 -> 系统配置 -> 邮件通知,填 SMTP 服务器、账号密码、默认收件人;
  2. 流水线 post 里加:
post {
    failure {
        mail to: 'ops@example.com', subject: "构建失败:${env.JOB_NAME}",
             body: "查看详情:${env.BUILD_URL}"
    }
}

八、常见问题排查

1. 初始密码文件找不到

看看 Jenkins 是否真的启动了,或路径不同:

find / -name initialAdminPassword 2>/dev/null

2. 构建时提示 git: command not found

Jenkins 运行用户(jenkins)的 PATH 问题,在构建步骤里用绝对路径或加环境变量:

environment { PATH = "/usr/bin:${env.PATH}" }

3. 构建一直卡在拉取代码

检查凭据是否正确、仓库地址能否被 Jenkins 服务器访问(内网 Git 要确认网络通)。

4. rsync 部署提示 Permission denied

Jenkins 运行用户没有权限或 SSH 密钥没配。给 jenkins 用户配置到目标服务器的 SSH 免密:

sudo -u jenkins ssh-keygen -t ed25519
sudo -u jenkins ssh-copy-id root@192.168.1.20

5. 端口 8080 被占用

修改 /etc/sysconfig/jenkins 里的 JENKINS_PORT,或改用其他端口。

总结

Jenkins 的核心就是"把部署动作固化成流水线":安装 -> 初始化 -> 配置 Git 凭据 -> 写 Pipeline(拉代码/构建/部署)-> 触发(轮询或 Webhook)-> 通知。跑通第一条流水线后,发布就变成了"推代码"这一个动作。配合 Jenkinsfile 存到 Git,整个 CI/CD 流程可版本化、可复用,团队协作效率直接上一个台阶。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Portainer 安装与使用教程:Docker 可视化管理面板,容器/镜像/网络/日志一屏管完

OpenVPN 搭建教程:从零配置服务端与客户端,手机电脑安全接入内网

评 论
更换验证码