Sync2Jira is a service that listens to activity on upstream GitHub repositories via fedmsg and automatically syncs issues and pull requests to downstream JIRA instances. It provides real-time synchronization capabilities, ensuring that your JIRA project stays up-to-date with upstream development activity.
- Real-time Synchronization: Listens to fedmsg events from GitHub for immediate updates
- Sync: Supports both issues and pull requests
- Flexible Configuration: Map multiple GitHub repositories to different JIRA projects
- Custom Field Support: Sync labels, assignees, milestones and custom fields such as priority and story points
- Batch Initialization: Initial sync of all existing issues and PRs
- Manual Sync Interface: Web UI for on-demand repository synchronization
- Comprehensive Filtering: Filter by labels, milestones, and other criteria
- Email Notifications: Alert administrators on sync failures
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ β GitHub Repo βββββΆβ Fedmsg/ βββββΆβ Sync2Jira βββββΆβ JIRA Project β β (Issues/PRs) β β Fedora β β (Service) β β (Issues) β β β β Messaging β β β β β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ - Sync2Jira: Main synchronization service that listens for GitHub events and creates/updates JIRA issues
- Sync Page: UI for manually triggering synchronization of specific repositories when needed
- Python 3.9+
- API access (via Personal Access Token) to a Jira Data Center instance
- GitHub API token
- Fedora messaging environment (for production)
# Clone the repository git clone https://github.com/release-engineering/Sync2Jira.git cd Sync2Jira # Install dependencies pip install -r requirements.txt # Install package pip install . # Run the service sync2jira # With initialization (sync all existing issues) INITIALIZE=1 sync2jira # Testing mode (dry run) # Set testing: True in config file sync2jiraNote: Container images are also available as an alternative to native installation. See the Usage section for container deployment instructions.
Create a configuration file in the fedmsg.d/ directory. Here's a basic example:
# fedmsg.d/sync2jira.py config = { 'sync2jira': { # GitHub API token 'github_token': 'your_github_token', # JIRA configuration 'default_jira_instance': 'primary', 'jira': { 'primary': { 'options': { 'server': 'https://your-jira.example.com', 'verify': True, }, 'token_auth': 'your_jira_token', }, }, # Repository mappings 'map': { 'github': { 'username/repository': { 'project': 'JIRA_PROJECT_KEY', 'component': 'component-name', 'sync': ['issue', 'pullrequest'], 'issue_updates': [ 'comments', 'title', 'description', {'tags': {'overwrite': True}}, {'assignee': {'overwrite': False}}, 'url' ], }, }, }, # Optional settings 'testing': False, # Set to True for dry-run mode 'initialize': False, # Set to True to sync all existing issues 'admins': ['admin_username'], # Email notifications } }| Option | Description | Default |
|---|---|---|
github_token | GitHub API token for authentication | Required |
jira | JIRA instance configurations | Required |
map | Repository-to-project mappings | Required |
testing | Enable dry-run mode (no actual changes) | False |
initialize | Sync all existing issues on startup | False |
filters | Filter issues by labels, milestones, etc. | {} |
admins | List of admin users for notifications | [] |
The main synchronization service that listens for GitHub events and creates/updates JIRA issues.
# Run the service sync2jira # With initialization (sync all existing issues) INITIALIZE=1 sync2jira # Testing mode (dry run) # Set testing: True in config file sync2jira# Basic usage - run the sync service docker run -v /path/to/your/config:/etc/fedmsg.d/ \ -e GITHUB_TOKEN=your_token \ -e JIRA_TOKEN=your_jira_token \ quay.io/redhat-services-prod/sync2jira/sync2jira:latest # With initialization (sync all existing issues) docker run -v /path/to/your/config:/etc/fedmsg.d/ \ -e GITHUB_TOKEN=your_token \ -e JIRA_TOKEN=your_jira_token \ -e INITIALIZE=1 \ quay.io/redhat-services-prod/sync2jira/sync2jira:latestNote: The -v /path/to/your/config:/etc/fedmsg.d/ option mounts your local configuration directory inside the container, allowing the containerized application to use your host system's configuration files.
A web interface for manually triggering synchronization of specific repositories when needed.
# Navigate to the sync-page directory cd sync-page # Run the Flask application python event-handler.py# Run the web interface for manual synchronization docker run -v /path/to/your/config:/etc/fedmsg.d/ \ -p 5000:5000 \ -e GITHUB_TOKEN=your_token \ -e JIRA_TOKEN=your_jira_token \ quay.io/redhat-aqe/sync2jira:sync-pageAccess the interface:
- Local development:
http://localhost:5000(or whatever port Flask shows) - Production: Configure according to your deployment environment
The following environment variables can be used to configure both tools:
Common Variables (used by both sync2jira and sync-page):
GITHUB_TOKEN: GitHub API token (can override config)JIRA_TOKEN: JIRA API token (can override config)
Sync2Jira Service Only:
INITIALIZE: Set to1to perform initial sync of all issuesFEDORA_MESSAGING_QUEUE: Custom message queue name
Comprehensive documentation is available at sync2jira.readthedocs.io:
This project is licensed under the GNU Lesser General Public License v2.1 or later (LGPLv2+). See the LICENSE file for details.
- Documentation: https://sync2jira.readthedocs.io
- Issues: GitHub Issues
- Ralph Bean (@ralphbean)
- Red Hat Release Engineering Team
Sync2Jira is part of the Red Hat Release Engineering toolchain and is used in production to sync thousands of issues across multiple projects.