Skip to content

Commit b8dec9a

Browse files
Merge pull request #1620 from OctopusDeploy/fnm/use-new-jira-search-api
Use new JIRA search API with fallback
2 parents 317021c + be7a61a commit b8dec9a

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

step-templates/jira-transition-issues.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
"Name": "JIRA - Transition Issues",
44
"Description": "Transitions JIRA issues as the code they are associated with gets deployed.",
55
"ActionType": "Octopus.Script",
6-
"Version": 9,
6+
"Version": 10,
77
"CommunityActionTemplateId": null,
8+
"Packages": [],
9+
"GitDependencies": [],
810
"Properties": {
911
"Octopus.Action.Script.Syntax": "PowerShell",
1012
"Octopus.Action.Script.ScriptSource": "Inline",
11-
"Octopus.Action.Script.ScriptBody": "$ErrorActionPreference = \"Stop\"\n[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12\n\n$Uri = $OctopusParameters[\"Jira.Transition.Url\"]\n$Jql = $OctopusParameters[\"Jira.Transition.Query\"]\n$Transition = $OctopusParameters[\"Jira.Transition.Name\"]\n$User = $OctopusParameters[\"Jira.Transition.Username\"]\n$Password = $OctopusParameters[\"Jira.Transition.Password\"]\n\nif ([string]::IsNullOrWhitespace($Uri)) {\n throw \"Missing parameter value for 'Jira.Transition.Url'\"\n}\nif ([string]::IsNullOrWhitespace($Jql)) {\n throw \"Missing parameter value for 'Jira.Transition.Query'\"\n}\nif ([string]::IsNullOrWhitespace($Transition)) {\n throw \"Missing parameter value for 'Jira.Transition.Name'\"\n}\nif ([string]::IsNullOrWhitespace($User)) {\n throw \"Missing parameter value for 'Jira.Transition.Username'\"\n}\nif ([string]::IsNullOrWhitespace($Password)) {\n throw \"Missing parameter value for 'Jira.Transition.Password'\"\n}\n\nfunction Create-Uri {\n Param (\n $BaseUri,\n $ChildUri\n )\n\n if ([string]::IsNullOrWhitespace($BaseUri)) {\n throw \"BaseUri is null or empty!\"\n }\n if ([string]::IsNullOrWhitespace($ChildUri)) {\n throw \"ChildUri is null or empty!\"\n }\n $CombinedUri = \"$($BaseUri.TrimEnd(\"/\"))/$($ChildUri.TrimStart(\"/\"))\"\n return New-Object -TypeName System.Uri $CombinedUri\n}\n\nfunction Jira-QueryApi {\n Param (\n [Uri]$Query,\n [string]$Username,\n [string]$Password\n );\n\n Write-Output \"Querying JIRA API $($Query.AbsoluteUri)\"\n\n # Prepare the Basic Authorization header - PSCredential doesn't seem to work\n $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes((\"{0}:{1}\" -f $Username, $Password)))\n $headers = @{Authorization = (\"Basic {0}\" -f $base64AuthInfo) }\n\n # Execute the query\n Invoke-RestMethod -Uri $Query -Headers $headers\n}\n\nfunction Jira-ExecuteApi {\n Param (\n [Uri]$Query,\n [string]$Body,\n [string]$Username,\n [string]$Password\n );\n\n Write-Output \"Posting JIRA API $($Query.AbsoluteUri)\"\n\n $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes((\"{0}:{1}\" -f $Username, $Password)))\n $headers = @{Authorization = (\"Basic {0}\" -f $base64AuthInfo) }\n\n Invoke-RestMethod -Uri $Query -Headers $headers -UseBasicParsing -Body $Body -Method Post -ContentType \"application/json\"\n}\n\nfunction Jira-GetTransitions {\n Param (\n [Uri]$TransitionsUri,\n [string]$Username,\n [string]$Password\n );\n\n $transitions = Jira-QueryApi -Query $TransitionsUri -Username $Username -Password $Password\n $transitions.transitions\n}\n\nfunction Jira-PostTransition {\n Param (\n [Uri]$TransitionsUri,\n [string]$Username,\n [string]$Password,\n [string]$Body\n );\n\n Jira-ExecuteApi -Query $TransitionsUri -Body $body -Username $Username -Password $Password\n}\n\nfunction Jira-TransitionTicket {\n Param (\n [Uri]$IssueUri,\n [string]$Username,\n [string]$Password,\n [string]$Transition\n );\n\n $query = $IssueUri.AbsoluteUri + \"/transitions\"\n $uri = [System.Uri] $query\n\n $transitions = Jira-GetTransitions -TransitionsUri $uri -Username $Username -Password $Password\n $match = $transitions | Where-Object name -eq $Transition | Select-Object -First 1\n $comment = \"Status automatically updated via Octopus Deploy with release {0} of {1} to {2}\" -f $OctopusParameters['Octopus.Action.Package.PackageVersion'], $OctopusParameters['Octopus.Project.Name'], $OctopusParameters['Octopus.Environment.Name'] \n \n If ($null -ne $match) {\n $transitionId = $match.id\n $body = \"{ \"\"update\"\": { \"\"comment\"\": [ { \"\"add\"\" : { \"\"body\"\" : \"\"$comment\"\" } } ] }, \"\"transition\"\": { \"\"id\"\": \"\"$transitionId\"\" } }\"\n\n Jira-PostTransition -TransitionsUri $uri -Body $body -Username $Username -Password $Password\n }\n}\n\nfunction Jira-TransitionTickets {\n Param (\n [string]$BaseUri,\n [string]$Username,\n [string]$Password,\n [string]$Jql,\n [string]$Transition\n );\n\n $childUri = (\"/rest/api/2/search?jql=\" + $Jql)\n $queryUri = Create-Uri -BaseUri $BaseUri -ChildUri $childUri\n \n $json = Jira-QueryApi -Query $queryUri -Username $Username -Password $Password\n\n If ($json.total -eq 0) {\n Write-Output \"No issues were found that matched your query : $Jql\"\n }\n Else {\n ForEach ($issue in $json.issues) {\n Jira-TransitionTicket -IssueUri $issue.self -Transition $Transition -Username $Username -Password $Password\n }\n }\n}\n\nWrite-Output \"JIRA - Create Transition\"\nWrite-Output \" JIRA URL : $Uri\"\nWrite-Output \" JIRA JQL : $Jql\"\nWrite-Output \" Transition : $Transition\"\nWrite-Output \" Username : $User\"\n\n# Some sample values:\n# $uri = \"http://tempuri.org\"\n# $Jql = \"fixVersion = 11.3.1 AND status = Completed\"\n# $Ttransition = \"Deploy\"\n# $User = \"admin\"\n# $Pass = \"admin\"\n\ntry {\n Jira-TransitionTickets -BaseUri $Uri -Jql $Jql -Transition $Transition -Username $User -Password $Password\n}\ncatch {\n Write-Error \"An error occurred while attempting to transition the JIRA issues: $($_.Exception)\"\n}"
13+
"Octopus.Action.Script.ScriptBody": "$ErrorActionPreference = \"Stop\"\n[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12\n\n$Uri = $OctopusParameters[\"Jira.Transition.Url\"]\n$Jql = $OctopusParameters[\"Jira.Transition.Query\"]\n$Transition = $OctopusParameters[\"Jira.Transition.Name\"]\n$User = $OctopusParameters[\"Jira.Transition.Username\"]\n$Password = $OctopusParameters[\"Jira.Transition.Password\"]\n\nif ([string]::IsNullOrWhitespace($Uri)) {\n throw \"Missing parameter value for 'Jira.Transition.Url'\"\n}\nif ([string]::IsNullOrWhitespace($Jql)) {\n throw \"Missing parameter value for 'Jira.Transition.Query'\"\n}\nif ([string]::IsNullOrWhitespace($Transition)) {\n throw \"Missing parameter value for 'Jira.Transition.Name'\"\n}\nif ([string]::IsNullOrWhitespace($User)) {\n throw \"Missing parameter value for 'Jira.Transition.Username'\"\n}\nif ([string]::IsNullOrWhitespace($Password)) {\n throw \"Missing parameter value for 'Jira.Transition.Password'\"\n}\n\nfunction Create-Uri {\n Param (\n $BaseUri,\n $ChildUri\n )\n\n if ([string]::IsNullOrWhitespace($BaseUri)) {\n throw \"BaseUri is null or empty!\"\n }\n if ([string]::IsNullOrWhitespace($ChildUri)) {\n throw \"ChildUri is null or empty!\"\n }\n $CombinedUri = \"$($BaseUri.TrimEnd(\"/\"))/$($ChildUri.TrimStart(\"/\"))\"\n return New-Object -TypeName System.Uri $CombinedUri\n}\n\nfunction Jira-QueryApi {\n Param (\n [Uri]$Query,\n [string]$Username,\n [string]$Password\n );\n\n Write-Output \"Querying JIRA API $($Query.AbsoluteUri)\"\n\n # Prepare the Basic Authorization header - PSCredential doesn't seem to work\n $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes((\"{0}:{1}\" -f $Username, $Password)))\n $headers = @{Authorization = (\"Basic {0}\" -f $base64AuthInfo) }\n\n # Execute the query\n Invoke-RestMethod -Uri $Query -Headers $headers\n}\n\nfunction Jira-ExecuteApi {\n Param (\n [Uri]$Query,\n [string]$Body,\n [string]$Username,\n [string]$Password\n );\n\n Write-Output \"Posting JIRA API $($Query.AbsoluteUri)\"\n\n $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes((\"{0}:{1}\" -f $Username, $Password)))\n $headers = @{Authorization = (\"Basic {0}\" -f $base64AuthInfo) }\n\n Invoke-RestMethod -Uri $Query -Headers $headers -UseBasicParsing -Body $Body -Method Post -ContentType \"application/json\"\n}\n\nfunction Jira-GetTransitions {\n Param (\n [Uri]$TransitionsUri,\n [string]$Username,\n [string]$Password\n );\n\n $transitions = Jira-QueryApi -Query $TransitionsUri -Username $Username -Password $Password\n $transitions.transitions\n}\n\nfunction Jira-PostTransition {\n Param (\n [Uri]$TransitionsUri,\n [string]$Username,\n [string]$Password,\n [string]$Body\n );\n\n Jira-ExecuteApi -Query $TransitionsUri -Body $body -Username $Username -Password $Password\n}\n\nfunction Jira-TransitionTicket {\n Param (\n [Uri]$IssueUri,\n [string]$Username,\n [string]$Password,\n [string]$Transition\n );\n\n $query = $IssueUri.AbsoluteUri + \"/transitions\"\n $uri = [System.Uri] $query\n\n $transitions = Jira-GetTransitions -TransitionsUri $uri -Username $Username -Password $Password\n $match = $transitions | Where-Object name -eq $Transition | Select-Object -First 1\n $comment = \"Status automatically updated via Octopus Deploy with release {0} of {1} to {2}\" -f $OctopusParameters['Octopus.Action.Package.PackageVersion'], $OctopusParameters['Octopus.Project.Name'], $OctopusParameters['Octopus.Environment.Name'] \n \n If ($null -ne $match) {\n $transitionId = $match.id\n $body = \"{ \"\"update\"\": { \"\"comment\"\": [ { \"\"add\"\" : { \"\"body\"\" : \"\"$comment\"\" } } ] }, \"\"transition\"\": { \"\"id\"\": \"\"$transitionId\"\" } }\"\n\n Jira-PostTransition -TransitionsUri $uri -Body $body -Username $Username -Password $Password\n }\n}\n\nfunction Jira-TransitionTickets {\n Param (\n [string]$BaseUri,\n [string]$Username,\n [string]$Password,\n [string]$Jql,\n [string]$Transition\n );\n\n try {\n # Try the newer JQL search endpoint first\n $childUri = (\"/rest/api/2/search/jql?jql=\" + $Jql)\n $queryUri = Create-Uri -BaseUri $BaseUri -ChildUri $childUri\n \n $json = Jira-QueryApi -Query $queryUri -Username $Username -Password $Password\n Set-Content -Path \"./header.txt\" -Value $json.issues\n If ($json.issues.Count -eq 0) {\n Write-Output \"No issues were found that matched your query : $Jql\"\n return\n }\n }\n catch {\n # Fallback to the older search endpoint if the newer one fails\n Write-Output \"Falling back to older JQL search endpoint\"\n $childUri = (\"/rest/api/2/search?jql=\" + $Jql)\n $queryUri = Create-Uri -BaseUri $BaseUri -ChildUri $childUri\n \n $json = Jira-QueryApi -Query $queryUri -Username $Username -Password $Password\n If ($json.total -eq 0) {\n Write-Output \"No issues were found that matched your query : $Jql\"\n return\n }\n }\n\n ForEach ($issue in $json.issues) {\n $issuePath = (\"/rest/api/2/issue/\" + $issue.id)\n $queryUri = Create-Uri -BaseUri $BaseUri -ChildUri $issuePath\n Jira-TransitionTicket -IssueUri $queryUri -Transition $Transition -Username $Username -Password $Password\n }\n}\n\nWrite-Output \"JIRA - Create Transition\"\nWrite-Output \" JIRA URL : $Uri\"\nWrite-Output \" JIRA JQL : $Jql\"\nWrite-Output \" Transition : $Transition\"\nWrite-Output \" Username : $User\"\n\n# Some sample values:\n# $uri = \"http://tempuri.org\"\n# $Jql = \"fixVersion = 11.3.1 AND status = Completed\"\n# $Ttransition = \"Deploy\"\n# $User = \"admin\"\n# $Pass = \"admin\"\n\ntry {\n Jira-TransitionTickets -BaseUri $Uri -Jql $Jql -Transition $Transition -Username $User -Password $Password\n}\ncatch {\n Write-Error \"An error occurred while attempting to transition the JIRA issues: $($_.Exception)\"\n}"
1214
},
1315
"Parameters": [
1416
{
@@ -62,10 +64,11 @@
6264
}
6365
}
6466
],
65-
"LastModifiedBy": "harrisonmeister",
67+
"StepPackageId": "Octopus.Script",
68+
"LastModifiedBy": "octopus-hideaki",
6669
"$Meta": {
67-
"ExportedAt": "2022-01-26T15:11:13.454Z",
68-
"OctopusVersion": "2021.3.12055",
70+
"ExportedAt": "2025-09-17T21:41:52.140Z",
71+
"OctopusVersion": "2025.3.14271",
6972
"Type": "ActionTemplate"
7073
},
7174
"Category": "jira"

0 commit comments

Comments
 (0)