Jenkins基础教程(69)Jenkins运行新的构建作业:打包手不抖了!Jenkins构建作业全指南

  • 时间:2025-11-26 20:57 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:每次手动打包部署心里直打鼓?快来认识一下你的新保镖——Jenkins,这位自动化界的老司机能让你彻底告别重复劳动,跟手动打包的苦日子说拜拜! 1 CI/CD:不只是听起来高大上 想象一下你做饭的流程:买菜(写代码)→洗切配(构建)→尝味道(测试)→上桌(部署)。传统手工模式是你一个人吭哧吭哧干完所有步骤,累了不说,端盘子上桌时万一失手,整盘菜撒一地……完犊子! 而CI/CD自动化流水线就像是

每次手动打包部署心里直打鼓?快来认识一下你的新保镖——Jenkins,这位自动化界的老司机能让你彻底告别重复劳动,跟手动打包的苦日子说拜拜!

1 CI/CD:不只是听起来高大上

想象一下你做饭的流程:买菜(写代码)→洗切配(构建)→尝味道(测试)→上桌(部署)。传统手工模式是你一个人吭哧吭哧干完所有步骤,累了不说,端盘子上桌时万一失手,整盘菜撒一地……完犊子!

CI/CD自动化流水线就像是你开了个“自动化厨房”:

CI(持续集成):只要你买好菜放进口袋(代码提交到仓库),它就自动洗切配、尝咸淡,快速发现“菜”本身的问题。CD(持续交付/部署):CI验证合格的“预制菜”,可以自动打包好随时上桌,或者直接自动端上指定餐桌。

Jenkins就是这个帮你搭建和管理“自动化厨房”的超级管家!你只管提交代码(买菜),它帮你搞定后面所有流水线操作。

2 Jenkins初体验:把你的电脑变成自动化工厂

2.1 准备工作:给“老司机”发个“上岗证”

Jenkins是个纯Java应用,所以它跑起来的前提是,你的电脑上得有Java环境。这就好比你要请一个外国管家,得先确保他会说你们家的语言一样。

打开你的终端(Mac/Linux)或者CMD/PowerShell(Windows),输入以下命令:


java -version

如果显示类似 java version "17.0.5"的信息,恭喜你!可以直接下一步。如果显示“命令未找到”或版本太老,就需要手动安装一个。

Mac用户可以用Homebrew一键安装:


brew install openjdk@17

Windows用户可以去Oracle官网下载安装包,记得配置环境变量。

2.2 安装Jenkins:三种姿势任你选

姿势一:Docker党福音(最简单!)

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

访问 http://你的服务器IP:8080,按照提示从初始密码解锁就行。

姿势二:War包手动档(通用)


wget https://get.jenkins.io/war-stable/latest/jenkins.war
java -jar jenkins.war --httpPort=8080
姿势三:Linux包管理(Debian/Ubuntu)


sudo apt-get install jenkins
sudo systemctl start jenkins

安装完成后,访问http://localhost:8080就能看到Jenkins的欢迎界面了!

2.3 初始配置:给管家定规矩

第一次使用Jenkins,你需要:

安装推荐插件:初始化向导通常会让你选,新手直接装推荐的就行(包含了Git、Maven等常用插件)。创建管理员用户:设置你的用户名密码。配置系统设置:进入 系统管理 > 全局工具配置,在这里指定你机器上JDK、Git、Maven的路径。

3 创建你的第一个构建作业:从“Hello World”开始

在Jenkins中,**构建作业(Job)**是实现自动化的基本单位。就像工厂里的生产线,每条生产线都有特定任务。

3.1 自由风格项目:最简单的开始

点击Jenkins首页的新建Item,输入任务名称 My-First-Project,选择构建一个自由风格的软件项目,然后点击OK。

现在我们来配置这个作业:



1. 源码管理:选择Git,填入你的仓库URL
2. 构建触发器:选择Poll SCM,日程表填`H/5 * * * *`(每5分钟检查一次代码变化)
3. 构建步骤:增加构建步骤 → 执行Shell
4. 在命令框中输入:`echo "Hello, Jenkins!"`

保存后点击立即构建,Jenkins就会执行你的第一个作业了!点击构建历史中的构建号,查看控制台输出,你就能看到那句熟悉的“Hello, Jenkins!”。

3.2 管道项目:更强大的方式

对于更复杂的项目,推荐使用Pipeline(管道)。Pipeline是一系列相互关联的事件或任务,用于在软件开发流程中实现持续交付。

创建一个新的Pipeline项目,这次选择Pipeline而不是自由风格。

在Pipeline脚本框中,输入以下内容:



pipeline {
    agent any
    stages {
        stage('Hello') {
            steps {
                echo 'Hello, Jenkins!'
            }
        }
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}

点击保存并运行,你会看到一个清晰的阶段视图,每个阶段都有独立的状态显示。

4 Jenkinsfile:把流水线当作代码来管理

4.1 为什么需要Jenkinsfile?

创建一个 Jenkinsfile并放入源码库,可以带来诸多好处:

代码评审/迭代:像对待普通代码一样评审Pipeline变更审计轨迹:记录Pipeline的每一次变更唯一可信源:项目成员都可以查看和编辑Pipeline

4.2 一个真实的Jenkinsfile示例

以下是一个真实的Java Maven项目Jenkinsfile示例:



pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        stage('Build') {
            steps {
                script {
                    sh 'mvn clean package'
                }
            }
        }
        stage('Archive Artifacts') {
            steps {
                archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
            }
        }
    }
}

这个Pipeline包含三个阶段:

Checkout:从源代码管理系统(SCM)中检出代码Build:使用Maven命令构建Java项目Archive Artifacts:归档构建产物(JAR文件)

4.3 两种Pipeline语法:声明式 vs 脚本式

Jenkins支持两种Pipeline语法:

声明式Pipeline(推荐新手使用):



pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building..'
            }
        }
    }
}

脚本式Pipeline(更灵活强大):



node {
    stage('Build') {
        echo 'Building....'
    }
}

5 实战示例:从简单到高级

5.1 触发另一个作业:建立作业间的关联

在Jenkins中,一个作业可以触发另一个作业的执行,这在构建复杂流水线时非常有用。

假设我们有一个子任务 childJob,现在要创建一个父级管道任务来触发它:



pipeline {
    agent any
    stages {
        stage('build') {
            steps {
                echo "parentJob"
            }
        }
        stage('triggerChildJob') {
            steps {
                build job: "childJob", wait: true
            }
        }
    }
}

build job: "childJob", wait: true这行代码会触发 childJob并等待它完成。 wait: true参数确保父作业会等待子作业完成后再继续,这对于需要严格顺序执行的流程非常重要。

5.2 参数化构建:让作业更灵活

参数化构建允许你在运行作业时传入参数,大大增加作业的灵活性。

在作业配置中,勾选**"此构建参数化"**,然后添加参数,比如字符串参数、选项参数等。

例如,添加一个 DEPLOY_ENV参数,允许值为 dev staging prod。然后在Shell脚本中使用:


echo "Deploying to ${DEPLOY_ENV} environment"

在Pipeline中,你可以这样定义参数:



pipeline {
    agent any
    parameters {
        string(name: 'DEPLOY_ENV', defaultValue: 'dev', description: 'Deployment environment')
        choice(name: 'BUILD_TYPE', choices: ['Release', 'Debug'], description: 'Build type')
    }
    stages {
        stage('Deploy') {
            steps {
                echo "Deploying to ${params.DEPLOY_ENV}"
                script {
                    if (params.BUILD_TYPE == 'Release') {
                        echo 'Performing release build...'
                    } else {
                        echo 'Performing debug build...'
                    }
                }
            }
        }
    }
}

5.3 使用Shell脚本执行复杂任务

在Jenkins中,你可以使用Shell脚本执行各种复杂的构建任务。



pipeline {
    agent any
    stages {
        stage('Build and Test') {
            steps {
                script {
                    sh '''
                        echo "Starting build process..."
                        mvn clean compile
                        mvn package -DskipTests
                        echo "Build completed!"
                    '''
                }
            }
        }
        stage('Run Tests') {
            steps {
                script {
                    sh '''
                        echo "Running tests..."
                        mvn test
                        echo "Tests completed!"
                    '''
                }
            }
        }
    }
}

6 高级技巧:让Jenkins飞起来

6.1 定时构建和Webhook触发

定时构建使用类似Cron的语法:



H 2 * * *  # 每天凌晨2点构建
H/30 * * * *  # 每30分钟构建一次

Webhook触发则可以实现代码推送后立即构建,在Git仓库的Webhook中配置Jenkins的URL(需安装GitHub/GitLab插件)。

6.2 并行执行:提升流水线效率

当你有多个独立任务时,并行执行可以显著缩短流水线执行时间:



stage('Parallel Tests') {
    steps {
        parallel(
            "Unit Tests": {
                sh 'mvn test'
            },
            "Integration Tests": {
                sh 'mvn integration-test'
            }
        )
    }
}

6.3 错误处理和通知

完善的错误处理可以让你的流水线更加健壮:



pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    try {
                        sh 'mvn clean package'
                    } catch (Exception e) {
                        echo "Build failed: ${e.message}"
                        // 发送通知到Slack/邮件/钉钉
                        slackSend channel: '#builds', message: "Build failed: ${currentBuild.fullDisplayName}"
                        throw e  // 重新抛出异常,标记构建为失败
                    }
                }
            }
        }
    }
    post {
        always {
            echo 'This will always run,无论构建成功还是失败'
        }
        success {
            echo 'This will run only if the build succeeds'
        }
        failure {
            echo 'This will run only if the build fails'
        }
    }
}

7 最佳实践:Jenkins老司机的心得

一切皆代码:不仅应用代码,连Jenkins配置也应放入源码库。将Jenkinsfile放在项目根目录,跟随代码一起版本控制。保持简洁:每个作业只做一件事,并把它做好。遵循单一职责原则,让作业易于理解和维护。利用插件生态:Jenkins有超过1800个插件,几乎覆盖所有开发、测试、部署环节。但也不要过度依赖插件,有时简单的Shell脚本更可靠。安全第一:及时更新Jenkins和插件,使用Credentials插件管理敏感信息,遵循最小权限原则分配用户权限。监控和日志:定期检查Jenkins系统日志,使用Monitoring插件关注系统资源,设置构建超时防止任务挂起。

结语:拥抱自动化,告别手动打包的苦日子

Jenkins就像你团队中那位不知疲倦的开发者,它365天、24小时待命,永远不会忘记执行某个步骤,也不会因为重复劳动而心生抱怨。

从简单的 echo "Hello, Jenkins"到复杂的多阶段部署流水线,Jenkins能伴随你的项目一起成长。无论你是想摆脱手动打包的繁琐,还是希望建立企业级的CI/CD流程,Jenkins都能提供合适的解决方案。

别再让手动打包消耗你的时间和热情了!今天就开始用Jenkins,让你的代码自己跑起来!


自动化就像编程中的魔法:一开始你觉得它在做和你一样的事情,只是更快更准;直到有一天你发现,它正在做你从未敢想象的事情。——Jenkins老司机感言

  • 全部评论(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)
手机二维码手机访问领取大礼包
返回顶部