Just a heads up: On March 24, 2025, starting at 4:30pm CDT / 19:30 UTC, the site will be undergoing scheduled maintenance for a few hours. During this time, the site might be unavailable for a short while. Thanks for your patience.
×I know that Jira has a REST API interface. I don't have much experience querying API's. I'm looking for a quick bash or python script that I can use to create a ticket in the DevOps project for the Deployment issue type. That is all. I know this is probably an easy thing to do but I don't know how to do it. This script will be triggered through an automatic pipeline in gitlab.
This is the script we are using for Redmine, I need something similar for Jira:
#!/usr/bin/env bash GIT_COMMIT=`git rev-parse HEAD` REDMINE_DATA="{\"issue\":{\"project_id\":1,\"tracker_id\":4,\"status_id\":1,\"priority_id\":2,\"subject\":\"${CI_PROJECT_NAME} Deploy to Prod ${CI_COMMIT_TAG} (migrations: yes, seeds: no)\",\"description\":\"[](https://gitlab.verisys.com/verisys/${CI_PROJECT_NAME}/commits/${CI_COMMIT_TAG})[](https://gitlab.verisys.com/verisys/${CI_PROJECT_NAME}/tree/${CI_COMMIT_TAG})[](https://gitlab.verisys.com/verisys/${CI_PROJECT_NAME}/tree/${CI_COMMIT_TAG})\",\"done_ratio\":0,\"spent_hours\":0.0,\"total_spent_hours\":0.0,\"custom_fields\":[{\"id\":18,\"name\":\"GitHub Code Reviewed\",\"value\":\"1\"},{\"id\":9,\"name\":\"QA Verified\",\"value\":\"1\"},{\"id\":10,\"name\":\"PO Approved\",\"value\":\"0\"},{\"id\":11,\"name\":\"Business Signoff\",\"value\":\"0\"},{\"id\":20,\"name\":\"Ops Approved\",\"value\":\"0\"},{\"id\":21,\"name\":\"Manager Approved\",\"value\":\"0\"},{\"id\":13,\"name\":\"Commits For Approval\",\"value\":\"${GIT_COMMIT}\"},{\"id\":17,\"name\":\"Deployment Completion Date\",\"value\":\"\"},{\"id\":16,\"name\":\"Verification Date\",\"value\":\"\"},{\"id\":19,\"name\":\"Pivotal Tracker Task ID\",\"value\":\"None\"}]}}" REDMINE_API_KEY_HEADER="X-REDMINE-API-KEY: ${REDMINE_API_KEY}" echo curl -k -v -H "Content-Type: application/json" --header "REDMINE_API_KEY_HEADER" -X POST "${REDMINE_URL}" -d "$REDMINE_DATA" curl -k -v -H "Content-Type: application/json" --header "${REDMINE_API_KEY_HEADER}" -X POST "${REDMINE_URL}" -d "$REDMINE_DATA"
Below is a simple Python script to create a basic 'Story' issue type in a project with key"ABC" using the REST API. It should work, but some if the indentation may be corrupted as a copy/pasted....
from urllib2 import Request, urlopen, URLError
import sys
import json
import base64
import os
def jira_rest_call(data):
# Set the root JIRA URL, and encode the username and password
url = '<url>/rest/api/2/issue'
base64string = base64.encodestring('%s:%s' % ('username', 'password')).replace('\n','')
# Build the request
restreq = Request(url)
restreq.add_header('Content-Type', 'application/json')
restreq.add_header("Authorization", "Basic %s" % base64string)
# Send the request and grab JSON response
response = urlopen(restreq, data)
# Load into a JSON object and return that to the calling function
return json.loads(response.read())
# Build the text for the JIRA ticket.
jira_summary = 'This is the issue summary'
jira_description = 'This is the issue description'
# Build the JSON to post to JIRA
json_data = '''
{
"fields":{
"project":{
"key":"ABC"
},
"summary": "%s",
"components":[
{"name":"Component1"}
],
"issuetype":{
"name":"Story"
},
"description": "%s"
}
} ''' % (jira_summary, jira_description)
json_response = jira_rest_call(json_data)
parent_key = json_response['key']
print "Created parent issue ", parent_key
Sorry it has taken so long to get back to this. I can't get this script working. Let me give a little more detail and see if it helps. Right now we use giitlab for our test/deploy. When the app is deployed it is a docker image. During that pipeline process (currently) a script is run that auto-creates the ticket. That script is a curl command. This is our current script for Redmine that works. I need something similar for Jira.
#!/usr/bin/env bash GIT_COMMIT=`git rev-parse HEAD` REDMINE_DATA="{\"issue\":{\"project_id\":1,\"tracker_id\":4,\"status_id\":1,\"priority_id\":2,\"subject\":\"${CI_PROJECT_NAME} Deploy to Prod ${CI_COMMIT_TAG} (migrations: yes, seeds: no)\",\"description\":\"[](https://gitlab.verisys.com/verisys/${CI_PROJECT_NAME}/commits/${CI_COMMIT_TAG})[](https://gitlab.verisys.com/verisys/${CI_PROJECT_NAME}/tree/${CI_COMMIT_TAG})[](https://gitlab.verisys.com/verisys/${CI_PROJECT_NAME}/tree/${CI_COMMIT_TAG})\",\"done_ratio\":0,\"spent_hours\":0.0,\"total_spent_hours\":0.0,\"custom_fields\":[{\"id\":18,\"name\":\"GitHub Code Reviewed\",\"value\":\"1\"},{\"id\":9,\"name\":\"QA Verified\",\"value\":\"1\"},{\"id\":10,\"name\":\"PO Approved\",\"value\":\"0\"},{\"id\":11,\"name\":\"Business Signoff\",\"value\":\"0\"},{\"id\":20,\"name\":\"Ops Approved\",\"value\":\"0\"},{\"id\":21,\"name\":\"Manager Approved\",\"value\":\"0\"},{\"id\":13,\"name\":\"Commits For Approval\",\"value\":\"${GIT_COMMIT}\"},{\"id\":17,\"name\":\"Deployment Completion Date\",\"value\":\"\"},{\"id\":16,\"name\":\"Verification Date\",\"value\":\"\"},{\"id\":19,\"name\":\"Pivotal Tracker Task ID\",\"value\":\"None\"}]}}" REDMINE_API_KEY_HEADER="X-REDMINE-API-KEY: ${REDMINE_API_KEY}" echo curl -k -v -H "Content-Type: application/json" --header "REDMINE_API_KEY_HEADER" -X POST "${REDMINE_URL}" -d "$REDMINE_DATA" curl -k -v -H "Content-Type: application/json" --header "${REDMINE_API_KEY_HEADER}" -X POST "${REDMINE_URL}" -d "$REDMINE_DATA"
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi is there any way of integration of control m with jira using python
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
from urllib.request import urlopen
from jira import jira
#import jira
import sys
import json
#import base64
import os
import urllib
import urllib3
import urllib3.request
#from gluon._compat import urlopen
#from gluon._compat import urllib3
import base64
import warnings
warnings.filterwarnings('ignore')
def jira_rest_call(data):
# Set the root JIRA URL, and encode the username and password
url = 'https://jirasandbox.rampgroup.com/rest/api/2/issue'
base64string = base64.encodestring('%s:%s' % ('xxxxxxx', 'xxxxx')).replace('\n','')
# Build the request
restreq = Request(url)
restreq.add_header('Content-Type', 'application/json')
restreq.add_header("Authorization", "Basic %s" % base64string)
# Send the request and grab JSON response
response = urlopen(restreq, data)
# Load into a JSON object and return that to the calling function
return json.loads(response.read())
# Build the text for the JIRA ticket.
jira_summary = 'This is the issue summary'
jira_description = 'This is the issue description'
# Build the JSON to post to JIRA
json_data = '''
{
"fields":{
"project":{
"key":"MY22 Info HMI SW (MIHS)"
},
"summary": "%s",
"components":[
{"name":"Component1"}
],
"issuetype":{
"name":"Story"
},
"description": "%s"
}
} ''' % (jira_summary, jira_description)
json_response = jira_rest_call(json_data)
parent_key = json_response['key']
print ("Created parent issue ", parent_key)
this code is getting errors @Christopher LeJeune @Amit Kundu @mahendra akhil @Artem Grotskyi @Matt Doar @Pete Singleton
please help me
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @GOUTHAM KUMAR YELLRAPU ,
I was using this script to create a ticket in Jira.
Replace JIRA_NAME and USER_NAME and also generate an API token
from urllib2 import Request, urlopen, URLError
import sys
import json
import base64
import os
import datetime
# Jira settings
JIRA_URL = "https://JIRA_NAME.atlassian.net"
JIRA_USERNAME = "USER_NAME"
JIRA_PASSWORD = "" # For Jira Cloud use a token generated here: https://id.atlassian.com/manage/api-tokens
JIRA_PROJECT_KEY = "TEST"
JIRA_ISSUE_TYPE = "Story"
def jira_rest_call(data):
# Set the root JIRA URL, and encode the username and password
url = JIRA_URL + '/rest/api/2/issue'
base64string = base64.encodestring('%s:%s' % (JIRA_USERNAME, JIRA_PASSWORD)).replace('\n','')
# Build the request
restreq = Request(url)
restreq.add_header('Content-Type', 'application/json')
restreq.add_header("Authorization", "Basic %s" % base64string)
# Send the request and grab JSON response
response = urlopen(restreq, data)
# Load into a JSON object and return that to the calling function
return json.loads(response.read())
def generate_summary():
return "Summary - " + '{date:%Y-%m-%d %H:%M}'.format(date=datetime.datetime.now())
def generate_description(data):
return data
def generate_issue_data(summary, description):
# Build the JSON to post to JIRA
json_data = '''
{
"fields":{
"project":{
"key":"%s"
},
"summary": "%s",
"issuetype":{
"name":"%s"
},
"description": "%s"
}
} ''' % (JIRA_PROJECT_KEY, summary, JIRA_ISSUE_TYPE, description)
return json_data
json_response = jira_rest_call(generate_issue_data(generate_summary(), generate_description("TEST DESCRIPTION")))
issue_key = json_response['key']
print "Created issue ", issue_key
.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I am using the above mentioned script to create JIRA through python. But facing the below issue and am not able to navigate through this.
Traceback (most recent call last):
File "CreateJIRA.py", line 46, in <module>
json_response = jira_rest_call(json_data)
File "CreateJIRA.py", line 19, in jira_rest_call
response = urlopen(restreq, data)
File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 406, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 519, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 444, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400:
Any help will be appreciated.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi I am getting error when I was use above code, please help me anyone @Pete Singleton @mahendra akhil
this is my email id gkumar.y97@gmail.com
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Lots of examples for the jira python library at https://jira.readthedocs.io/en/master/
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Atlassian Government Cloud has achieved FedRAMP Authorization at the Moderate level! Join our webinar to learn how you can accelerate mission success and move work forward faster in cloud, all while ensuring your critical data is secure.
Register Now
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.