当前位置: 首页 > news >正文

Jenkins 实战2:pipeline 编写一个自动化部署

我们今天用 Jenkins pipeline 来实现 实战1 相同的内容

前置知识:

Jenkins Pipeline 快速开始     Jenkins 实战1:Jenkins + Maven + Git 自动化部署 手把手包学包会

一、阶段分析

我们首先需要分析一下 Jenkins 构建需要完成哪些步骤:

1、从 GitLab 上拉取代码

2、使用 maven 构建 jar 包

3、清理测试服务器 旧 jar 包、停止 旧进程。

4、上传新构建的 jar 包,启动 Java 进程。

我们以这几步为基础,来新建一个 Jenkins 流水线,帮助我们完成自动化部署。

二、编写流水线

1、新建流水线任务

Dashboard > 新建 Item

2、配置流水线框架

Dashboard > first-pipeline >Configuration

选择 Pipeline script 脚本方式

可以选择的流水线定义有两种:

Pipeline script:自己在下面编辑框内编写流水线脚本。

Pipeline script from SCM:从版本管理系统(如:Git)中拉取已经写好的 Jenkinsfile,实现流水线配置的可版本化。 

在右侧下拉选项中,选择 Hello World,以此为基础,编写流水线脚本。

在流水线语法 Tab 页,选择插件或者命令,可以帮助我们以配置的方式,来生成流水线脚本。

3、拉取代码

示例步骤选择 git:Git,填入代码仓库地址,点击添加凭证

填入 gitlab 相关信息,点击添加

下拉选择凭证,点击生成流水线脚本

复制生成的代码,粘贴到流水线编写框中

4、构建 jar 包

构建 jar 包需要使用 maven,而 maven 是一种工具(tools),它的配置在

Dashboard > Manage Jenkins > Tools > Maven 安装里

Maven 我们在 实战1 已经配置过了,所以流水线中我们可以直接拿它的名字 maven386 来使用。

  • 添加 "构建 jar 包" 阶段:
pipeline {agent anytools {maven 'maven386' // 引用全局配置的 Maven 名称(需提前在“全局工具配置”中设置)}stages {stage('拉取代码') {steps {git credentialsId: 'gitlab', url: 'http://192.168.40.99/study/jenkins-study.git'echo '拉取成功'}}stage('构建 jar 包') {steps {sh 'mvn clean package -DskipTests=true'echo '构建 jar 包成功'}}}
}

保存【配置】并【立即构建】,可以在控制台输出中查看构建日志

报错:

当你在 Jenkins 中遇到 error: couldn't find any revision to build. verify the repository and branch configuration for this job. 错误时,通常是由于仓库或分支配置错误导致的。

示例:

ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job.

这个错误通常发生在 Jenkins 尝试构建 Git 仓库时,默认使用了 master 分支,而 GitLab 默认的分支是 main 分支。要解决这个问题,1、可以在 GitLab 新建一个 master 分支;2、也可以在流水线脚本中显式指定 main 分支。

git credentialsId: 'gitlab', branch: 'main', url: 'http://192.168.40.99/study/jenkins-study.git'
  • 制品

构建成功后,默认会在 /root/.jenkins/workspace/jenkins-study/target 目录下,帮我们生成一个 jar 包,说明构建 jar 包成功。

5、清理

清理阶段需要用到 SSH Publishers 插件,执行 clean.sh 脚本。

在 流水线语法 配置 SSH Publishers

生成流水线脚本,拷贝到流水线配置里面

pipeline {agent anytools {maven 'maven386' // 引用全局配置的 Maven 名称(需提前在“全局工具配置”中设置)}stages {stage('拉取代码') {steps {git credentialsId: 'gitlab', url: 'http://192.168.40.99/study/jenkins-study.git'echo '拉取成功'}}stage('构建 jar 包') {steps {sh 'mvn clean package -DskipTests=true'echo '构建 jar 包成功'}}stage('清理 jar 包和进程') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: 'test97', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: './clean.sh jenkins-study', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '清理成功'}}}
}

保存【配置】并【立即构建】,现在 test97 这台服务器有 实战1 部署的程序和 jar,我们看看清理步骤跑完后,有没有帮我们清理掉。

清理构建前:

清理构建后:

说明我们的流水线配置是成功的。

6、上传并启动 java 进程

上传阶段也需要用到 SSH Publishers 插件,执行 nohup 命令。

在 流水线语法 配置 SSH Publishers,可以参考 实战1 的配置。

生成流水线脚本,拷贝到流水线配置里面

pipeline {agent anytools {maven 'maven386' // 引用全局配置的 Maven 名称(需提前在“全局工具配置”中设置)}stages {stage('拉取代码') {steps {git credentialsId: 'gitlab', url: 'http://192.168.40.99/study/jenkins-study.git'echo '拉取成功'}}stage('构建 jar 包') {steps {sh 'mvn clean package -DskipTests=true'echo '构建 jar 包成功'}}stage('清理 jar 包和进程') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: 'test97', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: './clean.sh jenkins-study', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '清理成功'}}stage('上传并运行') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: 'test97', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nohup java -jar /root/jenkins-study/jenkins*.jar >> /root/jenkins-study/log.out 2>&1 &', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/jenkins-study', remoteDirectorySDF: false, removePrefix: '/target', sourceFiles: '**/jenkins*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '运行成功'}}}
}

保存【配置】并【立即构建】,浏览器访问

7、测试

修改本地代码,提交到 master 分支,使用流水线重新构建。

浏览器访问:

三、实战3 Jenkins + habor + docker 自动化部署

敬请期待。

http://www.dtcms.com/a/548670.html

相关文章:

  • Spring Boot3零基础教程,Lambda 表达式与函数式接口,笔记95
  • 光电传感器领域国产MCU芯片抗辐照技术考量
  • 510企业网站系统源码网络营销的具体形式种类
  • Flink Processing Timer Service 用处理时间把“准点任务”写进流里
  • PHP后端项目中多环境配置管理:开发、测试、生产的优雅解决方案!
  • 告别爬取困境:用Playwright完美抓取复杂动态网页
  • 中国建设银行北海招聘信息网站嘉兴建企业网站
  • 用visual做网站乐陵森林覆盖率
  • [论文阅读] AI + 软件工程 | 从“能用”到“耐用”:LLM生成软件的老化陷阱与研究突破
  • Gradle 的项目结构与源码集(Source Sets)详解(Kotlin DSL)
  • Quarto生成PDF无法正常显示中文的问题
  • PDF 下载弹窗 content 区域可行性方案
  • 读取实验室原始记录单PDF内容
  • Faster-Whisper命令和意图识别程序设计调优:上下文感知和领域词汇增强
  • 从游戏引擎到AI动力核心
  • 人机交互的软件工程方法实验报告(黑龙江大学)
  • 专题:2025机器人产业的变革与展望白皮书:人形机器人与工业机器人洞察|附130+份报告PDF、数据、绘图模板汇总下载
  • 邢台市网站制作还是网站好
  • 技术解析:CO与NO₂双气体监测如何构筑协同化安全防线
  • Rust 中的 SIMD 指令优化:从原理到实践
  • 如何通过CRM系统实现精准营销?从数据驱动到策略优化的全流程方法
  • [MySQL]数值函数
  • 从SQL Server到KingbaseES:一步到位的跨平台迁移与性能优化指南
  • UG482 (v1.9)中文版
  • 我发现了windows的tracert命令的一个bug---ICMP重定向包详尽分析
  • PowerShell 入门文档
  • Notepad++官方下载渠道
  • 【问题】Android Studio专用C盘空间过大问题:迁移相关程序文件
  • 北数云|利用Limix模型对tabular-benchmark数据集实现分类和回归任务
  • 免费建站优化外包公司能不能去