Azure DevOps (ADO) - Jira Cloud syncronization requirements:
    1. The basic syncronization between standard fields should be working i.e. comments, attachments, etc. 
    2. If a sprint gets created in ADO, it should be automatically created on Jira side with the same information. 
    3. The issue (on Jira side) should always be assigned to the correct sprint as per iteration path value from ADO.
    4. A custom field called "Team" (ADO side) should sync to a custom select field called "ADO Team" (Jira side). 
    5. If any new values are added to the custom field on ADO side, these should be dynamically created on Jira side. 

    CommentAdd your comment...

    1 answer



      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:

      Jira Cloud Outgoing Script
      def res = httpClient.get("/Majids%20Development/Majids%20Development%20Team/_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
      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
      replica.customFields."Team" = workItem.customFields."Team"
      Azure DevOps Incoming Script
      if (replica.customFields."Team".value)
          issue.customFields."ADO Team".value = nodeHelper.getOption(issue, "ADO Team", replica.customFields."Team".value, true)
      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){
       // debug.error(replica.customKeys."sprint_name")
          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. 



        CommentAdd your comment...