python批量处理jira上的issue

本文分享了一位开发者如何利用Python脚本解决工作中遇到的大量重复bug,通过Selenium操作JIRA,实现快速批量关闭问题,提高工作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司使用的jira系统做为日常处理bug的系统,有一天同事突然给我转来100多个bug,说是和我已经fix的一个bug是相同的,让我把这些bug处理掉(fix掉)。我首先想到的是批处理,但是操作好久,似乎jira的批处理不好使 …
遂想到一个python脚本搞定。挂在电脑上,利用中午吃饭的时间,python脚本替我关闭了这些bug。
源码如下所示,虽然没有参考意义,但是这个思路还是值得记录下,便于下次使用。

import sys
import os
import shutil
import time

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import urllib.request

import json

import _thread

buf = '''
原因分析:1
修改方案:1
自测结果:1
测试建议:1
'''

def test():
	print(buf)
	options = webdriver.ChromeOptions()
	# options设置chrome位置
	options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
	# 配置到实例
	driver = webdriver.Chrome(chrome_options=options)

	driver.set_page_load_timeout(10) # 设置超时时间为5秒,如果5秒后网页还是没有加载完成则抛出异常
	
	driver.get('http://jira.xxxxxx.com/projects/FANSPRO/issues')
	driver.refresh()
	driver.find_element_by_id("login-form-username").send_keys("xxxx")
	driver.find_element_by_id("login-form-password").send_keys("xxxxx")
	driver.find_element_by_id("login-form-submit").click()

	time.sleep(1)
	driver.find_element_by_xpath('//*[@id="action_id_4"]').click()
	time.sleep(1)
	driver.find_element_by_xpath('//*[@id="action_id_771"]').click() # FIX

	time.sleep(1)
	driver.find_element_by_id('customfield_10402').send_keys(buf)

	time.sleep(1)
	driver.find_element_by_id("issue-workflow-xxxxx-submit").click()

	time.sleep(1)
	driver.find_element_by_id("action_id_781").click()  #Solve issue

	time.sleep(1)
	ActionChains(driver).send_keys(Keys.TAB).perform()
	ActionChains(driver).send_keys(Keys.TAB).perform()
	ActionChains(driver).send_keys(Keys.TAB).perform()
	time.sleep(1)
	ActionChains(driver).send_keys('1').perform()

	time.sleep(1)
	driver.find_element_by_id("issue-workflow-xxxxxx-submit").click()
	driver.quit()





if __name__ == '__main__':
	print(str(sys.argv[0]) + " enter")

	i = 0
	for num in range(1,9): 
		i = i +1
		print("===================================================:%s" % (i))
		test()

	time.sleep(200)


<think>好的,用户想了解如何使用PythonJira API交互来自动化任务。首先需要确定他们可能的需求,比如创建任务、查询问题或生成报告。根据引用内容,用户可能已经看过一些基础教程,但需要具体步骤和代码示例。 首先,安装必要的库是关键,引用3提到使用jira库,所以需要指导用户安装。然后认证部分,引用1和3都提到了REST API Token的使用,需要详细说明如何生成Token并连接Jira实例。 接下来是基本操作,比如创建问题、查询和更新。引用3中的项目快速启动和基本操作可以作为参考,需要给出代码示例,比如创建问题时需要的字段和结构。可能用户需要知道不同字段的设置方法,比如自定义字段的处理。 高级应用方面,引用2提到了批量操作和搜索,可以加入分页处理和JQL查询的例子。此外,错误处理也是实际应用中重要的一环,需要提醒用户添加try-except块。 最后,实际案例部分,引用4提到了项目管理软件和自动化任务,可以展示如何生成报告,这样用户能直观看到应用场景。同时,注意事项如API速率限制和字段映射需要强调,避免用户在实际使用中遇到问题。 用户可能需要进一步的问题,比如如何处理复杂查询或优化性能,所以在相关问题部分列出这些点,帮助他们深入探索。要确保所有代码示例符合Python语法,并使用正确的Jira REST API方法。</think>### 如何使用PythonJira API交互 #### 1. 环境准备 安装Python的`jira`库: ```bash pip install jira ``` #### 2. 认证配置 使用API Token或基础认证连接Jira实例: ```python from jira import JIRA # 使用API Token(推荐) jira = JIRA( server="https://your-jira-domain.atlassian.net", basic_auth=("[email protected]", "API_TOKEN") # 从Atlassian账户生成Token ) ``` #### 3. 基本操作 **创建问题**: ```python issue = jira.create_issue( project="PROJECT_KEY", summary="实现自动化任务", description="通过Python脚本创建的问题", issuetype={"name": "Task"} ) print(f"创建成功: {issue.key}") ``` **查询问题**: ```python issues = jira.search_issues('project=PROJECT_KEY AND assignee=currentUser()', maxResults=10) for issue in issues: print(f"{issue.key}: {issue.fields.summary}") ``` **更新问题**: ```python issue.update( summary="更新后的任务描述", priority={"name": "High"} ) ``` #### 4. 高级应用 **批量操作**: ```python # 批量创建子任务 bulk_issues = [{ "project": {"key": "PROJECT_KEY"}, "summary": f"子任务{i}", "issuetype": {"name": "Sub-task"}, "parent": {"key": "PARENT-123"} } for i in range(5)] jira.create_issues(field_list=bulk_issues) ``` **使用JQL深度查询**: ```python # 查询最近7天更新的高优先级任务 jql = 'project=PROJECT_KEY AND priority=High AND updated >= -7d' issues = jira.search_issues(jql, fields="summary,status", maxResults=100) ``` #### 5. 实际案例:自动化日报生成 ```python from datetime import datetime, timedelta def generate_daily_report(): jql = f'assignee=currentUser() AND updated >= "{datetime.now() - timedelta(days=1):%Y-%m-%d}"' issues = jira.search_issues(jql) report = ["昨日任务进展:"] for issue in issues: report.append(f"- {issue.key}: {issue.fields.status}") return "\n".join(report) print(generate_daily_report()) ``` #### 6. 注意事项 - API速率限制:Jira Cloud默认限制50请求/秒,建议添加延时 - 字段映射:使用`jira.fields()`获取字段ID与名称映射表 - 错误处理: ```python from jira.exceptions import JIRAError try: issue = jira.issue("INVALID-KEY") except JIRAError as e: print(f"错误代码 {e.status_code}: {e.text}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arm精选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值