Jenkins构建的项目类型介绍

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

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

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

自由风格项目构建

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

拉取代码

创建项目

#项目已拉取至本地
[root@jenkins ~]# cd /var/lib/jenkins/workspace/
web_demo_freestyle web_demo_freestyle@tmp
[root@jenkins workspace]# cd java_demo_freestyle
[root@jenkins java_demo_freestyle]# ls
db pom.xml src

编译打包

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

控制台输出构建过程

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

远程部署

把项目部署到Tomcat里面
安装Deploy to cintainer插件

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

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

找到需要发布的war包名字

添加容器,添加Tomcat8

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

保存后再次执行构建

点击项目,成功部署

代码改动后的持续集成

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

重新构建项目

Maven项目构建

安装Maven Integration插件

新建项目

目标改为clean package

再次修改源码

执行构建后再次查看项目

Pipeline流水线项目构建

Pipeline简介

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

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

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

Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy

Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)中直接载入 Jenkinsfile Pipeline 这种方法)
安装Pipeline插件

新建流水线任务

Pipeline基本语法

声明式语法

stages:复数,代表所有执行阶段,通常情况下只有一个,包含多个stage
stage:某个阶段,一个步骤为一个stage,可以有多个
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') { // for display purposesecho 'pull code'}stage('Build project') {echo 'Build project'}stage('publish project') {echo 'publish project'}
}

拉取代码

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

编译打包

使用片段生成器

远程部署

同样使用片段生成器

复制进流水线脚本里

管理Jenkinsfile脚本文件

刚才我们都是直接在Jenkins的UI界面编写Pipeline代码,这样不方便脚本维护,如果Jenkins服务器崩溃,脚本也会随即丢失
建议把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插件

第一种

需要安装两个插件
Gitlab Hook 和Gitlab

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

返回项目

Jenkins开启外部访问权限

返回Gitlab进行测试

项目同时进行了一次构建

修改代码进行测试

Push完成后触发Jenkins项目构建

第二种:

进入插件管理并下载插件Generic Webhook Trigger

jenkins系统配置中给GitLab授权
进入系统配置

找到并启用gitlab授权Enable authentication for '/project' end-point

如果这个不配置,可能测试的时候会报403。

配置gitlab全局密钥

获取连接token
1)登陆gitlab,在用户头像下拉图标,选择“Setting”

2)点击“Access Tokens”,输入“Name”和“Expries at”,勾选“api”;

3)点击“Create personal access token”,生成access token,记录下来。
6VPMCsYnHZKFdUEKaAw1

配置系统Gitlab连接信息
1)登陆Jenkins,点击“系统管理”->“系统设置”-> “gitlab”,配置如下:

l Connetction name:连接名称,随便填写;
l URL:gitlab的访问地址;
l Credentials:鉴权凭证,即添加access token的地方;

2)添加Credentials,点击旁边的“Add”,弹框如下:

选好Kind,把access token输入在“API token”,ID是标识,随便填写。

创建项目获取webhook配置信息

创建项目,做好仓库等基本配置。
点击构建触发器
勾选Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.30.181:9898/project/hp1_activiti_backend
复制 Webhook URL,备用。

点击高级

点开高级后,下拉找到Secret token并生成后复制。

综上,从Jenkins复制获取到了Webhook Url 和 Secrect token。

GitLab配置

使用管理员权限在设置-网络中,启用本地网络服务。

在gitLab项目中设置webhook

添加成功后如图所示

测试

gitlab提供各种trigger测试,我测试的是Push events。

测试成功时会自动弹出,HTTP 200提示框。

打开Jenkins会发现项目正在构建。

Jenkins的参数化构建

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

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

创建分支

添加新的分支

仓库中查看新的分支

通过v1构建项目

 

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

安装Email Extension插件

Jenkins系统配置进行相应配置

邮件设置完成后的测试

QQ邮箱中开启服务(如POP3/SMTP服务),生成授权码,并将密码更换为授权码。

  • 登陆到发送邮件的QQ邮箱,进入 [设置]-->[账户] 页面。

  • 在该页面中找到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,将POP3/SMTP服务IMAP/SMTP服务两个服务开启。

2.2生成授权码

  • 发送短信认证获取授权码

  • 将如下生成的授权码替换为发送账号的密码即可

准备邮件内容
在项目根目录编写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>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建  Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目  Url : <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="    %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([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: '911f1631-98e1-49b5-93eb-f4ef6d4dafe2', url: 'git@192.168.100.88:pakho_group/java_demo.git']]])
}
}
stage('build project') {
steps {
sh 'mvn clean package'
}
}
stage('publish project') {
steps {
deploy adapters: [tomcat8(credentialsId: '18c54ca2-ffd9-438a-b4dc-09fab43d8ef3', path: '', url: 'http://192.168.100.90:8080')], contextPath: null, war: 'target/*.war'
}
}
}
post { #添加port,对应stages
always {
emailext (
subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
body: '${FILE,path="email.html"}',
to: 'xxx@qq.com'
)
}
}
}

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

查看邮件

可持续化集成(九)之Jenkins项目构建细节相关推荐

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

    Jenkins构建Maven项目+Jenkins项目构建细节 Jenkins构建的项目类型介绍 自由风格项目构建 拉取代码 编译打包 远程部署 代码改动后的持续集成 Maven项目构建 Pipelin ...

  2. Pipeline流水线项目构建

    目录 Pipeline简介 概念 安装Pipeline插件 Scripted脚本式Pipeline Declarative声明式Pipeline 使用代码生成器生成流水线脚本 管理Jenkinsfil ...

  3. Jenkins骚操作第四章构建maven项目和Pipeline流水线项目构建

    文章目录 Jenkins构建Maven项目 1.Jenkins项目构建类型-自由风格项目构建 1.1.拉取代码 1.2.编译打包 1.3.部署 2.Jenkins项目构建类型(3)--Maven项目构 ...

  4. 持续集成工具集之四 Jenkins+Maven+Git+Tomcat 项目构建和自动部署

    上面安装和配置好Jenkins之后,就可以开始配置构建项目了 新建 因为需要构建的项目是maven项目,所以这里填好项目的名称之后选择"构建一个maven项目",然后点左下的ok ...

  5. Jenkins之构建Maven项目的多种方式

    Jenkins构建的项目类型介绍 Jenkins中自动构建项目的类型有很多,常用的有以下三种: 自由风格软件项目(FreeStyle Project) Maven项目(Maven Project) 流 ...

  6. jenkins pipeline、用户权限管理、插件下载地址更改、凭证管理、自由风格项目构建、maven项目构建、常用的构建触发器、邮件发送、SonarQube代码审查

    CI持续集成流程 pipeline jenkins安装pipeline插件: 简单使用: 查看流水线语法: 片段生成器: 2.0以后推荐使用声明式语法:右侧下拉框是一些步骤,都可以自动生成 Decla ...

  7. Jenkins自动构建部署项目

    1. 楔子 在实际开发中,经常需要编译.静态代码检查.自动化测试.打包.部署.启动等一连串重复机械的动作,浪费时间.而且容易出错,而Jenkins就是专门Continuous integration( ...

  8. 持续集成:通过Jenkins API创建项目和节点

    我在持续集成:Jenkins API使用方法详细介绍中介绍了jenkins API的使用方法,比如使用API读取jenkins项目相关信息.触发构建等操作,除此之外,还可以直接使用API来创建项目.新 ...

  9. 最全的项目部署+持续集成解决方案:Jenkins + git + docker

    1.概述 1.1 什么是持续集成,持续交付 持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干 持续交付/持续部署(Continuo ...

最新文章

  1. oracle表中怎么去重复,oracle去掉表重复数据
  2. bash shell实现二进制与十进制数的互转
  3. django_rest_framework—路由器机制
  4. Jenkins 中如何一次构建多个项目
  5. java上传音频到服务器_Java 客户端向服务端上传mp3文件数据的实例代码
  6. 动态T-SQL语句常見問題與解決方案
  7. 大数据之Hadoop教程
  8. #pragma pack(1) 的意义是什么
  9. 微型计算机中的80586指,一级B考试模拟试题-套,DOS版本:6.0
  10. 解决pytorch多进程ValueError: Error initializing torch.distributed using env:// rendezvou...报错
  11. java.io.StreamCorruptedException: invalid stream header: 00000000
  12. java threadlocal 并发_Java并发编程:ThreadLocal
  13. 裘慧明:跟世界上最聪明的人博弈
  14. 身份证(省市)编码表
  15. 利用python将excel导入SQL Server数据库
  16. 开启并定制 Apache 显示目录索引样式
  17. php+mysql实现简易博客系统
  18. 爬取全国各地区汽车销量情况并用中国地图可视化展示
  19. 简洁的PHP图床源码烟雨图床程序源码
  20. 如何高效管理电脑里的文件

热门文章

  1. NR PUCCH UCI
  2. 《5G NR标准:下一代无线通信技术》读书笔记——NR概述
  3. 用户账号注册的风险及安全措施
  4. linux之父用的电脑,Linux之父新电脑:15年第一次抛弃Intel
  5. 程序员常用英语词汇(021)
  6. 全球与中国铂金坩埚市场发展现状与趋势研究分析报告2022-2028年
  7. dns被劫持了怎么办、DNS是什么【详解】
  8. linux下判断文件和目录是否存在[总结]
  9. 使用golang每天给自己发送一封天气预报的邮件
  10. 算法设计与分析 实验三 贪心算法