This script builds upon the previous script. It authenticates against both Jira Server and Jira Cloud. It then takes a list of Projects as input, and compares the issue count for the project on the Server and Cloud side.
This would be most useful in the case of an ongoing migration, to validate a successful transfer of data.
import requests
import json
import base64
projects = []
#Define a list of target projects to compare
server_username = "<server username>"
server_password = "<server password>"
server_url = "<server URL>"
#Define connection parameters for the server side
cloud_username = "<Cloud username"
cloud_token = "<Cloud token>"
cloud_url = "<Cloud URL>"
#Define connection parameters for the Cloud side
server_credentials_string = f'{server_username}:{server_password}'
server_input_bytes = server_credentials_string.encode('utf-8')
server_encoded_bytes = base64.b64encode(server_input_bytes)
server_encoded_string = server_encoded_bytes.decode('utf-8')
#Encode the server credentials
cloud_credentials_string = f'{cloud_username}:{cloud_token}'
cloud_input_bytes = cloud_credentials_string.encode('utf-8')
cloud_encoded_bytes = base64.b64encode(cloud_input_bytes)
cloud_encoded_string = cloud_encoded_bytes.decode('utf-8')
#Encode the Cloud credentials
server_headers = {
'Authorization': f'Basic {server_encoded_string}',
'Content-Type': 'application/json',
'Accept': 'application/json',
}
#Define the headers used to connect to the server
cloud_headers = {
'Authorization': f'Basic {cloud_encoded_string}',
'Content-Type': 'application/json',
'Accept': 'application/json',
}
#Define the headers used to connect to the Cloud
#Iterate through the list of projects
for project in projects:
server_issue_count_request = requests.get(f'{server_url}/rest/api/2/search?jql=project={project}',
headers=server_headers)
server_project_issue_json = json.loads(server_issue_count_request.content)
server_project_issue_count = server_project_issue_json.get("total")
#For each server project, fetch the total issue count
cloud_issue_count_request = requests.get(f'{cloud_url}/rest/api/3/project/search?key={project}&expand=insight',
headers=cloud_headers)
cloud_project_issue_json = json.loads(cloud_issue_count_request.content)
cloud_project_issue_count = cloud_project_issue_json['values'][0]['insight']['totalIssueCount']
#For each Cloud project, fetch the total issue count
print(f"Project {project} has {server_project_issue_count} on the server side and {cloud_project_issue_count} "
f"on the cloud side")
Leave a Reply