Jenkins构建Maven项目(三种风格)+Jenkins项目构建细节

阅读: 评论:0

Jenkins构建Maven项目(三种风格)+Jenkins项目构建细节

Jenkins构建Maven项目(三种风格)+Jenkins项目构建细节

Jenkins构建Maven项目+Jenkins项目构建细节

  • Jenkins构建的项目类型介绍
    • 自由风格项目构建
    • Maven项目构建
    • Pipeline流水线项目构建
    • 管理Jenkinsfile脚本文件
  • Jenkins项目构建细节
    • 常用构建触发器
    • Git hook自动触发构建
    • Jenkins的参数化构建
    • 配置邮箱服务器发送构建结果

Jenkins构建的项目类型介绍

Jenkins中自动构建项目的类型有很多,常用的有以下三种:

  1. 自由风格软件项目(FreeStyle Project)
  2. Maven项目(Maven Project)
  3. 流水线项目(Pipeline Project)

每种类型的构建都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中根据项目需求来选择(PS:常用流水线类型,灵活度非常高

自由风格项目构建

自由风格项目完成项目的集成过程:
拉取代码 --> 编译 --> 打包 --> 部署

拉取代码

创建项目




# 观察工作空间
# 项目已拉取至本地
[root@jenkins ~]# cd /var/lib/jenkins/workspace/[root@jenkins workspace]# ls
web_demo_freestyle  web_demo_freestyle@tmp[root@jenkins workspace]# cd web_demo_freestyle
[root@jenkins web_demo_freestyle]# ls
l  src  web_demo.iml

编译打包

构建 --> 添加构建步骤 --> Executor Shell
返回刚才的项目,添加配置

echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"

新增参数化构建过程,使用JDK1.8编译



控制台查看输出构建过程,并且使用JDK1.8进行编译



编译完成后在工作空间产生一个target目录

远程部署

把项目部署到Tomcat里面
安装Deploy to cintainer插件
Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现


安装完成后回到项目,增加构建后操作

找到需要发布的war包名字

添加容器,添加Tomcat8

添加凭据,使用用户密码类型


保存后再次执行构建


点击项目,成功部署

代码改动后的持续集成

  1. IDEA源码修改并提交至Gitlab
  2. 在Jenkins中项目重新构建
  3. 访问Tomcat



重新构建项目

Maven项目构建

安装Maven Integration插件

# 手动安装插件地址
.22/maven-plugin.hpi

新建项目



再次修改源码

执行构建

执行构建后再次查看项目

Pipeline流水线项目构建

Pipeline简介

Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作

使用Pipeline有以下好处(来自翻译官方文档)

  1. 代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程
  2. 持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的
  3. 可停止:Pipeline可接收交互式输入,以确定是否继续执Pipeline
  4. 多功能:Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功能
  5. 可扩展:Pipeline插件支持其DSL的自定义扩展 ,以及与其他插件集成的多个选项

如何创建 Jenkins Pipeline呢?

  1. Pipeline 脚本是由 Groovy 语言实现的,但是没必要单独去学习 Groovy
  2. Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
  3. Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)中直接载入 Jenkinsfile Pipeline 这种方法)

安装Pipeline插件

安装流水线阶段视图插件:Pipeline Stage View

新建流水线任务

Pipeline基本语法

声明式语法最典型的标记为pipeline开头
声明式语法和脚本式语法实现的功能一样,早期Jenkins使用脚本式pipeline,2.0以后Jenkins推荐使用声明式语法
依然使用JDK1.8进行构建项目

  1. stages:复数,代表所有执行阶段,通常情况下只有一个,包含多个stage
  2. stage:某个阶段,一个步骤为一个stage,可以有多个
  3. steps:可以多种步骤类型,如:shell,拉取代码,远程部署容器
// 编写一个基础的声明式pipeline语法
pipeline {agent anystages {stage('pull code') {                // 模拟拉取代码steps {echo 'pull code'}}stage('build project') {            // 模拟构建项目steps {echo 'build project'}}stage('publish project') {          // 模拟发布项目steps {echo 'publish project'}}}
}


脚本式语法

Node:节点,一个 Node 就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境

// 编写一个基础的脚本式pipeline语法
node {def mvnHomestage('pull code') {echo 'pull code'}stage('Build project') {echo 'Build project'}stage('publish project') {echo 'publish project'}
}

拉取代码

流水线脚本的编写有一定难度,可以使用工具生成







编译打包

使用片段生成器

远程部署

同样使用片段生成器

复制进流水线脚本里

控制台输入依然基于JDK1.8进行Maven

管理Jenkinsfile脚本文件

  1. 刚才我们都是直接在Jenkins的UI界面编写Pipeline代码,这样不方便脚本维护,如果Jenkins服务器崩溃,脚本也会随即丢失
  2. 建议把Pipeline脚本放在项目中(一起进行版本控制)

在项目根目录建立Jenkinsfile文件,把内容复制到该文件中

将脚本文件上传至仓库

查看仓库,确认已添加Jenkinsfile文件

如果脚本丢失,选择使用Pipeline script from SCM方式获得Jenkinsfile脚本



Jenkins项目构建细节

Jenkins内置4种构建触发器

  1. 触发远程构建
  2. 其他工程构建后触发(Build after other projects are build)
  3. 定时构建(Build periodically)
  4. 轮询SCM(Poll SCM)

常用构建触发器

触发远程构建

其他工程触发后构建

当前项目的构建行为需要前面一个项目构建完成后的触发

创建前置工程

构建完前置工程后会自动构建

定时构建

定时字符串从左往右分别为:分 时 日 月 周

# 一些定时表达式的例子
# H代表一个参数,意思是变化的,可以理解为一个起点
# 0代表整点# 每30分钟构建一次:H代表形参
H/30 * * * * 10:02 10:32# 2个小时构建一次
H H/2 * * *# 每天的8点,12点,22点,一天构建3次: (多个时间点中间用逗号隔开) 
0 8,12,22 * * *# 每天中午12点定时构建一次
H 12 * * *# 每天下午18点定时构建一次
H 18 * * *# 在每个小时的前半个小时内的每10分钟
H(0-29)/10 * * *# 每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38)
H H(9-16)/2 * * 1-5

等待两分钟后自行开始构建

轮询SCM

轮询SCM,是指定时扫描本地仓库的代码是否有变更,如果代码有变更就触发项目构建
注意:这从触发构建器,Jenkins会定时扫描本地整个项目的代码,增大系统的开销,不建议使用

设置每两分钟检测一次,如果代码发生变化,则会构建新的工程,如果代码没有发生变化,则不构建

修改代码后Push至代码仓库约两分钟后,Jenkins扫描到仓库发生改变触发构建


Git hook自动触发构建

刚才在Jenkins的内置构建触发器中,轮询SCM可以实现Gitlab代码更新,项目自动构建,但是该方案的性能不佳,那么是否还有更好的方案?
利用Gitlab的webhook实现代码Push到仓库,自动触发项目自动构建

安装Gitlab Hook插件

需要安装两个插件
新版本安装:Generic Webhook TriggerGitlab 参考文章:jenkins 为什么搜不到Gitlab Hook 这个插件
老版本安装:Gitlab Hook


Gitlab开启webhook功能,使用root用户



返回项目

Jenkins开启外部访问权限

返回Gitlab进行测试

项目同时进行了一次构建

修改代码进行测试

Push完成后触发Jenkins项目构建

Jenkins的参数化构建

  1. 有时在项目构建的过程中,我们需要根据用户的输入动态传入一些参数,从而影响整个构建结果,这时我们可以使用参数化构建
  2. Jenkins支持非常丰富的参数类型



更改Jenkinsfile脚本里面分支变量值



创建分支


添加新的分支

仓库中查看新的分支

通过master构建项目


通过v1构建项目

配置邮箱服务器发送构建结果

安装Email Extension插件

Jenkins系统配置进行相应配置




邮件设置完成后的测试


准备邮件内容

在项目根目录编写email.html,并把文件推送到Gitlab,内容如下

创建email.html

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head><body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0"style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans- serif"><tr><td>(本邮件是程序自动下发的,请勿回复!)</td></tr><tr><td><h2><font color="#0000FF">构建结果 - ${BUILD_STATUS}</font></h2></td></tr><tr><td><br /><b><font color="#0B610B">构建信息</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>项目名称&nbsp;:&nbsp;${PROJECT_NAME}</li><li>构建编号&nbsp;:&nbsp;第${BUILD_NUMBER}次构建</li><li>触发原因:&nbsp;${CAUSE}</li><li>构建日志:&nbsp;<a href="${BUILD_URL}console">${BUILD_URL}console</a></li><li>构建&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${BUILD_URL}">${BUILD_URL}</a></li><li>工作目录&nbsp;:&nbsp;<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li><li>项目&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${PROJECT_URL}">${PROJECT_URL}</a></li></ul></td></tr><tr><td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b><hr size="2" width="100%" align="center" /></td></tr>编写Jenkinsfile添加构建后发送邮件<tr><td><ul><li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li></ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="&nbsp;&nbsp;&nbsp;&nbsp;%p"} </td> </tr> <tr><td><b>Failed Test Results</b> <hr size="2" width="100%" align="center" /></td> </tr> <tr><td><prestyle="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre> <br /></td> </tr> <tr><td><b><font color="#0B610B">构建日志 (最后 100行):</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr><td><textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea> </td> </tr> 
</table> 
</body> 
</html>

推送至Gitlab代码仓库

编写Jenkinsfile添加构建后发送邮件

pipeline {agent anystages {stage('pull code') {steps {checkout scmGit(branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'a4d0066f-6c58-4ab0-b714-6a24b3f5bc90', url: 'git@192.168.100.240:beijingcar/web_demo.git']])}}stage('build project') {steps {sh 'mvn clean package'}}stage('publish project') {steps {deploy adapters: [tomcat8(credentialsId: 'd1f29d4b-2ca1-4d9b-b308-aec7efee7f18', path: '', url: '192.168.100.250:8080')], contextPath: null, war: 'target/*.war'}}}post {                                  // 添加port,对应stagesalways {emailext (subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',body: '${FILE,path="email.html"}',to: '1064981253@qq'    // 多人发送需要将邮件地址写入)}}
}

更新脚本至仓库后构建项目



查看邮件

本文发布于:2024-01-29 11:07:14,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170649763914844.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:项目   三种   细节   风格   Jenkins
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23