jenkins构建后自动改变jira上issue的状态

最近碰到一个需求,大致是这样:jenkins的job在构建之后要求将jira上面某个缺陷的状态变为待验证。

这篇博客就仅仅针对这个需求写一下实现的方式,后续会写博客来具体介绍python+jira的操作。

下面来说说实现方式

思路:

           step1.使用shell获取gitlab上的提交信息,与开发人员约定,修复BUG的提交,需要在commit信息中包含BUG ID,标记&&保存上一次jenkins构建的提交信息,下次构建时,获取当前的commit id ,获取两次commit之间所有的BUG信息。

           step2.使用python调用jira的api,获取到shell给出的BUG ID列表,然后转变这些BUG的状态。

           step3.集成到jenkins,提供给测试人员使用。

实现过程:

帮助文档:Python JIRA:http://jira.readthedocs.io/en/master

一、shell

比较多,没有加注释,大家读下应该还是比较好懂的。

#! /bin/bash
set -x
function GetCommitinfo(){
        cd ${WORKSPACE}
        if [ -d "${filepath}" ]; then
                rm -rf ${filepath}/*
        else
                :
        fi
        mkdir -p ${filepath}/${tmpcommit}
        echo "上次的commitid是:${lastcommit}"
        echo "本次的commitid是:${tmpcommit}"
}
function GitCompare(){
        if [ "${tmpcommit}" == "${lastcommit}" ]; then
                echo "未检查到版本更新,请联系开发人员!"
                exit 1
        else
                :
        fi

}
cd ${WORKSPACE}
tmpcommit=`git log -1 | grep commit | awk -F " " '{print $2}' | grep -v commit`
filepath=/Users/jira/Work/workspace/commitinfo/${JOB_NAME}
buginfopath=/Users/jira/Work/workspace/BUGID
commitdir=${filepath}/*
lastcommit=`basename ${commitdir}`
bugidfile=${buginfopath}/${JOB_NAME}_${BUILD_ID}_commitinfo.txt
rm -rf ${buginfopath}/${JOB_NAME}.temp
#rm -rf ${buginfopath}/${JOB_NAME}_commitinfo.txt
rm -rf ${buginfopath}/${JOB_NAME}.txt
GetCommitinfo
if [ "${onlyBuild}" == true ]; then
        :
else
        GitCompare
fi
git log --pretty=oneline ${lastcommit}...${tmpcommit} | grep T_${1} > ${bugidfile}
cat ${bugidfile}
commitline=$(cat ${bugidfile})
if [ -z "${commitline}" ]; then
        echo "commit信息未包含BUG修复!脚本正常退出"
        exit 0
else
        :
fi
touch ${buginfopath}/${JOB_NAME}.temp
for item in ${commitline[@]} ; do
        commitinfo=`echo ${item} | awk -F '[ ;]+' '{print $1,$2,$3}'`
        echo "当前的提交信息为 ${commitinfo}"
        BUGID=`echo "${commitinfo}" | awk -F "_" '{print $2}'`
        echo "当前获取到的BUGID为:${BUGID}"
        echo "${BUGID}" >> ${buginfopath}/${JOB_NAME}.temp
        awk NF ${buginfopath}/${JOB_NAME}.temp > ${buginfopath}/${JOB_NAME}.txt
done
BugInfo=`cat ${buginfopath}/${JOB_NAME}.txt`
echo "当前需要处理的BUG列表是 :${BugInfo}"

二、python脚本:

# -*- coding=utf-8
from pathlib import Path
from jira import JIRA
import sys, getopt, redis, os
from jira import JIRA
jobname=os.environ["JOB_NAME"];
BugId_file = Path("/Users/jira/Work/workspace/BUGID/%s.txt"%(jobname))
if BugId_file.is_file(): 
        f = open("/Users/jira/Work/workspace/BUGID/%s.txt"%(jobname) , "r")
        BugId=f.readlines() #获取jira上的BUG ID
        f.close
else:
        print("未找到BUG ID相关信息,程序正常退出!")
        sys.exit(0)

for i in BugId:
        try:
            i=i.replace("\n", "")
            i=i.strip()
            print("当前需要改变状态的BUG ID为 :" + i)
            myjira = JIRA('http://jira.exmaple.com:8080',basic_auth=('jenkins', '123456')) #建立jira连接
            print(myjira.user(myjira.current_user())) #打印当前jira连接使用的用户
            myissue = myjira.issue(i) #获取到jira上的BUG信息
            transitions = myjira.transitions(myissue)#获取该BUG的可流转状态
            status=[(t['id'], t['name']) for t in transitions]
            print("该问题当前可选的状态为: " )
            for t in status:
                    print(t)
                    t=t[0]
                    print(t)
                    if t == '21':
                            myjira.transition_issue(myissue,'21')#将BUG状态变为待验证
                            print("问题 " + i + "处理完成,状态已经变更为待验证。")
                    else:
                            print("该BUG的状态不符合要求,不予流转!")
        except:
                print("commit提交不符合规范,不予处理!")
                continue

代码加了注释,大家可以结合帮助文档看一下

那么python这一块做完了

接下来在jenkins所在的服务器上搭建好python3的环境

可以参考:https://www.cnblogs.com/kimyeee/p/7250560.html

三、集成到jenkins

上面的脚本都写好之后集成到jenkins中其实比较简单

思路:拉取源码 ---> 获取commit id --->获取BUG ID --->转变BUG状态 --->编译出包

有疑问请尽管留言,看到就会回复~

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值