How to Sync Sprint from Azure devops To Jira

Originally asked by Harinder Singh on 23 July 2020 (original question)


How to sync Sprints from Azure DevOps to Jira? may be updating iteration path from azure to Jira sprint field?

any help thank you.


Answer by Syed Majid Hassan on 24 September 2022

Hi,

I have just completed the use case of syncing a sprint to Jira dynamically i.e. if a new sprint is created and assigned to a workItem, it should be created on Jira side with the same information. The following code snippets achieve this:

Azure DevOps Outgoing Script Expand source

def res = httpClient.get("/<<project_name>>/<<team_name_in_ADO>>/_apis/work/teamsettings/iterations",true)
def flag = 0
int i = 0
for (;i<res.value.size(); i++){
    if (res.value[i].path == replica.iterationPath){
        flag =1
        break
    }
}
if (flag == 1){
    replica.customKeys."sprint_name" = res.value[i].name
    replica.customKeys."sprint_start" = res.value[i].attributes.startDate
    replica.customKeys."sprint_end" = res.value[i].attributes.finishDate
}

Jira Cloud Incoming Script Expand source

//the following code segment uses board id=3. 
//please change that as per your requirements
//or create a mapping using a HashMap
def list = httpClient.get("/rest/agile/1.0/board/3/sprint")
int flag = 0
for (int i=0; i<list.values.size(); i++){
    if (list.values[i].name == replica.customKeys.'sprint_name')
        flag = 1
}
String startDate, endDate;
if (flag == 0){
    if (replica.customKeys."sprint_start"){
        startDate = replica.customKeys."sprint_start".trim()
        startDate = startDate.replaceAll("Z",".000+05:00").trim();
    }
    if (replica.customKeys."sprint_end"){
        endDate = replica.customKeys."sprint_end".trim()
        endDate = endDate.replaceAll("Z",".000+05:00").trim();
    }
    def res = httpClient.post("/rest/agile/1.0/sprint", "{\"name\": \"${replica.customKeys.'sprint_name'}\", \"startDate\": \"${startDate}\", \"endDate\": \"${endDate}\", \"originBoardId\": 3}")
}
def res = httpClient.get("/rest/agile/1.0/board/3/sprint")
for (int i=0; i<res.values.size(); i++){
    if (res.values[i].name == replica.customKeys.'sprint_name')
        issue.customFields.Sprint.value = res.values[i].id
}        

The attached video shows the script in action.

Thanks

Majid