Jenkins持续集成实战教程:手把手教你搭建CI/CD自动化部署流程

Jenkins持续集成实战教程:手把手教你搭建CI/CD自动化部署流程 一

文章目录CloseOpen

本文专为零基础入门及需要实操提升的读者打造,用「手把手」的方式拆解Jenkins实战流程:从环境搭建(Windows/Linux系统配置)、必备插件安装(Git、Maven、Docker等),到流水线Pipeline脚本编写、自动化测试集成(JUnit、Selenium),再到最终部署到服务器(Tomcat/Nginx/K8s)的全流程演示。每个步骤附详细截图与代码示例,同步解析常见踩坑点,比如插件版本兼容、权限配置错误、流水线失败排查等实用技巧。

无论你是开发、运维还是测试人员,跟着教程操作,2小时即可从零搭建一套稳定的CI/CD自动化体系,让项目迭代速度提升50%以上,彻底告别「改一行代码,全流程手动跑一遍」的低效模式。现在开始,让Jenkins为你的团队协作注入自动化动力!

你有没有过这样的经历?团队里每次发布新版本,开发、测试、运维围着服务器加班到半夜,手动敲命令部署,结果因为少传了一个配置文件,整个系统挂了半小时?或者明明改了一行代码,却要手动跑测试、打包、上传服务器,重复操作两小时,最后发现只是个拼写错误?我见过太多小团队因为没有自动化部署流程,把本该用来写代码的时间,浪费在这些机械重复的工作上——这就是为什么今天要跟你聊Jenkins,这个能让你“下班准时走,部署不背锅”的神器。

为什么Jenkins能成为CI/CD的“万能工具”?

去年帮一个做SaaS产品的朋友搭CI/CD流程时,他们团队正被“每周二固定发布日”折磨得够呛:开发写完代码丢给测试,测试测完再打包给运维,运维手动传到服务器,整个流程至少3小时,还经常因为“测试环境和生产环境配置不一样”“代码没合并全”之类的问题返工。当时我跟他们说:“试试Jenkins吧,搭好了你们连发布按钮都不用点。”三个月后再问,他们已经实现了“代码提交即部署”,测试环境每天自动更新5次,生产环境每周稳定发布3次,团队再也不用为部署加班了。

从“手动搬砖”到“自动化流水线”,Jenkins到底解决了什么?

你可能会说:“现在CI/CD工具那么多,GitLab CI、GitHub Actions不也能自动化吗?为啥非要选Jenkins?”这就得从CI/CD的核心需求说起了——稳定、灵活、能集成你现有的所有工具。我之前对比过三款主流工具,发现Jenkins的优势特别明显:

工具 社区支持 插件数量 学习曲线 部署复杂度
Jenkins ★★★★★(18年历史,活跃社区) 1800+(几乎覆盖所有开发工具) 中等(入门简单,深入需学Pipeline) 低(支持Windows/Linux/容器部署)
GitLab CI ★★★★☆(依赖GitLab生态) 500+(需配合GitLab使用) 低(配置文件简单) 中(需依赖GitLab Runner)
GitHub Actions ★★★★☆(GitHub生态内) 1000+(Marketplace插件) 低(YAML配置直观) 低(GitHub内置,无需额外部署)

(数据来源:各工具官方文档及2023年DevOps工具调研报告,表格仅作功能对比参考)

为什么Jenkins的插件生态这么重要?举个例子:你用Python写后端,需要集成PyTest做单元测试;同时用Docker容器部署,还要推镜像到阿里云仓库;最后用钉钉机器人发部署通知——这些需求,Jenkins都能通过插件搞定(Python插件、Docker插件、DingTalk插件),而其他工具可能需要自己写脚本适配。RedHat的DevOps指南中提到,CI/CD工具的选择应该优先考虑社区活跃度和插件生态,因为开发工具更新快,只有插件多的工具才能跟得上变化(RedHat DevOps博客 rel=”nofollow”)。

别被“开源免费”迷惑,Jenkins的真正优势是“掌控感”

很多人觉得Jenkins老了,不如新兴工具“时髦”,但我要告诉你:越是复杂的业务场景,越需要Jenkins。去年给一个银行客户做项目时,他们的部署流程涉及6个环境(开发、测试、预发、生产等),每个环境的数据库配置、权限控制都不一样,还需要审批流程——这种定制化需求,GitHub Actions根本扛不住,而Jenkins可以通过“多节点部署”+“权限矩阵”+“插件开发”完美解决。

而且Jenkins完全部署在你自己的服务器上,数据和流程都在自己手里。不像云厂商的CI/CD工具,万一哪天政策变了或者涨价了,迁移成本极高。Jenkins官方2023年的用户调查显示,65%的企业级用户选择Jenkins的首要原因是“数据私有可控”,尤其是金融、医疗这些对合规要求高的行业(Jenkins官方博客 rel=”nofollow”)。

2小时从零搭完CI/CD流水线,我连踩坑笔记都给你整理好了

说了这么多,你可能已经想动手试试了。别担心,哪怕你是第一次接触CI/CD,跟着下面的步骤走,2小时绝对能搭起来。我会把最容易踩坑的地方标出来,就像当年我带实习生时一样,手把手教你避坑。

第一步:把Jenkins“请”到服务器上(环境准备避坑指南)

安装Jenkins前,有个“致命前提”:必须先装Java。因为它是Java写的,没有Java环境根本启动不了。我见过太多人直接下载Jenkins安装包,双击后弹出“找不到Java”,然后就卡壳了。

  • Windows系统安装:去Oracle官网下载JDK 11或17(别选JDK 8,太老了;也别选JDK 21,部分插件不兼容),安装时记得勾选“设置环境变量”,不然Jenkins启动时会报错“JAVA_HOME not set”。装完Java,去Jenkins官网下LTS版(长期支持版,比如2.401.3),双击安装包,一路“下一步”,注意安装路径别带中文(之前有个同事装在“D:程序文件”,结果日志全是乱码)。安装完成后,浏览器会自动打开http://localhost:8080,这时候需要输入初始密码——密码在“C:Program FilesJenkinssecretsinitialAdminPassword”文件里,用记事本打开复制即可。
  • Linux系统安装:比Windows简单,以CentOS为例,先装Java:yum install java-11-openjdk-devel -y,装完输java -version确认(显示“openjdk version 11.x.x”就对了)。然后添加Jenkins仓库: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.key,最后yum install jenkins -y。启动Jenkins:systemctl start jenkins,设置开机启动:systemctl enable jenkins。这时候访问服务器IP:8080,初始密码在“/var/lib/jenkins/secrets/initialAdminPassword”里,用cat命令查看就行。
  • 最容易踩的坑

    :端口冲突。Jenkins默认用8080端口,如果服务器上已经跑了Tomcat或Nginx,会启动失败。解决办法:修改配置文件,Windows在“Jenkins安装目录jenkins.xml”里改里的httpPort=8081(换成8081、8090等空闲端口);Linux在“/etc/sysconfig/jenkins”里改JENKINS_PORT="8081",改完重启Jenkins。

    第二步:给Jenkins“装装备”(必装插件及配置技巧)

    进入Jenkins后,会让你选“安装推荐插件”或“自选插件”,千万别选推荐插件!推荐插件里有很多你用不上的(比如CVS插件,现在谁还用CVS啊),白白占内存。我 手动选这几个核心插件,够用90%的场景:

  • Git插件:集成Git,拉取代码必须用
  • Maven Integration:如果你用Maven构建Java项目
  • Pipeline:实现流水线功能(核心中的核心,后面写部署流程全靠它)
  • Docker Pipeline:集成Docker(容器部署必备)
  • Credentials Binding:管理敏感信息(比如Git账号、服务器密码,避免明文写在脚本里)
  • 安装插件时,注意版本兼容性。比如Pipeline插件和Jenkins版本要匹配,如果你用Jenkins 2.401,Pipeline插件选2.40左右的版本就行(去插件官网查“Compatible Version”)。之前有个团队装了最新的Pipeline插件(3.0),结果和Jenkins 2.300不兼容,整个系统启动不了,最后只能卸载重装。

    插件装好后,还要配置“全局工具”:告诉Jenkins你的JDK、Maven、Git在哪。比如JDK配置:进入“系统管理→全局工具配置”,找到“JDK”,勾掉“自动安装”,输入“JDK名称”(随便起,比如“JDK11”),“JAVA_HOME”填你安装Java的路径(Windows一般是“C:Program FilesJavajdk-11.x.x”,Linux是“/usr/lib/jvm/java-11-openjdk-xxx”)。Maven和Git同理,这样后面构建项目时,Jenkins才知道去哪里找这些工具。

    第三步:写个“部署剧本”(Pipeline流水线从入门到上手)

    Pipeline是Jenkins的灵魂,简单说就是把部署流程写成“剧本”,Jenkins按剧本自动执行。剧本用Groovy语言写,听起来复杂?其实就像写“做饭步骤”:第一步淘米,第二步煮饭,第三步炒菜——Pipeline就是“第一步拉代码,第二步跑测试,第三步打包,第四步部署”。

    我以一个Spring Boot项目为例,教你写第一个Pipeline脚本(后面会给你完整代码,直接复制改改就能用)。假设你的代码存在GitHub上,需要用Maven打包,然后部署到Linux服务器的Tomcat里。

    先搞懂Pipeline的“三大块”

    一个完整的Pipeline脚本分三部分:

  • agent:告诉Jenkins在哪里执行(用agent any表示在任意节点执行,新手就用这个)
  • stages:定义部署的“大步骤”(比如“拉取代码”“编译构建”“部署到服务器”)
  • steps:每个大步骤里的“小操作”(比如拉代码用git url: 'https://github.com/xxx/xxx.git'
  • 手把手写脚本(附详细注释)

    下面是完整的Pipeline脚本,我标了注释,你跟着改几个地方就行:

    pipeline {
    

    agent any // 在任意可用节点执行

    tools {

    maven 'Maven3.8' // 这里填你在“全局工具配置”里配的Maven名称

    jdk 'JDK11' // 填JDK名称

    }

    stages {

    stage('拉取代码') { // 第一个大步骤:从Git拉代码

    steps {

    git url: 'https://github.com/你的用户名/你的项目.git', branch: 'main' // 改Git地址和分支

    echo '代码拉取完成!'

    }

    }

    stage('编译构建+单元测试') { // 第二个大步骤:用Maven打包,同时跑单元测试

    steps {

    sh 'mvn clean package -Dmaven.test.skip=false' // -Dmaven.test.skip=false表示跑测试

    echo '构建完成,生成的jar包在target目录下'

    }

    post {

    success {

    junit 'target/surefire-reports/.xml' // 收集测试报告(需要JUnit插件)

    echo '单元测试全部通过!'

    }

    failure {

    echo '单元测试失败,停止部署!' // 测试失败就不往下走了

    }

    }

    }

    stage('部署到服务器') { // 第三个大步骤:把jar包传到服务器并启动

    steps {

    sshPublisher(publishers: [sshPublisherDesc(

    configName: '生产服务器', // 这里填你配置的服务器名称(下面教你怎么配)

    transfers: [sshTransfer(

    sourceFiles: 'target/.jar', // 要上传的文件(target目录下的jar包)

    remoteDirectory: '/opt/app', // 服务器上存放jar包的目录

    execCommand: 'cd /opt/app && nohup java -jar xxx.jar &' // 启动命令(xxx.jar换成你的jar包名)

    )]

    )])

    echo '部署成功!'

    }

    }

    }

    }

    关键配置:服务器连接(避免“权限被拒”)

    脚本里的“生产服务器”怎么配?进入“系统管理→系统配置”,找到“SSH remote hosts”,点“新增”:

  • Name:填“生产服务器”(和脚本里的configName一致)
  • Hostname:服务器IP
  • Username:登录服务器的用户名(比如root)
  • Authentication:选“Password”,输入服务器密码(如果用密钥登录更安全,新手先从密码开始)
  • 保存后,点“Test Configuration”测试连接,显示“Success”就对了。之前有个实习生配完连不上,排查半天才发现:服务器防火墙没开22端口(firewall-cmd zone=public add-port=22/tcp permanent,然后firewall-cmd reload)。

    最后一步:按“播放键”跑起来(验证流程+问题排查)

    脚本写完后,在Jenkins首页点“新建任务”,选“流水线”,名称随便起(比如“我的第一个部署流水线”),拉到最下面“流水线”→“定义”选“Pipeline script”,把上面的脚本复制进去,点“保存”。然后点“立即构建”,这时候你会看到一个进度条,点进去能看实时日志。

    如果一切顺利,日志会显示“拉取代码→构建成功→部署成功”;如果失败,别慌,日志会告诉你哪里错了:

  • “git: command not found”:没配Git路径,去“全局工具配置”配Git
  • “maven: command not found”:Maven名称和脚本里的“tools”部分不匹配
  • “Permission denied”:服务器密码错了,或者登录用户没权限写/opt/app目录
  • 你可以把日志复制到文本编辑器里,搜“ERROR”定位问题,就像查作业错题一样简单。等构建成功后,访问你的项目地址,应该能看到最新的代码效果了——这时候你再改一行代码提交到Git,Jenkins会自动触发构建(需要在项目配置里勾“轮询SCM”,设置H/5 表示每5分钟检查一次代码更新),全程不用你动手。

    现在,你已经有了一套能跑的CI/CD流水线。试试给项目加个功能,提交代码后泡杯咖啡,看着Jenkins自动帮你搞定测试、打包、部署——这种“掌控感”,才是开发的快乐啊。如果你按这些步骤搭的时候遇到问题,欢迎在评论区告诉我具体报错信息,我帮你看看哪里出了岔子。 当年我踩过的坑,可不想你再掉进去一次。


    Jenkins这工具兼容性是真的强,你手头有啥服务器环境基本都能往上怼。传统服务器肯定没问题,不管是公司机房里那种笨重的物理机,还是你自己笔记本上搭的虚拟机,只要装了Windows或者Linux系统,照着教程一步步配就行——我之前帮朋友的小团队搭的时候,他们用的还是好几年前的旧服务器,跑个CentOS系统,照样把Jenkins跑得飞起。哪怕服务器上已经装了Tomcat或者Nginx也不怕,稍微改下Jenkins的端口(默认8080,换成8090、9000这些空闲的就行),完全不冲突。

    要是你们团队已经在用容器化那套,Docker或者K8s环境里跑Jenkins更方便。现在很多公司都喜欢把工具打包成容器,你直接拉个Jenkins的官方镜像,用Docker Compose写几行配置,连Java环境都不用单独装,容器里自带,启动速度还快。我见过最夸张的,有团队直接在K8s集群里部署Jenkins,用Pod当构建节点,资源不够了自动扩容,简直是“懒人福音”。

    至于云服务器,阿里云、腾讯云、AWS这些主流的肯定支持,操作跟本地服务器差不多。就拿阿里云ECS举例,你买个2核4G的入门机型(跑Jenkins足够了),先在服务器上装Java(记得选JDK 11或17,别用太老的版本),然后按Linux安装步骤把Jenkins装上,最后在云服务器的安全组里把8080端口打开——这步千万别忘,不然你本地浏览器输IP:8080根本访问不到登录页面,我第一次用云服务器就踩过这坑,捣鼓半天发现是安全组没配置。等Jenkins跑起来,再装个Docker插件,代码提交后自动打包成镜像推到阿里云仓库,最后部署到K8s集群,整个流程全在云上跑完,连服务器都不用自己维护,省心得很。


    Jenkins适合个人开发者还是只能企业团队使用?

    Jenkins既适合个人开发者也适合企业团队。个人开发者可以用它自动化小型项目的测试和部署,比如个人博客或开源工具;企业团队(尤其是中大型团队)则能通过插件扩展和权限管理,支持多环境部署、复杂流水线和团队协作。文章中提到,无论是“帮朋友的SaaS产品团队”还是“金融行业的企业级用户”,都能通过Jenkins提升效率,其灵活性可适配不同规模需求。

    安装Jenkins对电脑配置有什么要求?

    基础配置要求不高,个人学习或小型项目只需满足:

  • 安装Java环境(推荐JDK 11或17,不 用JDK 8或21,避免插件兼容问题);
  • 至少2GB内存(运行时 4GB以上,避免因内存不足导致插件加载失败);3. 硬盘空间5GB以上(用于存储插件、构建产物和日志)。Windows或Linux系统均可,文章中提供了两种系统的详细安装步骤。
  • Pipeline脚本写好后运行失败,怎么快速定位问题?

    可通过Jenkins的构建日志排查:在构建页面点击“控制台输出”,搜索“ERROR”关键词定位具体错误。常见问题及解决方向:若提示“git: command not found”,检查是否在“全局工具配置”中正确设置了Git路径;若显示“Permission denied”,可能是服务器登录密码错误或目标目录权限不足;若单元测试失败,日志会显示具体测试用例结果。文章中提到“把日志复制到文本编辑器里,搜‘ERROR’定位问题”,这是最直接的调试方法。

    Jenkins和GitLab CI、GitHub Actions相比,新手更适合先学哪个?

    新手 先学Jenkins。根据文章中的工具对比表格,Jenkins的优势在于插件生态最丰富(1800+插件)、社区支持成熟(18年历史),且支持本地化部署,适合边学边练。GitLab CI和GitHub Actions更依赖对应的代码托管平台(需配合GitLab/GitHub使用),而Jenkins可独立运行,对新手更友好。文章提到“哪怕是第一次接触CI/CD,跟着步骤走2小时就能搭起来”,入门门槛较低。

    Jenkins能部署到哪些服务器环境?支持云服务器吗?

    Jenkins支持多种服务器环境和部署方式。文章中提到可部署到传统服务器(如安装Tomcat、Nginx的物理机或虚拟机)、容器环境(Docker、K8s),也支持云服务器(阿里云、腾讯云等)。部署时只需确保云服务器开放对应端口(默认8080,可自定义),并安装Java环境即可。 将Jenkins部署在阿里云ECS上,配合Docker插件可直接推送镜像到云仓库,实现云端自动化部署

    0
    显示验证码
    没有账号?注册  忘记密码?