jenkins构建结果企业微信提醒

每当jenkin在构建之后我们想把构建结果SUCCESS/FAILURE或者其他信息通知给其他人,也许有人会说,不是有邮件提醒吗?但是我这里的环境邮件提醒的话所被通知者并不会第一时间去阅读,所以我们用“钉钉”,“企业微信”来第一时间去通知你想通知的小伙伴们。

因为我这里的环境用的是企业微信所以本文都是基于企业微信来说的,不过在钉钉上也可以使用,也可以利用钉钉在jenkins上的插件,那样更方便些。

进入正题

我们要获得jenkin的构建结果是SUCCESS还是FAILURE是需要jenkin构建完毕才能获取到的,那么我们从哪里能获得构建结果以及其他信息呢?

我们可以用日志信息或者api的构建信息来获取

我们 我们可以用日志信息或者api的构建信息来获取,这里我们是基于查看日志来查看构建结果以及其他信息,我这里以windows环境以及jenkins默认安装环境来举例

每一次日志文件的位置我们可以在如图位置找到

我们去最后一次构建结果查看日志文件

在结果查看构建结果是否成功

那么我们可以用python来写个读取结果的脚本,用jenkins来自动运行

import requests import json import urllib.request import urllib.error import time # 获取构建结果 def getResult(): fname = pathGitLab with open(fname, ‘rb’) as f: #打开文件 first_line = f.readline() #读第一行 #print (first_line) off = -50 #设置偏移量 while True: f.seek(off, 2) #seek(off, 2)表示文件指针:从文件末尾(2)开始向前50个字符(-50) lines = f.readlines() #读取文件指针范围内所有行 # print (lines) if len(lines)>=2: #判断是否最后至少有两行,这样保证了最后一行是完整的 last_line = lines[-1] #取最后一行 print (last_line) break off *= 2 if ‘FAILURE’ in last_line.decode() : return 1 # else: # return 0 #获取下一次构建的Number和当前构建的number def getNextNumber(): f = open(r’C:\Program Files (x86)\Jenkins\jobs\Developer\nextBuildNumber’, ‘r’) currentNumber=int(f.read())-1 return currentNumber #网络模块,用于企业微信发送信息 def jenkins(result): url=‘https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=2ef5c862-b2a6-45bc-a183-ee6666666666666666’ # 企业微信机器人的webhook if result==1: con={“msgtype”: “text”,“text”: {“content”: “站点构建提醒\r\n构建站点:Developer\r\n构建结果:FAILURE\r\n构建失败,请您检查代码并重新构建,谢谢”},} # else : # con={“msgtype”: “text”,”text”: {“content”: “developer构建结果:构建失败,请检查代码后重试!”},} jd=json.dumps(con).encode(‘utf-8’) req=urllib.request.Request(url,jd) req.add_header(‘Content-Type’, ‘application/json’) response=urllib.request.urlopen(req) if __name__ == ‘__main__’: jobCurrentNumber=getNextNumber() #获取当前构建number # print (jobCurrentNumber) # myDict=getDict()#获取同事所有联系方式 #获取当前构建的目录比如D:\Jenkins\jobs\gk_check\builds\153, path=“C:\\Program Files (x86)\\Jenkins\\jobs\\Developer\\builds\\”+str(jobCurrentNumber)+“\\” pathGitLab=path+“log” # 获取svn版本和id信息的文件路径 pathAuthor=path+“changelog.xml” # 获取递交者信息的文件路径 result=getResult() # 读取构建结果 # print (result) jenkins(result) # 最后执行函数 getResult()

这里的企业微信的webhook地址我们可以在如下的地方添加机器人

这样就可以获得webhook的地址来进行来进行企业微信提醒

接下来我们在jenkins的构建模块进行构建后操作

ping 127.1 -n 5 >nul # 延迟5秒,目的是的等jenkins构建完成来获取结果 @echo off D: cd D:\test start python developer_error.py #执行脚本

这里再简单说下curl 进行企业微信提醒

可以在构建最开始和结尾执行curl的命令

ios和Android的自动化构建结果也可以企业微信通知,如下图

还可以增加其他功能,等待大家去尝试,如果有什么问题或者创新想法大家可以说一哈

jenkins 通过shell启动java应用程序会随着job完成而被自动关闭的解决方法

我们使用jenkins进行构建打包后,实现自动部署,但 通过shell启动应用程序后,构建job完成应用程序也会自动关闭。下面以tomcat为例

如上执行后,tomcat先关闭,而后部署启动成功,可以访问。但构建job只完成后,tomcat自动关闭。

解决如下:

在脚本前面添加上BUILD_ID=XXXXX,即可如下:

这样job结束后,tomcat不会自动关闭。

jenkins集成jira

一、插件准备

1、jira中安装插件

Jenkins Integration for JIRA Server

2、Jenkins中安装插件

JIRA Integration for Jenkins
Jira Issue Updater
JIRA Pipeline Steps
JIRA plugin
JIRA Trigger Plugin
JiraTestResultReporter plugin
https://repository.marvelution.org/content/repositories/releases/org/marvelution/jji/assemblies/jenkins-jira-plugin/

二、jenkins中的配置

1、创建API token(jira中可使用api token,亦可使用用户名密码认证)

系统管理-全局安全配置-取消掉“防止跨站点请求伪造”选项(否则使用API跨站点请求的时候,会返回403)-允许创建api token

用户-设置-API Token-Add new Token(后续在jira中使用token时,可到此处复制token)

2、系统管理-系统设置-JIRA-Steps中添加JIRA sites并测试连接

 

Jira Trigger Configuration-输入jira路径及用户名密码

三、Jira中配置

1、添加应用程序连接:

应用程序-应用程序链接-输入jenkins地址-创建新链接

配置传出认证:点击编辑-传出认证-基本访问-输入jenkins用户名、密码

2、配置Jenkins configuration:应用程序-Jenkins configuration-Add Site-输入jenkins地址及用户名密码(亦可使用api token)

3、添加网络钩子:

设置-系统-WebHook-创建WebHook,填写详细信息并设置触发规则

其中url为http://你的Jenkins地址/jira-trigger-webhook-receiver/

四、jenkins中创建job

1、构建触发器

跟jira相关的触发器有两类:

(1)Build when a comment is added to JIRA

JQL filter:指定触发对象,project=WUZ指的是jira中项目关键字为WUZ的项目

Comment pattern:jira备注中填写的comment,当用户在jira中添加指定备注时,会触发jenkins构建

Jenkins parameter:jenkins中的参数名称

Issue attribute path:jira issue中提取出得需要传给jenkins的属性值

下图样例中,当关键字为”TES”的项目中添加了备注信息:”build this please”,将触发jenkins构建,并将jira issue的ID传给参数JIRA_ISSUE_KEY,可在后面的pipeline中调用;

(2)Build when an issue is updated in JIRA

JIRA fiels ID:变更项

Compare new value:新的状态值

Compare old value:原始状态值

下图样例中,选择status作为jenkins构建的触发项,即issue的状态由TO DO 变更为In Progress时,触发jenkins构建建,并将此时的issue状态传给参数JIRA_ISSUE_KEY1

3、编写构建pipeline

  1. node {
  2. stage(‘Preparation’) {
  3. echo “${WORKSPACE}”
  4. echo “${JIRA_ISSUE_KEY}”
  5. }
  6. }
  7. node {
  8. stage(‘TransitionIssue’) {
  9. withEnv([‘JIRA_SITE=jira1’]) {
  10. def transitionInput =
  11. [
  12. transition: [
  13. id: ’31’
  14. ]
  15. ]
  16. jiraTransitionIssue idOrKey:”${params.JIRA_ISSUE_KEY}” , input: transitionInput
  17. }
  18. }
  19. }

4、样例效果

jenkins编译结果:

 

jira变更记录: