一. 什么是构建触发器
说白了就是在什么时间,什么条件下去触发构建.
二. Jenkins内置的4种构建触发器
触发远程构建
其他工程构建后触发(Build after other projects are build)
定时构建(Build periodically)
轮询SCM(Poll SCM)
接下来让我们来一一认识与使用:
三. Jenkins四种内置触发器的介绍与使用.
1. 触发远程构建:
⑴. 设置触发远程构建:

⑵. 触发方式:
如何触发呢?其实已经提示给我们了,就在身份验证令牌填写的下面,有几行英文,大致意思就是我们需要访问对应的链接来触发远程构建:
#格式:JENKINS_URL/job/web-demo-pipeline/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME#例如:http://192.168.31.100:8888/job/web-demo-pipeline/build?token=1433223
⑶. 访问测试:
让我们在浏览器打开这个链接,然后返回页面查看效果.
成功触发构建:
⑷.总结:
当我们设置触发远程构建之后,Jenkins会生成一个对应的URL,当这个URL被访问的时候,Jenkins会自动触发构建.
1.Build after other projects are built( 其他工程构建后触发):
⑴. 介绍:
就是说我们发布项目的时候,如果本次项目需要在其他工程构建完成之后自动构建,可选择此项.
⑵. 创建前置项目:

⑶. 设置构建脚本:

⑷. 配置其他工程构建后触发:

⑸. 对前置工程进行构建:

⑹. 返回之前的项目查看变化:
已经完成项目的构建.
3. 定时构建
⑴. 介绍:
定时构建就是每隔多长时间构建一次项目,下图定时字符串从左往右分别为:分 时 日 月 周
⑵. 示例:
#-------H代表形参,0代表整点,采用24小时制--------##每30分钟构建一次:H/30 * * * *#每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
⑶. 配置定时构建:

⑷. 查看效果:

4. 轮询SCM:
⑴. 介绍:
轮询SCM,是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。
⑵. 配置:

⑶. 总结:
注意:轮询SCM触发器,Jenkins会定时扫描本地整个项目的代码,增大系统的开销,不建议使用。
四. 其他触发器:
1. hook自动触发构建
刚才我们看到在Jenkins的内置构建触发器中,轮询SCM可以实现代码更新,项目自动构建,但是该方案的性能不佳。那有没有更好的方案呢?有的。就是利用webhook实现代码push到仓库,立即触发项目自动构建。本文便用码云的webhook来实现自动构建.
⑴. 安装gitee插件:
因我们本次项目基于码云进行操作,故需要安装一个gitee插件:
关于此插件之码云官方文档:
https://gitee.com/help/articles/4193#article-header5
⑵. 插件配置:
①. 添加码云链接配置:
前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections:
在 Connection name 中输入 Gitee 或者你想要的名字
Gitee host URL 中输入码云完整 URL地址:https://gitee.com
如下图:
如果Jenkins 中如还未配置码云 APIV5 私人令牌,按照下图进行配置:
如果你没有申请码云私人令牌,可以点击下面地址进行获取:
获取地址:https://gitee.com/profile/personal_access_tokens

②. 配置构建触发器:

③. 生成Gitee WebHook 密码:

④. 在码云中添加WebHook:


⑤. 配置完成码云会发送一条测试请求:


⑥. 查看项目是否完成了构建:

⑶. 测试:
①. 测试更新代码能否完成构建:



五. Jenkins的参数化构建:
⑴. 介绍:
有时在项目构建的过程中,我们需要根据用户的输入动态传入一些参数,从而影响整个构建结果,比如我们需要根据不同的参数来完成对不同分支的构建,这时我们可以使用参数化构建。
Jenkins支持非常丰富的参数类型:
⑵. 创建一个字符串参数:
创建一个字符串参数:String Parameter
⑶. 添加完之后会在菜单中多出 Build with Parameters选项:

⑷. 修改脚本:
K值为你定义的String Parameter名称:
⑸. 创建新分支:
#创建并进入test分支git checkout -b test#提交到暂存区git add .#提交到本地的版本库git commit -m '创建测试分支'#推送代码到test分支:git push origin test
⑹. 测试:


六. 配置邮箱服务器发送构建结果:
⑴. 安装Email Extension插件:

⑵. 安装Email Extension Template插件:

⑶. Jenkins设置邮箱相关参数
Manage Jenkins->Configure System:
⑷. 设置邮件参数:

⑸. 配置邮件通知:

⑹. 测试:

⑺. 准备邮件内容:
在项目根目录编写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 LastSuccessful Build:</font></b><hr size="2" width="100%" align="center" /></td></tr><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>
⑻. 查看邮件中变量的对应含义:

⑼. 编写Jenkinsfile添加构建后发送邮件:
下文脚本中post代表构建后所需要操作的脚本,且更够根据stage的构建结果执行不同的脚本,always代表无论成功或者失败,都执行脚本.
pipeline {agent anystages {stage('拉取代码') {steps {checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'ef0f4ce0-c68a-4607-9e25-21c38c50442f', url: '此处填写你的git地址']]])echo '拉取代码成功'}}stage('构建项目') {steps {sh 'mvn clean package'echo '构建项目成功'}}stage('项目部署') {steps {deploy adapters: [tomcat8(credentialsId: '40de4b9b-71f8-4514-8694-2307daa9963f', path: '', url: 'http://192.168.31.101:8080')], contextPath: null, war: 'target/*.war'echo '项目部署成功'}}}post {//always 无论成功或者失败都执行下面的脚本always {emailext(//subject邮件标题 PROJECT_NAME:项目名 BUILD_NUMBER:构建次数 BUILD_STATUS 构建状态subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',//body内容,可以直接在body写,也可以写成成下面的形式进行读取body: '${FILE,path="email.html"}',//to 收件人,多个用逗号隔开to: '收件人邮箱')}}}
如果你想了解可以在代码生成器中了解更多:
⑽. 同步代码到码云,并开始构建:





