Devops自动化集成部署-jenkins与jira集成

1.jenkins安装jira插件

系统管理->插件管理
在这里插入图片描述
可选插件
搜索jira
勾选JIRA Trigger
点击直接安装
在这里插入图片描述

2.jenkins配置

2.1系统设置

系统管理->系统设置
在这里插入图片描述
找到JIRA Trigger Configuration
填入jira的url、用户名、密码信息
点击保存
在这里插入图片描述

2.2任务配置

对任务进行配置
找到构建触发器
勾选Build when an issue is updated in JIRA(JIRA问题更新)
JQL filter为问题过滤
Changelog matcher 为更改日志匹配器
Parameter mapping为参数映射
具体怎么填在3.jira配置里介绍
在这里插入图片描述

3.jira配置

3.1网络钩子WebHooks配置

左上角点击设置->系统
在这里插入图片描述
在左边导航栏找到网络钩子
在这里插入图片描述
点击创建网络钩子
在这里插入图片描述
基础信息填写
填入网络钩子名称
状态开启
URL填入: http://[jenkins ip地址:端口]/jira-trigger-webhook-receiver/
描述非必填
在这里插入图片描述
jenkins那边配置的是问题事件,其它事件就不介绍了,根据需要勾选

问题事件配置
component = workflow是jenkins那边配置的JQL filter
已更新对应jenkins里Build when an issue is updated in JIRA触发器
在这里插入图片描述
JQL filter还有很多参数,我填的component是模块
因为是spring cloud项目,问题更改了哪个模块,就去重新部署某个微服务项目
参数一览
在这里插入图片描述
配置完之后点击最下面的创建
在这里插入图片描述
出现以下页面,点击一下链接,验证一下是否成功
在这里插入图片描述
出现以下页面就表示配置成功
在这里插入图片描述

3.2问题状态配置

在jenkins触发器配置的时候,我配置了问题状态为完成的时候触发构建
在这里插入图片描述
这个状态来自设置->问题
在这里插入图片描述
问题属性->状态
在这里插入图片描述
点击状态我可以看到下图,可以添加状态,编辑状态
在这里插入图片描述
点击完成状态的编辑按钮,可以看到我们在jenkins填的Done就是状态的名称
在这里插入图片描述

3.3工作流配置

在问题->工作流
在这里插入图片描述
具体怎么配看需求,在哪一步需要重新构建部署,把那一步的流程状态名称填入jenkins构建触发器配置里

3.4创建项目

点击项目->创建项目
在这里插入图片描述
选择Scrum开发方法
点击下一步
在这里插入图片描述
点击选择
在这里插入图片描述
填入名称、关键字
点击提交
在这里插入图片描述

3.5模块配置

点击模块,在上方填入需要增加的模块信息,点击添加
前面我们配置的模块名称是workflow,这里新建了一个workflow模块
在这里插入图片描述

4.验证

点击顶部导航栏的新建按钮
在这里插入图片描述
填入必填信息,模块选择我们已经配置好的workflow,点击新建
在这里插入图片描述
点击问题,找到新建的问题,点击完成来触发jenkins构建
在这里插入图片描述
在jenkins里workflow构建任务开始构建了,配置成功!
在这里插入图片描述

版权声明:本文为

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变更记录: