You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

  1. 登录Jira,进入「设置」→「系统」→「Webhooks」→「创建Webhook」
  2. 设置名称,填写你的Python服务访问地址(例如http://你的服务器IP:5000/jira-webhook)
  3. 在「触发事件」中选择「Issue」→「创建Issue」
  4. 保存配置即可

注意事项

  • API令牌需在Atlassian个人设置的「安全」板块生成,不要用密码直接连接
  • 如果是本地开发测试,需要用内网穿透工具让Jira能访问到你的本地服务
  • 模板中的HTML标签需符合Jira支持的格式,避免使用不兼容的标签

内容的提问来源于stack exchange,提问作者Madrid Spain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:02:06