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"
}
}Provided under the Apache License version 2.0.