如何通过Jira API与Python自动填充指定项目新建Issue的描述字段
用Python结合Jira API实现特定项目新建Issue自动填充描述模板
场景1:通过Python脚本创建Issue时自动填充描述
这种方式适用于你通过代码发起Issue创建请求的场景,直接在创建环节注入模板内容。
步骤1:安装依赖库
执行命令安装Jira Python客户端:
pip install jira
步骤2:编写实现代码
from jira import JIRA # 替换为你的Jira实例配置 JIRA_SERVER = "https://你的Jira域名.atlassian.net" JIRA_USERNAME = "你的邮箱@example.com" JIRA_API_TOKEN = "你的API令牌" TARGET_PROJECT_KEY = "PROJ" # 目标项目的Key # 定义描述模板(兼容Jira的HTML格式) DESCRIPTION_TEMPLATE = """<p><strong>加粗文本:加粗文本</strong></p> <p><strong>加粗文本:普通文本</strong></p> <p><em>斜体文本</em></p>""" def create_jira_issue(summary, issue_type="Task"): # 建立Jira连接 jira = JIRA(server=JIRA_SERVER, basic_auth=(JIRA_USERNAME, JIRA_API_TOKEN)) # 构造Issue字段,直接填入模板描述 issue_fields = { "project": {"key": TARGET_PROJECT_KEY}, "summary": summary, "description": DESCRIPTION_TEMPLATE, "issuetype": {"name": issue_type} } # 创建并返回Issue new_issue = jira.create_issue(fields=issue_fields) print(f"成功创建Issue:{new_issue.key}") return new_issue # 测试调用 if __name__ == "__main__": create_jira_issue("测试自动填充描述的Issue")
场景2:监听Jira内所有方式创建的Issue并自动补全描述
如果需要覆盖所有创建渠道(比如网页端、其他工具创建的Issue),可以通过Jira Webhook结合Python服务实现实时监听与更新。
步骤1:安装额外依赖
除了jira库,还需要Flask搭建web服务:
pip install flask
步骤2:编写Webhook服务代码
from flask import Flask, request, jsonify from jira import JIRA # 配置信息(替换为你的实际内容) JIRA_SERVER = "https://你的Jira域名.atlassian.net" JIRA_USERNAME = "你的邮箱@example.com" JIRA_API_TOKEN = "你的API令牌" TARGET_PROJECT_KEY = "PROJ" DESCRIPTION_TEMPLATE = """<p><strong>加粗文本:加粗文本</strong></p> <p><strong>加粗文本:普通文本</strong></p> <p><em>斜体文本</em></p>""" app = Flask(__name__) # 提前初始化Jira连接 jira = JIRA(server=JIRA_SERVER, basic_auth=(JIRA_USERNAME, JIRA_API_TOKEN)) @app.route('/jira-webhook', methods=['POST']) def handle_jira_webhook(): event_data = request.get_json() # 过滤非Issue创建事件 if event_data.get("webhookEvent") != "jira:issue_created": return jsonify({"status": "忽略", "原因": "非Issue创建事件"}), 200 issue_info = event_data.get("issue") project_key = issue_info.get("project", {}).get("key") # 过滤非目标项目的Issue if project_key != TARGET_PROJECT_KEY: return jsonify({"status": "忽略", "原因": "非目标项目Issue"}), 200 issue_key = issue_info.get("key") current_desc = issue_info.get("fields", {}).get("description", "") # 仅当描述未填充模板时更新 if not current_desc or DESCRIPTION_TEMPLATE not in current_desc: jira.issue(issue_key).update(fields={"description": DESCRIPTION_TEMPLATE}) return jsonify({"status": "成功", "消息": f"已更新Issue {issue_key} 的描述"}), 200 else: return jsonify({"status": "忽略", "原因": "描述已包含模板内容"}), 200 if __name__ == "__main__": # 启动服务,允许外部访问 app.run(host='0.0.0.0', port=5000)
步骤3:在Jira中配置Webhook
- 登录Jira,进入「设置」→「系统」→「Webhooks」→「创建Webhook」
- 设置名称,填写你的Python服务访问地址(例如
http://你的服务器IP:5000/jira-webhook) - 在「触发事件」中选择「Issue」→「创建Issue」
- 保存配置即可
注意事项
- API令牌需在Atlassian个人设置的「安全」板块生成,不要用密码直接连接
- 如果是本地开发测试,需要用内网穿透工具让Jira能访问到你的本地服务
- 模板中的HTML标签需符合Jira支持的格式,避免使用不兼容的标签
内容的提问来源于stack exchange,提问作者Madrid Spain
相关产品推荐
相关产品推荐

