news 2026/1/11 8:44:52

Jenkins自动化构建与CI/CD流水线实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Jenkins自动化构建与CI/CD流水线实战

本文详解Jenkins的安装配置、Pipeline编写、自动化构建部署的完整实践。

前言

持续集成/持续部署(CI/CD)是现代软件开发的标配:

  • 自动化构建:代码提交后自动编译打包
  • 自动化测试:每次构建自动运行测试
  • 自动化部署:测试通过后自动发布

Jenkins是最流行的开源CI/CD工具:

  • 插件生态丰富(1800+插件)
  • 支持各种语言和框架
  • Pipeline as Code

今天来搭建一套完整的Jenkins CI/CD环境。


一、Jenkins部署

1.1 Docker部署(推荐)

# docker-compose.ymlversion:'3.8'services:jenkins:image:jenkins/jenkins:ltscontainer_name:jenkinsprivileged:trueuser:rootports:-"8080:8080"-"50000:50000"volumes:-./jenkins_home:/var/jenkins_home-/var/run/docker.sock:/var/run/docker.sock-/usr/bin/docker:/usr/bin/dockerenvironment:-TZ=Asia/Shanghairestart:unless-stopped
# 创建目录并启动mkdirjenkins_home docker compose up -d# 获取初始密码dockerexecjenkinscat/var/jenkins_home/secrets/initialAdminPassword

1.2 初始化配置

1. 访问 http://服务器IP:8080 2. 输入初始密码 3. 安装推荐插件(或自定义选择) 4. 创建管理员账号 5. 配置Jenkins URL

1.3 必装插件

插件用途
Pipeline流水线支持
GitGit集成
Docker PipelineDocker构建支持
Blue Ocean现代化UI
Credentials Binding凭证管理
SSH AgentSSH部署
安装路径: Manage Jenkins → Plugins → Available plugins

二、第一个Pipeline

2.1 创建Pipeline项目

1. Dashboard → New Item 2. 输入名称,选择"Pipeline" 3. 点击OK

2.2 Hello World Pipeline

pipeline{agent any stages{stage('Hello'){steps{echo'Hello, Jenkins Pipeline!'}}stage('Build'){steps{echo'Building...'sh'echo "Build number: ${BUILD_NUMBER}"'}}stage('Test'){steps{echo'Testing...'}}stage('Deploy'){steps{echo'Deploying...'}}}post{always{echo'Pipeline finished!'}success{echo'Success!'}failure{echo'Failed!'}}}

2.3 运行Pipeline

1. 点击"Build Now" 2. 查看"Console Output" 3. 或使用Blue Ocean查看可视化流程

三、实战:Java项目CI/CD

3.1 项目结构

my-project/ ├── src/ ├── pom.xml ├── Dockerfile └── Jenkinsfile

3.2 Jenkinsfile

pipeline{agent any environment{DOCKER_REGISTRY='registry.example.com'IMAGE_NAME='my-app'DEPLOY_SERVER='192.168.1.100'}tools{maven'Maven-3.8'jdk'JDK-11'}stages{stage('Checkout'){steps{checkout scm echo"Branch: ${env.BRANCH_NAME}"echo"Commit: ${env.GIT_COMMIT}"}}stage('Build'){steps{sh'mvn clean compile -DskipTests'}}stage('Test'){steps{sh'mvn test'}post{always{junit'**/target/surefire-reports/*.xml'}}}stage('Package'){steps{sh'mvn package -DskipTests'archiveArtifacts artifacts:'target/*.jar',fingerprint:true}}stage('Docker Build'){steps{script{defimageTag="${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}"sh"docker build -t ${imageTag} ."sh"docker push ${imageTag}"}}}stage('Deploy'){when{branch'main'}steps{script{defimageTag="${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}"sshagent(['deploy-server-key']){sh""" ssh -o StrictHostKeyChecking=no user@${DEPLOY_SERVER} ' docker pull ${imageTag} docker stop my-app || true docker rm my-app || true docker run -d --name my-app -p 8080:8080 ${imageTag} ' """}}}}}post{success{echo'Pipeline succeeded!'// 发送通知}failure{echo'Pipeline failed!'// 发送告警}}}

3.3 Dockerfile

FROM openjdk:11-jre-slim WORKDIR /app COPY target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]

3.4 配置Git仓库

1. 创建Pipeline项目 2. Pipeline → Definition: "Pipeline script from SCM" 3. SCM: Git 4. Repository URL: 填写Git地址 5. Credentials: 添加Git凭证 6. Branch: */main 7. Script Path: Jenkinsfile

四、凭证管理

4.1 添加凭证

Manage Jenkins → Credentials → System → Global credentials → Add Credentials

4.2 凭证类型

类型用途
Username with passwordGit账号、Docker Registry
SSH Username with private key服务器部署
Secret textToken、API Key
Secret file配置文件

4.3 在Pipeline中使用

pipeline{agent any stages{stage('Deploy'){steps{// 方式1:SSH凭证sshagent(['my-ssh-key']){sh'ssh user@server "command"'}// 方式2:用户名密码withCredentials([usernamePassword(credentialsId:'docker-registry',usernameVariable:'DOCKER_USER',passwordVariable:'DOCKER_PASS')]){sh'docker login -u $DOCKER_USER -p $DOCKER_PASS'}// 方式3:Secret文本withCredentials([string(credentialsId:'api-token',variable:'API_TOKEN')]){sh'curl -H "Authorization: $API_TOKEN" ...'}}}}}

五、多分支Pipeline

5.1 创建多分支Pipeline

1. New Item → Multibranch Pipeline 2. 配置Git仓库 3. Jenkins自动扫描所有分支 4. 每个分支独立构建

5.2 分支策略

pipeline{agent any stages{stage('Build'){steps{sh'mvn package'}}stage('Deploy to Dev'){when{branch'develop'}steps{echo'Deploying to dev environment...'}}stage('Deploy to Staging'){when{branch'release/*'}steps{echo'Deploying to staging environment...'}}stage('Deploy to Production'){when{branch'main'}steps{input message:'确认部署到生产环境?'echo'Deploying to production...'}}}}

六、触发器配置

6.1 常用触发器

pipeline{agent any triggers{// 定时构建(每天凌晨2点)cron('0 2 * * *')// 轮询SCM(每5分钟检查一次)pollSCM('H/5 * * * *')// GitLab/GitHub Webhook触发// 需要在仓库配置Webhook}stages{// ...}}

6.2 Webhook配置

GitLab:

Settings → Webhooks → Add webhook URL: http://jenkins-server:8080/project/项目名 Trigger: Push events

GitHub:

Settings → Webhooks → Add webhook Payload URL: http://jenkins-server:8080/github-webhook/ Content type: application/json

七、跨网络部署

7.1 场景

常见情况: - Jenkins在公司内网 - 生产服务器在云上或分部机房 - 网络不通,无法SSH部署

7.2 组网方案

使用组网软件(如星空组网)打通Jenkins和部署服务器:

┌─────────────────────────────────────────────────────────┐ │ 组网虚拟局域网 │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ 公司内网 │ │ 云服务器/分部 │ │ │ │ │ │ │ │ │ │ Jenkins │ │ 生产服务器 │ │ │ │ 10.10.0.1 │─────→│ 10.10.0.2 │ │ │ │ │ SSH │ │ │ │ └──────────────────┘ └──────────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘

Jenkinsfile配置:

environment{// 使用组网IPDEPLOY_SERVER='10.10.0.2'}stage('Deploy'){steps{sshagent(['deploy-key']){sh""" ssh user@${DEPLOY_SERVER} ' docker pull my-app:latest docker-compose up -d ' """}}}

优势:

  • 不需要公网暴露Jenkins
  • 不需要服务器开放SSH到公网
  • 加密传输,安全可靠
  • 配置简单,一次设置

八、Blue Ocean

8.1 安装Blue Ocean

Manage Jenkins → Plugins → 搜索"Blue Ocean" → Install

8.2 使用Blue Ocean

访问:http://jenkins:8080/blue 特点: - 现代化可视化界面 - Pipeline编辑器 - 分支和PR视图 - 更好的日志展示

九、常见问题

9.1 构建卡住

// 设置超时options{timeout(time:30,unit:'MINUTES')}

9.2 磁盘空间不足

// 保留最近10次构建options{buildDiscarder(logRotator(numToKeepStr:'10'))}

9.3 并行构建

stage('Parallel Tests'){parallel{stage('Unit Tests'){steps{sh'mvn test -Dtest=*Unit*'}}stage('Integration Tests'){steps{sh'mvn test -Dtest=*Integration*'}}}}

十、总结

Jenkins CI/CD要点:

  1. Docker部署:最简单的部署方式
  2. Pipeline as Code:Jenkinsfile版本控制
  3. 凭证管理:安全存储敏感信息
  4. 多分支Pipeline:自动化分支构建
  5. Webhook触发:代码提交自动构建
  6. 跨网络部署:组网打通构建和部署环境

最佳实践:

☑ Jenkinsfile放在代码仓库 ☑ 使用声明式Pipeline ☑ 合理设置构建保留策略 ☑ 配置构建通知(邮件/钉钉/企微) ☑ 定期清理工作空间

参考资料

  1. Jenkins官方文档:https://www.jenkins.io/doc/
  2. Jenkins Pipeline语法:https://www.jenkins.io/doc/book/pipeline/syntax/
  3. Jenkins插件中心:https://plugins.jenkins.io/

💡建议:从简单的Pipeline开始,逐步添加测试、部署等阶段。先跑通流程,再优化细节。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/6 6:01:47

vue基于springboot的基于建筑物识别的无人驾驶车辆路径规划系统

目录已开发项目效果实现截图开发技术介绍系统开发工具:核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式&…

作者头像 李华
网站建设 2026/1/6 5:28:53

启天 M 系列 Smart Power On/Fast boot 置灰?2 步解锁修改权限!

使用联想启天 M 系列商用台式机时,不少用户会遇到一个棘手问题:想要开启或关闭 Smart Power On(智能开机)和 Fast boot(快速启动)功能,却发现设置选项呈灰色锁定状态,无法点击修改。…

作者头像 李华
网站建设 2026/1/4 21:04:50

告别繁琐问卷设计!百考通AI智能助手,5分钟生成专业调研问卷

在数据驱动决策的今天,无论是市场部门洞察用户心声,HR团队评估员工满意度,还是产品经理优化产品体验,一份设计精良、逻辑严谨的调查问卷都是获取一手信息、做出科学判断的基石。然而,从零开始构思问题、设置选项、排版…

作者头像 李华
网站建设 2026/1/10 7:46:45

百考通AI:你的智能学术助手,让毕业论文写作化繁为简

在学业的冲刺阶段,面对堆积如山的文献、复杂的研究方法和令人头疼的开题报告,你是否也感到力不从心?别担心,百考通AI(https://www.baikaotongai.com)为你而来,它不是简单的工具,而是…

作者头像 李华
网站建设 2026/1/10 0:50:29

IntelliJ IDEA 2025.3 正式发布

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享点击关注#互联网架构师公众号,领取架构师全套资料 都在这里0、2T架构师学习资料干货分上一篇:2T架构师学习资料干货分享大家好,我是互联网架构师&#xff…

作者头像 李华
网站建设 2026/1/8 2:19:27

MyBatis-Flex 来了!完爆MyBatis-Plus?

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享点击关注#互联网架构师公众号,领取架构师全套资料 都在这里0、2T架构师学习资料干货分上一篇:2T架构师学习资料干货分享大家好,我是互联网架构师&#xff…

作者头像 李华