JIRA - Update Version Number

Octopus.Script exported 03/26/2019 by bobjwalker belongs to 'Other' category.

Update version to Jira tickets based on release number being deployed

Parameters

When steps based on the template are included in a project's deployment process, the parameters below can be set.

JIRA URL

Jira.Version.Url

The base URL of the JIRA Server (e.g. https://company.atlassian.net)

Username

Jira.Version.Username

The username of the account that will be used to update Jira ticket. The account should have sufficient permissions in JIRA to update ticket.

Password

Jira.Version.Password

The password of the account.

Version

Jira.Version.Name

The version that needs to updated to Fix Versions field in Jira ticket. If the version is not found, a new version will be created under respective project

JQL

Jira.Version.Query

The JIRA query that should be used to select issues that will be updated with Fix Versions (e.g. status = Completed AND Status = "Ready for Test Deploy")

Project Key

Jira.Version.ProjectKey

The project where version to be created

Get Versions API URL

Jira.Version.GetVersionsAPIURL

API URL to get all the versions from a particular project.

Create Version API URL

Jira.Version.CreateVersionAPIURL

API URL to create version on a particular project.

Script body

Steps based on this template will execute the following PowerShell script.
Show script
#require version 3.0

param (
    [System.Uri]$Uri,
    [string]$Jql,
    [string]$Version,
    [string]$User,
    [string]$Password,
    [string]$ProjectKey    
)

$ErrorActionPreference = "Stop"
$AllProtocols = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12'
[Net.ServicePointManager]::SecurityProtocol = $AllProtocols

function Get-Param($Name, [switch]$Required, $Default) {
    $result = $null

    if ($OctopusParameters -ne $null) {
        $result = $OctopusParameters[$Name]
    }

    if ($result -eq $null) {
        $variable = Get-Variable $Name -EA SilentlyContinue    
        if ($variable -ne $null) {
            $result = $variable.Value
        }
    }

    if ($result -eq $null) {
        if ($Required) {
            throw "Missing parameter value $Name"
        } else {
            $result = $Default
        }
    }

    return $result
}

function Jira-QueryApi
{
    Param (
        [Uri]$Query,
        [string]$Username,
        [string]$Password
    );

    Write-Host "Querying JIRA API $($Query.AbsoluteUri)"

    # Prepare the Basic Authorization header - PSCredential doesn't seem to work
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $Username,$Password)))
    $headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}

    # Execute the query
    Invoke-RestMethod -Uri $Query -Headers $headers
}

function Jira-ExecuteApi
{
    Param (
        [Uri]$Query,
        [string]$Body,
        [string]$Username,
        [string]$Password
    );

    Write-Host "Updating ticket : $($Query.AbsoluteUri)"

    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $Username,$Password)))
    $headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}
    Invoke-RestMethod -Uri $Query -Headers $headers -UseBasicParsing -Body $Body -Method Put -ContentType "application/json"
}

function Jira-CreateVersion
{
    Param (
        [Uri]$Query,
        [string]$Body,
        [string]$Username,
        [string]$Password
    );

    Write-Host "Creating a version $($Query.AbsoluteUri)"

    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $Username,$Password)))
    $headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}
    Invoke-RestMethod -Uri $Query -Headers $headers -UseBasicParsing -Body $Body -Method Post -ContentType "application/json"
}

function Jira-GetVersions
{
    Param (
        [Uri]$VersionsUri,
        [string]$Username,
        [string]$Password
    );

    $versions = Jira-QueryApi -Query $VersionsUri -Username $Username -Password $Password    
    $versions
}

function Jira-PostUpdate
{
    Param (
        [Uri]$IssueUri,
        [string]$Username,
        [string]$Password,
        [string]$Body
    );

    Jira-ExecuteApi -Query $IssueUri -Body $body -Username $Username -Password $Password
}

function Jira-UpdateTicket
{
    Param (
    	[Uri]$BaseUri,
        [Uri]$IssueUri,
        [string]$Username,
        [string]$Password,
        [string]$Version,
        [string]$ProjectKey,
        [System.Uri]$GetVersionsAPIURL,
        [System.Uri]$CreateVersionAPIURL          
    );

    $query = $IssueUri.AbsoluteUri
    $uri = [System.Uri] $query
	
    $versionuri = $GetVersionsAPIURL
    $createversionuri = $CreateVersionAPIURL
       
    $versions = Jira-GetVersions -VersionsUri $versionuri -Username $Username -Password $Password
               
    $match = $versions | Where name -eq $Version | Select -First 1   
    
    If ($match -ne $null)
    {                      
		$body = "{ ""update"" : { ""fixVersions"" : [ {""add"" : {""name"" : ""$Version""} } ] } }"
        Jira-PostUpdate -IssueUri $uri -Body $body -Username $Username -Password $Password      
    }    
    else
    {
    	$body = "{ ""name"": ""$Version"",	""project"": ""$ProjectKey""}"
     	Jira-CreateVersion -Query $createversionuri -Body $body -Username $Username -Password $Password
        
        $body = "{ ""update"" : { ""fixVersions"" : [ {""add"" : {""name"" : ""$Version""} } ] } }"
        Jira-PostUpdate -IssueUri $uri -Body $body -Username $Username -Password $Password  
    }
}

function Jira-UpdateTickets
{
    Param (
        [Uri]$BaseUri,
        [string]$Username,
        [string]$Password,
        [string]$Jql,
        [string]$Version,
        [string]$ProjectKey,
        [System.Uri]$GetVersionsAPIURL,
        [System.Uri]$CreateVersionAPIURL        
    );

    $api = New-Object -TypeName System.Uri -ArgumentList $BaseUri, ("/rest/api/2/search?jql=" + $Jql)
    $json = Jira-QueryApi -Query $api -Username $Username -Password $Password

    If ($json.total -eq 0)
    {
        Write-Output "No issues were found that matched your query : $Jql"
    }
    Else
    {
        ForEach ($issue in $json.issues)
        {
            Jira-UpdateTicket -BaseUri $BaseUri -IssueUri $issue.self -Version $Version -Username $Username -Password $Password -ProjectKey $ProjectKey -GetVersionsAPIURL $GetVersionsAPIURL -CreateVersionAPIURL $CreateVersionAPIURL
        }
    }
}

& {
    param(
        [System.Uri]$Uri,
        [string]$Jql,
        [string]$Version,
        [string]$User,
        [string]$Password,
        [string]$ProjectKey,
        [System.Uri]$GetVersionsAPIURL,
        [System.Uri]$CreateVersionAPIURL
    )

    Write-Host "JIRA - Update Version Number"
    Write-Host " Updating Fix Versions to : $Version"

    try     {
        Jira-UpdateTickets -BaseUri $Uri -Jql $Jql -Version $Version -Username $User -Password $Password -ProjectKey $ProjectKey -GetVersionsAPIURL $GetVersionsAPIURL -CreateVersionAPIURL $CreateVersionAPIURL
    } catch {
        Write-Host -ForegroundColor Red "An error occurred while attempting to update Fix Versions in JIRA issues"
        Write-Host -ForegroundColor Red $_.Exception | Format-List -Force
    }
} `
(Get-Param "Jira.Version.Url" -Required) `
(Get-Param "Jira.Version.Query" -Required) `
(Get-Param "Jira.Version.Name" -Required) `
(Get-Param "Jira.Version.Username" -Required) `
(Get-Param "Jira.Version.Password" -Required) `
(Get-Param "Jira.Version.ProjectKey" -Required) `
(Get-Param "Jira.Version.GetVersionsAPIURL" -Required) `
(Get-Param "Jira.Version.CreateVersionAPIURL" -Required)

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

Show JSON
{
  "Id": "c691729f-685a-4339-bba9-716633b221ae",
  "Name": "JIRA - Update Version Number",
  "Description": "Update version to Jira tickets based on release number being deployed",
  "Version": 2,
  "ExportedAt": "2019-03-26T19:05:07.140Z",
  "ActionType": "Octopus.Script",
  "Author": "bobjwalker",
  "Packages": [],
  "Parameters": [
    {
      "Id": "4f231879-328a-4ea0-986c-aa6a2abf8e40",
      "Name": "Jira.Version.Url",
      "Label": "JIRA URL",
      "HelpText": "The base URL of the JIRA Server (e.g. https://company.atlassian.net)",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "b16ac5da-e984-4f46-8cbd-793401be3a9b",
      "Name": "Jira.Version.Username",
      "Label": "Username",
      "HelpText": "The username of the account that will be used to update Jira ticket. The account should have sufficient permissions in JIRA to update ticket.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "056b87ba-930c-4607-81e4-557503daa237",
      "Name": "Jira.Version.Password",
      "Label": "Password",
      "HelpText": "The password of the account.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Id": "458dcb98-1843-41c7-bf22-c451a18aa693",
      "Name": "Jira.Version.Name",
      "Label": "Version",
      "HelpText": "The version that needs to updated to Fix Versions field in Jira ticket. If the version is not found, a new version will be created under respective project",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "d7f0fddd-9518-4070-9c78-166b2dc67197",
      "Name": "Jira.Version.Query",
      "Label": "JQL",
      "HelpText": "The JIRA query that should be used to select issues that will be updated with Fix Versions (e.g. status = Completed AND Status = \"Ready for Test Deploy\")",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "30334b2e-db2f-4a3e-878b-511686a58c9f",
      "Name": "Jira.Version.ProjectKey",
      "Label": "Project Key",
      "HelpText": "The project where version to be created",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "d858e2de-4dcc-4b1f-bd56-f0cb4d11b347",
      "Name": "Jira.Version.GetVersionsAPIURL",
      "Label": "Get Versions API URL",
      "HelpText": "API URL to get all the versions from a particular project.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "9747a96d-788e-45c7-816c-ee1bf91a6665",
      "Name": "Jira.Version.CreateVersionAPIURL",
      "Label": "Create Version API URL",
      "HelpText": "API URL to create version on a particular project.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.Script.ScriptBody": "#require version 3.0\n\nparam (\n    [System.Uri]$Uri,\n    [string]$Jql,\n    [string]$Version,\n    [string]$User,\n    [string]$Password,\n    [string]$ProjectKey    \n)\n\n$ErrorActionPreference = \"Stop\"\n$AllProtocols = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12'\n[Net.ServicePointManager]::SecurityProtocol = $AllProtocols\n\nfunction Get-Param($Name, [switch]$Required, $Default) {\n    $result = $null\n\n    if ($OctopusParameters -ne $null) {\n        $result = $OctopusParameters[$Name]\n    }\n\n    if ($result -eq $null) {\n        $variable = Get-Variable $Name -EA SilentlyContinue    \n        if ($variable -ne $null) {\n            $result = $variable.Value\n        }\n    }\n\n    if ($result -eq $null) {\n        if ($Required) {\n            throw \"Missing parameter value $Name\"\n        } else {\n            $result = $Default\n        }\n    }\n\n    return $result\n}\n\nfunction Jira-QueryApi\n{\n    Param (\n        [Uri]$Query,\n        [string]$Username,\n        [string]$Password\n    );\n\n    Write-Host \"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{\n    Param (\n        [Uri]$Query,\n        [string]$Body,\n        [string]$Username,\n        [string]$Password\n    );\n\n    Write-Host \"Updating ticket : $($Query.AbsoluteUri)\"\n\n    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes((\"{0}:{1}\" -f $Username,$Password)))\n    $headers = @{Authorization=(\"Basic {0}\" -f $base64AuthInfo)}\n    Invoke-RestMethod -Uri $Query -Headers $headers -UseBasicParsing -Body $Body -Method Put -ContentType \"application/json\"\n}\n\nfunction Jira-CreateVersion\n{\n    Param (\n        [Uri]$Query,\n        [string]$Body,\n        [string]$Username,\n        [string]$Password\n    );\n\n    Write-Host \"Creating a version $($Query.AbsoluteUri)\"\n\n    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes((\"{0}:{1}\" -f $Username,$Password)))\n    $headers = @{Authorization=(\"Basic {0}\" -f $base64AuthInfo)}\n    Invoke-RestMethod -Uri $Query -Headers $headers -UseBasicParsing -Body $Body -Method Post -ContentType \"application/json\"\n}\n\nfunction Jira-GetVersions\n{\n    Param (\n        [Uri]$VersionsUri,\n        [string]$Username,\n        [string]$Password\n    );\n\n    $versions = Jira-QueryApi -Query $VersionsUri -Username $Username -Password $Password    \n    $versions\n}\n\nfunction Jira-PostUpdate\n{\n    Param (\n        [Uri]$IssueUri,\n        [string]$Username,\n        [string]$Password,\n        [string]$Body\n    );\n\n    Jira-ExecuteApi -Query $IssueUri -Body $body -Username $Username -Password $Password\n}\n\nfunction Jira-UpdateTicket\n{\n    Param (\n    \t[Uri]$BaseUri,\n        [Uri]$IssueUri,\n        [string]$Username,\n        [string]$Password,\n        [string]$Version,\n        [string]$ProjectKey,\n        [System.Uri]$GetVersionsAPIURL,\n        [System.Uri]$CreateVersionAPIURL          \n    );\n\n    $query = $IssueUri.AbsoluteUri\n    $uri = [System.Uri] $query\n\t\n    $versionuri = $GetVersionsAPIURL\n    $createversionuri = $CreateVersionAPIURL\n       \n    $versions = Jira-GetVersions -VersionsUri $versionuri -Username $Username -Password $Password\n               \n    $match = $versions | Where name -eq $Version | Select -First 1   \n    \n    If ($match -ne $null)\n    {                      \n\t\t$body = \"{ \"\"update\"\" : { \"\"fixVersions\"\" : [ {\"\"add\"\" : {\"\"name\"\" : \"\"$Version\"\"} } ] } }\"\n        Jira-PostUpdate -IssueUri $uri -Body $body -Username $Username -Password $Password      \n    }    \n    else\n    {\n    \t$body = \"{ \"\"name\"\": \"\"$Version\"\",\t\"\"project\"\": \"\"$ProjectKey\"\"}\"\n     \tJira-CreateVersion -Query $createversionuri -Body $body -Username $Username -Password $Password\n        \n        $body = \"{ \"\"update\"\" : { \"\"fixVersions\"\" : [ {\"\"add\"\" : {\"\"name\"\" : \"\"$Version\"\"} } ] } }\"\n        Jira-PostUpdate -IssueUri $uri -Body $body -Username $Username -Password $Password  \n    }\n}\n\nfunction Jira-UpdateTickets\n{\n    Param (\n        [Uri]$BaseUri,\n        [string]$Username,\n        [string]$Password,\n        [string]$Jql,\n        [string]$Version,\n        [string]$ProjectKey,\n        [System.Uri]$GetVersionsAPIURL,\n        [System.Uri]$CreateVersionAPIURL        \n    );\n\n    $api = New-Object -TypeName System.Uri -ArgumentList $BaseUri, (\"/rest/api/2/search?jql=\" + $Jql)\n    $json = Jira-QueryApi -Query $api -Username $Username -Password $Password\n\n    If ($json.total -eq 0)\n    {\n        Write-Output \"No issues were found that matched your query : $Jql\"\n    }\n    Else\n    {\n        ForEach ($issue in $json.issues)\n        {\n            Jira-UpdateTicket -BaseUri $BaseUri -IssueUri $issue.self -Version $Version -Username $Username -Password $Password -ProjectKey $ProjectKey -GetVersionsAPIURL $GetVersionsAPIURL -CreateVersionAPIURL $CreateVersionAPIURL\n        }\n    }\n}\n\n& {\n    param(\n        [System.Uri]$Uri,\n        [string]$Jql,\n        [string]$Version,\n        [string]$User,\n        [string]$Password,\n        [string]$ProjectKey,\n        [System.Uri]$GetVersionsAPIURL,\n        [System.Uri]$CreateVersionAPIURL\n    )\n\n    Write-Host \"JIRA - Update Version Number\"\n    Write-Host \" Updating Fix Versions to : $Version\"\n\n    try     {\n        Jira-UpdateTickets -BaseUri $Uri -Jql $Jql -Version $Version -Username $User -Password $Password -ProjectKey $ProjectKey -GetVersionsAPIURL $GetVersionsAPIURL -CreateVersionAPIURL $CreateVersionAPIURL\n    } catch {\n        Write-Host -ForegroundColor Red \"An error occurred while attempting to update Fix Versions in JIRA issues\"\n        Write-Host -ForegroundColor Red $_.Exception | Format-List -Force\n    }\n} `\n(Get-Param \"Jira.Version.Url\" -Required) `\n(Get-Param \"Jira.Version.Query\" -Required) `\n(Get-Param \"Jira.Version.Name\" -Required) `\n(Get-Param \"Jira.Version.Username\" -Required) `\n(Get-Param \"Jira.Version.Password\" -Required) `\n(Get-Param \"Jira.Version.ProjectKey\" -Required) `\n(Get-Param \"Jira.Version.GetVersionsAPIURL\" -Required) `\n(Get-Param \"Jira.Version.CreateVersionAPIURL\" -Required)\n"
  },
  "Category": "Other",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates/jira-update-version.json",
  "Website": "/step-templates/c691729f-685a-4339-bba9-716633b221ae",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History »