JIRA - Update Version Number

Octopus.Script exported 2019-03-26 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.

#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)

Provided under the Apache License version 2.0.

Report an issue

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

{
  "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//opt/buildagent/work/75443764cd38076d/step-templates/jira-update-version.json",
  "Website": "/step-templates/c691729f-685a-4339-bba9-716633b221ae",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Tuesday, March 26, 2019