Automating Jira Ticket Creation from GitHub Using Python, Flask & AWS (Introducing: JiraSyncBot)

Daniel MankongDaniel Mankong
3 min read

Simplifying developer workflows with automation, one issue at a time.

Project Overview

Meet JiraSyncBot — a lightweight automation tool I built to instantly create Jira tickets from GitHub issues using just a comment: /Jira.

This tool helps developer teams stay organized across platforms by syncing GitHub and Jira with zero manual work. It’s powered by:

  • Python

  • Flask

  • AWS EC2

  • GitHub Webhooks

  • Jira REST API


Why I Built This

As developers, we often create issues in GitHub but track tasks in Jira. This results in repeated manual work, copying over titles, descriptions, and keeping both platforms updated.

I wanted a solution where:

  • Developers stay in GitHub

  • A comment like /Jira would do the heavy lifting

  • Jira tickets are created automatically

  • The system is scalable, secure, and cloud-native

And that’s how JiraSyncBot was born.


Tech Stack

TechPurpose
PythonCore scripting and REST handling
FlaskWeb server to receive GitHub events
AWS EC2Hosting the API
GitHub WebhooksTrigger automation from GitHub
Jira REST APICreate tickets programmatically

Architecture

textCopyEditGitHub (Issues) 
     ⬇️ Webhook (issue_comment)
Flask API hosted on AWS EC2
     ⬇️
Jira REST API
     ⬇️
New Jira Ticket

Only when /Jira is commented on an issue, the webhook triggers ticket creation.


Step-by-Step Build

1. Jira Setup

  • Created a Jira Atlassian account

  • Generated an API token

  • Explored the Jira REST API Docs

2. Python Script to Create Jira Ticket

Wrote a Python script(entire script available on my GitHub repo) to:

  • Authenticate with Jira

  • Create a ticket with title, description, and type

3. Converted Script into Flask API

Built a Flask app with /webhook route to:

  • Receive webhook payload from GitHub

  • Check if a comment contains /Jira

  • Extract issue title/body

  • Trigger ticket creation

pythonCopyEdit@app.route('/webhook', methods=['POST'])
def webhook():
    payload = request.json
    comment = payload['comment']['body']
    if '/Jira' in comment:
        issue_title = payload['issue']['title']
        issue_body = payload['issue']['body']
        create_jira_ticket(issue_title, issue_body)

4. Deployed to AWS EC2

  • Launched a Ubuntu EC2 instance

  • Installed Python, Flask, and dependencies

  • Deployed with gunicorn and nginx

  • Configured security groups for HTTP access

5. Configured GitHub Webhook

  • Pointed webhook to EC2 public IP

  • Listens for issue_comment events

  • Sends payload to /webhook endpoint


Demo Flow

  1. Developer opens a GitHub issue

  2. Comments /Jira

  3. Webhook sends the event to Flask

  4. JiraSyncBot creates a new Jira ticket 🚀

GitHub:

Issue: “Fix mobile login bug”
Comment: /Jira

Jira:

New ticket: “Fix mobile login bug” created in the BUGS project


📷 (Issues from our GitHub issues)


What I Learned

  • How to securely work with API tokens and webhooks

  • Hosting Flask apps on AWS EC2

  • Setting up GitHub webhooks with custom conditions

  • Automating real DevOps workflows that make life easier


What’s Next

Here’s what I’m planning to add:

  • Slack/Discord notification when a ticket is created

  • Automatically map labels/assignees

  • Bi-directional sync between Jira and GitHub


About Me

Daniel Mankong
DevOps | Automation | Cloud | Python
📍 Austin, TX
🔗 https://github.com/danielbangm | https://www.linkedin.com/in/dmankong/


Let's Connect

If you’re passionate about DevOps, automation, or just love clean developer workflows — I’d love to hear your thoughts or feedback on JiraSyncBot!

🔗 Project GitHub Repo: github.com/danielbangm/JiraSyncBot


0
Subscribe to my newsletter

Read articles from Daniel Mankong directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Daniel Mankong
Daniel Mankong