Jenkins基础教程(161)Jenkins构建插件支持:Jenkins构建插件大揭秘:你的代码打包自动化利器!

  • 时间:2025-11-26 21:10 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:每次手动打包部署到深夜,你是否也曾仰望星空思考:为啥不让Jenkins这个贴心小助手来干活? 第一章:认识Jenkins,你的构建管家 想象一下这个场景:你刚刚把代码推送到Git仓库,Jenkins就像被按下了启动按钮,立刻开始工作:拉取最新代码、解决依赖关系、运行测试、打包部署,一气呵成。而你,只需要悠闲地品着咖啡,等待构建结果的通知。 1.1 CI/CD:到底是个啥?为啥非得用它? 别

每次手动打包部署到深夜,你是否也曾仰望星空思考:为啥不让Jenkins这个贴心小助手来干活?

第一章:认识Jenkins,你的构建管家

想象一下这个场景:你刚刚把代码推送到Git仓库,Jenkins就像被按下了启动按钮,立刻开始工作:拉取最新代码、解决依赖关系、运行测试、打包部署,一气呵成。而你,只需要悠闲地品着咖啡,等待构建结果的通知。

1.1 CI/CD:到底是个啥?为啥非得用它?

别被这些术语吓到,其实超简单!想象一下你做饭(代码开发):

买菜 (Coding): 吭哧吭哧写代码。洗切配 (Building): 得把代码“处理”成能跑的程序(编译、打包)。尝味道 (Testing): 自己先尝尝咸淡(单元测试、简单功能测试)。上桌 (Deployment): 端给客人(部署到测试/生产环境)。

传统手工模式:你一个人吭哧吭哧干完1234步。累了不说,步骤4万一失手(比如烫到手),整盘菜撒一地… 完犊子!客人饿肚子,你也崩溃。

CI/CD 自动化流水线模式:这是你开了个“自动化厨房”!

CI (持续集成):只要你买好菜放进口袋(代码提交到仓库,比如GitHub)! 自动洗切配(自动构建)自动尝咸淡(自动运行测试)核心目标:快速发现“菜”本身的问题!!!酸了?糊了?咸了?马上告诉你! CD (持续交付/持续部署):CI验证合格的“预制菜”,可以: 自动打包好,随时能上桌(持续交付 - 准备好部署包)。或者,直接自动端上指定餐桌(持续部署 - 自动部署到测试/生产环境)。核心目标:让“好菜”能又快又好地送到“客人”面前!

Jenkins就是那个帮你搭建和管理这个“自动化厨房”的超级管家!你只管提交代码(买菜),它帮你搞定后面所有流水线操作,还能随时报告“菜”的质量!稳不稳?

第二章:Jenkins插件生态——构建的强大后盾

如果说Jenkins本身是超级管家的基础人格,那么插件就是为它装备的各种专业技能。Jenkins的强大,很大程度上源于其丰富的插件生态系统。

2.1 为什么插件如此重要?

插件就像是Jenkins的“应用商店”,让你可以根据需要扩展功能。无论是与GitHub集成、部署到Kubernetes,还是发送漂亮的构建通知,都有对应的插件可以帮你实现。

Jenkins官方插件库中提供了上千款插件,这些都是全球开发者贡献的智慧结晶。有了它们,你的Jenkins才能真正做到“无所不能”。

2.2 必备构建插件清单

在CentOS或其他系统上部署Jenkins时,以下插件堪称必备神器:

Git Plugin:与Git仓库集成的基石,支持代码拉取和推送。Maven Integration Plugin:如果你做Java开发,这个插件负责Maven项目的构建和依赖管理。Pipeline Plugin:定义和管理Jenkins流水线的核心,支持复杂的自动化构建流程。Docker Pipeline Plugin:在Jenkins中执行Docker命令的利器,便于容器化应用的构建和部署。JUnit Plugin:发布和查看JUnit测试报告,让你一目了然测试情况。Email Extension Plugin:替换Jenkins自带的邮件功能,提供更强大的邮件通知能力。HTML Publisher Plugin:发布构建结果的HTML报告,比如测试覆盖率报告等。

第三章:手把手实战自由风格项目

在Jenkins的世界里,自由风格软件项目(Freestyle project)是最灵活、最易上手的一种。它可以用于任何类型的项目,配置简单直观,非常适合初学者入门。

3.1 环境准备:打好地基

Jenkins的安装非常简便,这里以最常见的War包方式为例:

下载Jenkins:访问Jenkins官网,下载最新的War文件。运行Jenkins:在命令行中切换到War文件所在目录,执行:

java -jar jenkins.war

如果需要修改端口,可以使用: java -jar jenkins.war --httpPort=8081
对于Docker爱好者,安装更简单,只需一条命令:


docker run -d --name myjenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-jdk11

初始设置:首次访问Jenkins(通常是http://localhost:8080),会进入初始化设置向导,按照提示解锁Jenkins、安装推荐插件并创建管理员用户即可。

3.2 创建第一个自由风格项目

现在让我们开始创建第一个自由风格项目:

在Jenkins主页面,点击左侧菜单的**“新建任务”**。输入任务名称,例如 “My-First-Freestyle-Project”。选择**“构建一个自由风格的软件项目”**。点击**“确定”**进入配置页面。

命名技巧:任务名称应有明确含义,便于后续识别和管理。注意创建后不要轻易更改名称,因为很多内部文件都是以任务名称命名的。

3.3 详细配置步骤

3.3.1 通用配置(General)

在通用配置部分,设置一些项目的基本信息:

项目描述:简要描述项目的用途,例如“这是一个示例前端项目,用于演示Jenkins构建流程”。丢弃旧的构建:防止构建历史占用过多磁盘空间的重要设置。建议保持构建的天数为7天,最大个数为10-20个。参数化构建:如果需要根据不同参数执行不同构建流程,可以在这里定义参数。例如,定义部署环境参数(开发/测试/生产)。
3.3.2 源码管理(Source Code Management)

这是自动化构建的关键——告诉Jenkins从哪里获取代码:

选择Git(如果你使用其他版本控制系统,如SVN,请选择对应选项)。在Repository URL中输入你的代码仓库地址。配置认证信息:如果使用SSH认证,需要添加SSH私钥;如果使用HTTP认证,需要添加用户名和密码。
3.3.3 构建触发器(Build Triggers)

构建触发器决定何时启动自动构建,常见的触发器有:

定时构建:像cronjob一样按计划执行,例如每15分钟一次: H/15 * * * *轮询SCM:定期检查代码仓库是否有变更,有变更则构建。GitLab webhook:当代码推送到GitLab时,自动触发构建。
3.3.4 构建(Build)——核心环节

这是构建过程的核心部分,可以添加多个构建步骤。对于自由风格项目,最常见的构建步骤是执行Shell脚本或Windows批处理命令。

示例Shell脚本:



echo "开始构建..."
# 显示构建信息
echo "当前工作目录:$(pwd)"
echo "构建编号:$BUILD_NUMBER"
# 安装依赖
npm install
# 运行测试
npm test
# 构建项目
npm run build
echo "构建完成!"

注意:Jenkins执行Shell脚本时,默认工作目录是Jenkins主目录/workspaces/以job名称命名的文件夹。

3.3.5 构建后操作(Post-build Actions)

构建完成后,我们通常需要做一些后续工作:

归档制品:将构建产物(如JAR、WAR文件)保存起来。发布JUnit测试结果报告:如果项目有单元测试,可以生成测试报告。邮件通知:将构建结果通知相关人员。触发其他项目:构建成功后自动触发下游任务。

第四章:进阶玩法:Pipeline as Code

自由风格任务上手快,但配置复杂流水线时,界面操作就有点力不从心且不易维护了。Jenkins Pipeline(流水线)是更强大、更灵活、也更推荐的方式!核心思想:用代码(Groovy DSL)定义你的整个构建、测试、部署流程!

4.1 为啥要用Pipeline?好处大大滴!

版本化:Pipeline脚本(通常叫Jenkinsfile)可以跟项目代码一起存在Git仓库里!修改流程就像改代码一样清晰可追溯。可重用:定义好的Pipeline步骤可以复用在不同项目。复杂流程支持:轻松处理并行执行、条件判断等复杂场景。可视化:Pipeline的Stages View可以清晰展示每个阶段的执行状态和时间。

4.2 Pipeline入门示例

创建一个名为 Jenkinsfile的文件,放在项目根目录,内容如下:



pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml'
                }
            }
        }
        stage('Deliver') {
            steps {
                sh './jenkins/scripts/deliver.sh'
            }
        }
    }
}

这个Pipeline定义了三个阶段:构建、测试和交付,清晰明了。

4.3 高级Pipeline示例

下面是一个更复杂的示例,展示了多环境构建和条件判断:



// 假设你已向Jenkins添加了一个名为'ecdc-pipeline'的库
@Library('ecdc-pipeline')
import ecdcpipeline.BuildNode
import ecdcpipeline.PipelineBuilder
 
// 构建一个映射,描述流水线将在哪些构建节点上运行
def buildNodes = [
  'centos-debug': BuildNode.getDefaultBuildNode('centos7'),
  'centos-release': BuildNode.getDefaultBuildNode('centos7'),
  'ubuntu': new BuildNode('essdmscdm/ubuntu18.04-build-node:1.1.0', 'bash -e')
]
 
// 实例化一个PipelineBuilder对象来生成构建器
def pipelineBuilder = new PipelineBuilder(this, buildNodes)
 
echo pipelineBuilder.project
echo pipelineBuilder.branch
 
// 为每个构建节点创建构建器,使用参数化流水线。
def builders = pipelineBuilder.createBuilders { container ->
  stage('First Stage') {
    echo 'In first stage'
    // 在Jenkins构建节点上运行的shell脚本(不在容器内)。
    sh 'hostname'
    // 在容器上运行的shell脚本。
    container.sh 'pwd'
  }
 
  // 该参数有一个'name'字段,可用于条件阶段。
  if (container.name == 'centos-release') {
    stage('Release Stage') {
      echo 'This stage is only run on centos-release'
      container.sh 'ls -la'
    }
  }
 
  stage('Another Stage') {
    // 可以使用三个引号来编写多行脚本。
    container.sh """
      cd code
      pwd
      ls -la
      cd ..
      mkdir build
      cd build
      echo TEST > test.txt
    """
    container.copyFrom('/home/jenkins/build/test.txt', '.')
    sh """
      ls -la
      cat test.txt
    """
  }
}
 
// 在协调器节点上检出代码,并并行启动构建器。
parallel builders

这个示例展示了如何在多个容器环境中并行执行构建,并根据条件执行特定阶段。

第五章:自己动手开发Jenkins插件

当Jenkins现有的功能无法满足你的特殊需求时,别担心,你可以自己开发插件!Jenkins提供了完善的插件开发框架。

5.1 创建你的第一个插件

打开命令提示符,找到你想要存储新Jenkins插件的目录,然后运行以下命令:


mvn -U archetype:generate -Dfilter=io.jenkins.archetypes:

选择 hello-world原型(在本教程中编号为4),然后按照提示输入插件信息:



Choose archetype:
1: remote -> io.jenkins.archetypes:empty-plugin
...
4: remote -> io.jenkins.archetypes:hello-world-plugin
Choose a number: 4
Define value for property 'artifactId': demo

这会创建一个工作插件的基本结构,你可以在此基础上进行开发。

5.2 扩展插件功能

让我们创建一个在构建日志中记录问候语的功能,并添加适当的数据结构。

首先,创建一个实现Action接口的类:



package io.jenkins.plugins.sample;
 
import hudson.model.Action;
 
public class HelloWorldAction implements Action {
    private String name;
    
    public HelloWorldAction(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
    
    @Override
    public String getIconFileName() {
        return "document.png";
    }
    
    @Override
    public String getDisplayName() {
        return "Greeting";
    }
    
    @Override
    public String getUrlName() {
        return "greeting";
    }
}

然后,我们需要在构建步骤中创建该类的实例:



@Override
public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
    run.addAction(new HelloWorldAction(name));
    if (useFrench) {
        listener.getLogger().println("Bonjour, " + name + "!");
    } else {
        listener.getLogger().println("Hello, " + name + "!");
    }
}

接下来,创建一个视图来显示存储的构建信息。在 src/main/resources/io/jenkins/plugins/sample/HelloWorldAction/目录创建名为 index.jelly的文件:



<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:l="/lib/layout" xmlns:st="jelly:stapler">
    <l:layout title="Greeting">
        <l:main-panel>
            <h1>
                Name: ${it.name}
            </h1>
        </l:main-panel>
    </l:layout>
</j:jelly>

这样,你就成功创建并扩展了一个Jenkins插件!

第六章:最佳实践与避坑指南

在实际使用Jenkins过程中,遵循一些最佳实践可以让你少走很多弯路。

6.1 插件管理原则

按需安装:不要安装不需要的插件,这会增加维护负担并可能引起冲突。定期更新:保持插件更新可以获得新功能和安全修复,但生产环境更新前要先测试。备份配置:定期备份Jenkins配置,特别是使用SCM Sync Configuration Plugin时。

6.2 构建优化技巧

使用并行构建:像前面Pipeline示例中那样,利用并行执行加速构建过程。合理设置构建保留策略:通过“丢弃旧的构建”防止磁盘空间耗尽。使用缓存:对依赖管理工具(如Maven、NPM)配置缓存,大幅减少构建时间。构建代理优化:确保构建代理有足够资源,并及时清理工作空间。

6.3 安全建议

定期更新Jenkins:使用最新版本确保安全漏洞得到修复。管理用户权限:使用Role-based Authorization Strategy插件精细控制用户权限。安全存储凭证:使用Credentials插件安全管理密码、API密钥等敏感信息。

总结:拥抱自动化,告别手动打包

通过这篇教程,我们深入探索了Jenkins的构建插件支持——从自由风格项目的简单易用,到Pipeline as Code的强大灵活,再到自定义插件开发的无限可能。

记住,Jenkins的真正力量在于它的可扩展性和灵活性。无论你是刚开始接触CI/CD的新手,还是寻求优化复杂工作流程的老手,Jenkins的插件生态系统都能为你提供所需的工具。

现在,是时候告别手动打包的苦役,让Jenkins这位忠实的构建管家为你效劳了。当你再次看到代码提交触发自动构建、测试、部署的全过程时,你会发现:原来高效的软件开发,可以如此优雅!

不要让明天的代码,还在今天手动部署。赶快行动起来,打造属于你自己的自动化构建流水线吧!


附录:常用插件快速参考

插件名称

主要用途

适用场景

Git Plugin

与Git仓库集成

所有需要从Git拉取代码的项目

Pipeline Plugin

定义和管理流水线

复杂构建流程,需要版本化的构建脚本

Docker Pipeline Plugin

执行Docker命令

容器化应用的构建和部署

JUnit Plugin

发布测试报告

需要可视化测试结果的Java项目

HTML Publisher Plugin

发布HTML报告

展示测试覆盖率、API文档等

Email Extension Plugin

增强邮件通知

需要定制化构建通知的团队

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】交换机.路由器.防火墙-技术提升【4.3】(2025-11-26 22:52)
【系统环境|】交换机.路由器.防火墙-技术提升【4.2】(2025-11-26 22:51)
【系统环境|】交换机.路由器.防火墙-技术提升【4.1】(2025-11-26 22:51)
【系统环境|】交换机.路由器.防火墙-技术提升【4.0】(2025-11-26 22:50)
【系统环境|】交换机.路由器.防火墙-技术提升【3.9】(2025-11-26 22:50)
【系统环境|】i.mx8 HDMI显示分辨率异常(软件排查)(2025-11-26 22:49)
【系统环境|】Node.js环境变量配置实战(2025-11-26 22:49)
【系统环境|】交换机.路由器.防火墙-技术提升【3.8】(2025-11-26 22:48)
【系统环境|】交换机.路由器.防火墙-技术提升【3.7】(2025-11-26 22:48)
【系统环境|】10.MHA的部署(2025-11-26 22:47)
手机二维码手机访问领取大礼包
返回顶部