首页 > 后端开发 > Python教程 > 使用 Flask API 自动创建 JIRA 票证:GitHub Webhook 集成指南

使用 Flask API 自动创建 JIRA 票证:GitHub Webhook 集成指南

Patricia Arquette
发布: 2024-12-30 09:00:17
原创
983 人浏览过

使用 Python 和 Flask 从 GitHub 问题评论自动生成 JIRA 票证,从而简化您的工作流程

?介绍

欢迎来到 DevOps 的世界!今天,我们正在深入研究一个令人兴奋的项目,该项目将 Jira 和 GitHub 连接起来以实现无缝集成。该项目的目标是直接从 GitHub 问题评论自动创建 Jira 票证,从而节省开发人员的时间并减少手动工作。

以下是我们将如何处理这个项目:

  • 设置 Flask API:我们将启动一个基于 Ubuntu 的 t2.micro EC2 实例来托管我们的 Flask 应用程序。
  • 配置 Jira:我们将在 Jira 上创建一个项目并使用其 API 来创建票证。
  • 集成 API:通过向我们的 Flask 应用程序提供 Jira API 令牌,我们将使其能够与 Jira 交互。

一切设置完成后,我们的 Flask 应用程序将充当 GitHub 的 Webhook API。每当开发人员在 GitHub 问题上评论 /jira 时,程序都会自动创建相应的 Jira 票证,该票证在 Jira 仪表板上可见。令人兴奋,对吧?让我们开始吧!


?先决条件

在深入项目之前,请确保您已准备好以下内容:

  • GitHub 和 Jira 帐户:您需要两个平台上的活动帐户才能配置集成。
  • 已安装 Flask:确保在您的 Python 环境中设置 Flask。如果没有,您可以使用以下命令安装它:
pip install flask
登录后复制
登录后复制
登录后复制
登录后复制
  • 对 EC2 和 Flask 的基本了解:熟悉设置 EC2 实例和创建简单的 Flask 应用程序将帮助您顺利进行操作。

满足这些先决条件后,您就可以启动这个项目了!


?设置 EC2 实例和 Flask 应用程序

让我们通过创建和设置一个用于托管 Flask 应用程序的 EC2 实例来开始该项目。请按照以下步骤操作:

第 1 步:创建 EC2 实例

  • 导航到 AWS EC2 仪表板并创建一个新的基于 Ubuntu 的 t2.micro 实例。
  • 将实例命名为 jira-github-integration。

Automating JIRA Ticket Creation with a Flask API: A GitHub Webhook Integration Guide

  • 下载用于 SSH 访问的密钥对文件。
  • 在安全组中打开端口5000来访问flask应用。

Automating JIRA Ticket Creation with a Flask API: A GitHub Webhook Integration Guide

第 2 步:通过 SSH 连接到实例
使用下载的密钥对文件通过 SSH 连接到实例:

pip install flask
登录后复制
登录后复制
登录后复制
登录后复制

第 3 步:设置 Python 环境
运行以下命令来安装Python和Flask:

ssh -i your-key.pem ubuntu@<instance-public-ip>
登录后复制
登录后复制

这将为项目设置所有必要的依赖项。

第 4 步:创建 Flask 应用程序

  • 创建一个名为 github_jira.py 的新文件:
sudo apt update  
sudo apt install python3-pip python3-venv  
python3 -m venv myvenv  
source myvenv/bin/activate  # Activate the virtual environment  
pip3 install flask          # Install Flask in the virtual environment
登录后复制
登录后复制

将以下内容添加到文件中:

nano github_jira.py
登录后复制
登录后复制

?生成 Atlassian API 令牌

在运行 github_jira.py 脚本之前,我们需要两条关键信息:

  • Atlassian API 令牌
  • 您的 Atlassian 域名

生成 Atlassian API 令牌的步骤:

  • 登录您的 Atlassian 帐户:
  • 访问 Atlassian 并使用您的凭据登录。

导航至帐户设置:

  • 点击右上角的个人资料图片或头像。
  • 从下拉菜单中选择帐户设置。
  • 转到安全选项卡:
  • 在帐户设置页面中,单击“安全”选项卡。
  • 在 API 令牌部分下,单击“创建 API 令牌”。

Automating JIRA Ticket Creation with a Flask API: A GitHub Webhook Integration Guide

创建新的 API 令牌:

  • 提供描述(例如,GitHub Jira 集成)并根据提示设置令牌的到期日期。
  • 单击“创建”,将生成您的 API 令牌。

复制 API 令牌:

  • 单击“复制”按钮复制令牌。
  • 将令牌粘贴到 github_jira.py 脚本中的 API_TOKEN 变量中:
 import requests
 from requests.auth import HTTPBasicAuth
 import json
 from flask import Flask, request

 app = Flask(__name__)

 # Define a route that handles POST requests
 @app.route('/createJira', methods=['POST'])
 def createJira():
     # The comment's body field in the GitHub payload
     comment_data = request.json.get("comment", {})
     comment_body = comment_data.get("body", "")

     # Check if the body field of the comment is "/jira"
     if comment_body == "/jira":
         print("Condition met. Proceeding with POST request...")

         # Jira API details
         url = "https://<Your-Atlassian-domain>/rest/api/3/issue"
         API_TOKEN = "<YOUR_API_TOKEN>"
         auth = HTTPBasicAuth("<YOUR_EMAIL_ADDRESSS_CONNECTED_TO_THE_ACCOUNT>", API_TOKEN)

         headers = {
             "Accept": "application/json",
             "Content-Type": "application/json"
         }

         payload = json.dumps({
             "fields": {
                 "description": {
                     "content": [
                         {
                             "content": [
                                 {
                                     "text": "Order entry fails when selecting supplier.",
                                     "type": "text"
                                 }
                             ],
                             "type": "paragraph"
                         }
                     ],
                     "type": "doc",
                     "version": 1
                 },
                 "project": {
                     "key": "<YOUR_KEY>"
                 },
                 "issuetype": {
                     "id": "<YOUR_ISSUE_ID>"
                 },
                 "summary": "Main order flow broken",
             },
             "update": {}
         })

         # POST request to create an issue in Jira
         response = requests.post(url, data=payload, headers=headers, auth=auth)
         print("POST request response:", response.status_code, response.text)

         # Return the response back
         return json.dumps(json.loads(response.text), sort_keys=True, indent=4, separators=(",", ": "))
     else:
         print("No matching comment found. POST request will not be made.")
         return json.dumps({"error": "No matching comment found. POST request was not made."}, sort_keys=True, indent=4, separators=(",", ": "))

 if __name__ == '__main__':
     app.run(host='0.0.0.0', port=5000)
登录后复制

添加您的 Atlassian 域:
替换 在 url 变量中添加您的 Atlassian 域名。例如,如果您的 Jira 仪表板 URL 是 https://yourworkspace.atlassian.net,请使用 yourworkspace.atlassian.net 作为域。


?在 github_jira.py 脚本中配置必填字段

在运行脚本之前,您需要更新 github_jira.py 文件中的一些重要字段,以确保集成与您的 Jira 帐户无缝协作。

1。 HTTP 基本身份验证(电子邮件地址)
将 HTTPBasicAuth 中的第一个参数替换为链接到您的 Jira 帐户的电子邮件地址。

API_TOKEN = "<Your-Generated-API-Token>"
登录后复制

2。项目密钥

  • 项目密钥唯一标识将在其中创建票证的 Jira 项目。
  • 要找到您的项目密钥:
  • 转到 Jira 仪表板。
  • 在“项目”选项卡下,找到将创建票证的项目。
  • 项目密钥显示在简单的括号 (()) 中。例如,在项目Project ABC (SCRUM)中,关键是SCRUM。

Automating JIRA Ticket Creation with a Flask API: A GitHub Webhook Integration Guide

替换脚本中字段下的“key”字段:

pip install flask
登录后复制
登录后复制
登录后复制
登录后复制

3。问题类型 ID

  • 问题类型 ID 是问题类型的唯一标识符(例如 Bug、故事、任务)。
  • 查找问题 ID:
  • 在 Jira 仪表板中,单击右上角的三个点,然后选择管理自定义字段。

Automating JIRA Ticket Creation with a Flask API: A GitHub Webhook Integration Guide

  • 在“项目设置”中,从左侧菜单导航至“问题类型”。
  • 单击故事或您要使用的问题类型。
  • 查看浏览器中的 URL。在 URL 末尾,您会发现一个数值(例如 10005)。这是您的问题类型 ID。

Automating JIRA Ticket Creation with a Flask API: A GitHub Webhook Integration Guide

替换脚本中issuetype下的“id”字段:

ssh -i your-key.pem ubuntu@<instance-public-ip>
登录后复制
登录后复制

脚本中更新字段的示例:

sudo apt update  
sudo apt install python3-pip python3-venv  
python3 -m venv myvenv  
source myvenv/bin/activate  # Activate the virtual environment  
pip3 install flask          # Install Flask in the virtual environment
登录后复制
登录后复制

最后一步:运行脚本
更新这些字段后,使用以下命令运行脚本:

nano github_jira.py
登录后复制
登录后复制

您的脚本现已完全配置并准备好将 GitHub 评论与 Jira 票证创建集成!


?添加Webhook以完成集成

现在我们的脚本已准备就绪,最后一步是在 GitHub 存储库中配置 Webhook。该 webhook 将侦听特定事件(在本例中为发出评论)并触发 Flask 应用程序。

添加 Webhook 的步骤:

  • 导航到 GitHub 存储库:
  • 打开要测试该项目的 GitHub 存储库。 访问存储库设置:
  • 单击存储库菜单中的“设置”选项卡。
  • 在左侧导航栏中,选择“代码和自动化”部分下的 Webhooks。

添加新的 Webhook:

  • 单击“添加 Webhook”按钮。
  • 配置 Webhook:
  • 有效负载 URL: 输入 Flask 应用程序的 URL。这应包括您的 EC2 实例的公共 DNS 和 Flask 终端节点的路由:
pip install flask
登录后复制
登录后复制
登录后复制
登录后复制
  • 内容类型:
    从下拉菜单中选择 application/json。

  • 触发器:
    选择选项“让我选择单个事件”。
    仅选中问题评论复选框。

Automating JIRA Ticket Creation with a Flask API: A GitHub Webhook Integration Guide

保存 Webhook:

  • 单击添加 Webhook 按钮保存您的设置。

测试集成

  • 在 GitHub 上创建问题:
  • 导航到存储库的“问题”选项卡。
  • 单击“新问题”,提供标题和描述,然后保存。
  • 对该问题的评论:
  • 打开创建的问题并使用 /jira 添加评论。

观察魔法:

  • webhook 将触发并向 Flask 服务器发送 POST 请求。
  • Flask 应用程序将处理请求并使用 Jira API 创建 Jira 票证。

在 Jira 仪表板上验证:

  • 打开 Jira 仪表板并导航到脚本中指定的项目。
  • 您应该会看到与 GitHub 问题评论相对应的新创建的票证。

Automating JIRA Ticket Creation with a Flask API: A GitHub Webhook Integration Guide

Automating JIRA Ticket Creation with a Flask API: A GitHub Webhook Integration Guide

Automating JIRA Ticket Creation with a Flask API: A GitHub Webhook Integration Guide


?结论

恭喜! ?您已经成功完成了集成 GitHub 和 Jira 的实践项目。通过利用 Flask 应用程序作为中介,我们自动化了直接从 GitHub 问题评论创建 Jira 票证的过程。

在这个项目中,我们涵盖了:

  • 设置 EC2 实例来托管 Flask 应用程序。
  • 配置 Flask 应用程序以与 Jira API 交互。
  • 创建并添加 GitHub Webhook 以触发工作流程。
  • 从 GitHub 评论中观察 Jira 票证的无缝创建。

这种集成通过减少手动工作并确保重要任务不会被遗漏,简化了开发人员和项目经理之间的协作。这是自动化如何提高 DevOps 工作流程中生产力的实际演示。

您可以在此基础上随意构建,进一步自定义集成或探索其他用例,例如在 Jira 中自动跟踪 GitHub Pull 请求或将其他工具集成到您的工作流程中。

我们希望您发现这个项目内容丰富且引人入胜。 ?如需了解更多信息博客,请在 Hashnode、X(Twitter) 和 LinkedIn 上关注我。

快乐编码和自动化! ?

以上是使用 Flask API 自动创建 JIRA 票证:GitHub Webhook 集成指南的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板