Sentry Release Tracking

Octopus.Script exported 11/27/2015 by bobjwalker belongs to 'Sentry' category.

Posts a new release to Sentry, It can optionaly resolve all previous issues.

If the release already exists, it only applies the resolving.

Parameters

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

Organisation Slug

organization

The organisation-name part of the url

Project Slug

projects

;-separated list of all your sentry api slugs for the apps, (web/api/admin) on this spesific Environment.

myapp-web-dev;myapp-api-dev

protip: Add them all to a environment-scoped variable.

Resolve all open issues

resolveIssues = false

Sentry api key

sentryApiKey

Your sentry api key

Script body

Steps based on this template will execute the following PowerShell script.
Show script
$token  = [System.Text.Encoding]::UTF8.GetBytes($sentryApiKey+":")
$base64Token = [System.Convert]::ToBase64String($token)

Write-Host $base64Token

ForEach ($project in $projects.Split(';'))  
{
    $url = "https://app.getsentry.com/api/0/projects/$organization/$project/releases/"
    Write-Host $url
    
    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("Authorization", "Basic $base64Token")
    
    $body = @{ "version" = $OctopusParameters['Octopus.Release.Number'] }
    
    $body = ConvertTo-Json $body
    
    Write-Host $body
    Try
    {
        $response = Invoke-RestMethod -Method Post -Uri "$url" -Body $body -Headers $headers -ContentType "application/json"
        Write-Host $response
    }
    Catch [System.Net.WebException] 
    {
        Write-Host $_
        if($_.Exception.Response.StatusCode.Value__ -ne 400)
        {
            Throw
        }
    }
    if ($resolveIssues)
    {
        $resolveBody = '{"status":"resolved"}'
        Write-Host $resolveBody
        $url = "https://app.getsentry.com/api/0/projects/$organization/$project/groups/"
        Write-Host $url
        $response = Invoke-RestMethod -Method Put -Uri "$url" -Body $resolveBody -Headers $headers -ContentType "application/json"
        Write-Host $response
    }
}

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

Show JSON
{
  "Id": "ee62b8ac-2731-4147-8cb4-ceda0abe5a80",
  "Name": "Sentry Release Tracking",
  "Description": "Posts a new release to Sentry, It can optionaly resolve all previous issues.\n\nIf the release already exists, it only applies the resolving.",
  "Version": 47,
  "ExportedAt": "2015-11-27T12:26:31.568+00:00",
  "ActionType": "Octopus.Script",
  "Author": "bobjwalker",
  "Parameters": [
    {
      "Name": "organization",
      "Label": "Organisation Slug",
      "HelpText": "The organisation-name part of the url",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "projects",
      "Label": "Project Slug",
      "HelpText": "`;`-separated list of all your sentry api slugs for the apps, (web/api/admin) on this spesific Environment.\n\n    myapp-web-dev;myapp-api-dev\n\nprotip: Add them all to a environment-scoped variable.",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "resolveIssues",
      "Label": "Resolve all open issues",
      "HelpText": "",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Name": "sentryApiKey",
      "Label": "Sentry api key",
      "HelpText": "Your sentry api key",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptBody": "$token  = [System.Text.Encoding]::UTF8.GetBytes($sentryApiKey+\":\")\n$base64Token = [System.Convert]::ToBase64String($token)\n\nWrite-Host $base64Token\n\nForEach ($project in $projects.Split(';'))  \n{\n    $url = \"https://app.getsentry.com/api/0/projects/$organization/$project/releases/\"\n    Write-Host $url\n    \n    $headers = New-Object \"System.Collections.Generic.Dictionary[[String],[String]]\"\n    $headers.Add(\"Authorization\", \"Basic $base64Token\")\n    \n    $body = @{ \"version\" = $OctopusParameters['Octopus.Release.Number'] }\n    \n    $body = ConvertTo-Json $body\n    \n    Write-Host $body\n    Try\n    {\n        $response = Invoke-RestMethod -Method Post -Uri \"$url\" -Body $body -Headers $headers -ContentType \"application/json\"\n        Write-Host $response\n    }\n    Catch [System.Net.WebException] \n    {\n        Write-Host $_\n        if($_.Exception.Response.StatusCode.Value__ -ne 400)\n        {\n            Throw\n        }\n    }\n    if ($resolveIssues)\n    {\n        $resolveBody = '{\"status\":\"resolved\"}'\n        Write-Host $resolveBody\n        $url = \"https://app.getsentry.com/api/0/projects/$organization/$project/groups/\"\n        Write-Host $url\n        $response = Invoke-RestMethod -Method Put -Uri \"$url\" -Body $resolveBody -Headers $headers -ContentType \"application/json\"\n        Write-Host $response\n    }\n}"
  },
  "Category": "Sentry",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates/sentry-release-tracking.json",
  "Website": "/step-templates/ee62b8ac-2731-4147-8cb4-ceda0abe5a80",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History »