0

I'm trying to set a long list of artifacts for one of the Release Definitions. As a start, I'm only adding one artifact. However, even that does not get updated. Below is what I have done so far. What am I doing wrong?

$patUser = 'patUser'
$patToken = 'patToken'
$base64AuthInfo = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $($patUser), $($patToken))))
$header = @{Authorization=("Basic {0}" -f $base64AuthInfo)}

$relDefsUrl = 'https://vsrm.dev.azure.com/myOrg/myProj/_apis/release/definitions?api-version=5.1'

try {
    $result = Invoke-RestMethod -Uri $relDefsUrl -Method Get -ContentType "application/json" -Headers $header
    $relDefs = $result.value

    if ($relDefs.count -gt 0) {
        $relDefs | ForEach-Object {
            if ($_.name -eq 'ThisReleaseDefinition') {
                $url = $_.url + '?api-version=5.1'
                $relDefExpanded = Invoke-RestMethod -Uri $url -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

                $sourceId = "1234:1234"
                $type = "Build"
                $alias = "_thisCIBuild"
                $defRef = ""
                $isRetained = $false

                $artifacts = @{
                    sourceId = $sourceId
                    type = $type
                    alias = $alias
                    definitionReference = $defRef
                    isRetained = $isRetained
                }

                $relDefExpanded.artifacts = $artifacts
                $body = $relDefExpanded | ConvertTo-Json -Depth 100
                $body = [System.Text.Encoding]::UTF8.GetBytes($body)

                $updateResult = Invoke-RestMethod $url -Method Put -ContentType "application/json" -body $body -Headers $header
                Write-Host "The value of 'artifacts' is updated to" $updateResult.artifacts
            }
        }
    }
    else {
        throw ("Cannot continue because there is zero release definition.")
    }
}
catch {
    throw ("Failed to call ADO REST API: " + $_.Exception.Message)
}
TNV
  • 973
  • 2
  • 11
  • 26

1 Answers1

2

Did you replace the revision parameter in the script? To update release definition, you need to set the currently revision to replace the old one, otherwise you will get the following prompt:You are using an old copy of the release pipeline. Refresh your copy and try again.This will cause the update to fail.

enter image description here

In your script, you use the get method to get the response body of the release definition, but the revision is not updated, only the artifacts part is modified.

I tested in Postman , it can work well:

enter image description here

Sample request body:

{
    "source": "userInterface",
    "revision": 46,
    "description": null,
    "createdBy": {
        "displayName": "hughl01",
        "url": "https://spsprodea1.vssps.visualstudio.com/xxx-8b1e-4b09-aaf7-291/_apis/Identities/xxx-a332-64e5-aea9",
        "_links": {
            "avatar": {
                "href": "https://dev.azure.com/{org}/_apis/GraphProfile/MemberAvatars/msa.OWY3MjMwMTMtYTMzMi03NGU1LWFlYTktNmUzZW"
            }
        },
        "id": "9f723013-a332-64e5-aea9-xxf9d353",
        "uniqueName": "xx@hotmail.com",
        "imageUrl": "https://dev.azure.com/{org}/_apis/GraphProfile/MemberAvatars/msa.OWY3MjMwMTMtYTMzMi03NGU1L",
        "descriptor": "msa.OWY3MjMwMTMtY"
    },
    "createdOn": "2019-10-29T03:11:22.673Z",
    "modifiedBy": {
        "displayName": "hughl01",
        "url": "https://spsprodea1.vssps.visualstudio.com/Ac36xx7c99faca4/_apis/Identities/9f723013-a332-64e5-aea9-6e3",
        "_links": {
            "avatar": {
                "href": "https://dev.azure.com/{org}/_apis/GraphProfile/MemberAvatars/msa.OWY3MjMwMTMtYTMzMi03NGU1LWFlYTk"
            }
        },
        "id": "9f723013-a332-64e5",
        "uniqueName": "xx@hotmail.com",
        "imageUrl": "https://dev.azure.com/{org}/_apis/GraphProfile/MemberAvatars/msa.OWY3MjMwMTMtYT",
        "descriptor": "msa.OWY3MjMwMTMtYTMzMi03NGU1LWFlYTk"
    },
    "modifiedOn": "2020-04-21T06:04:04.877Z",
    "isDeleted": false,
    
    "variables": {
        "test": {
            "value": "true"
        }
    },
    "variableGroups": [],
    "environments": [
        {
            "id": 5,
            "name": "Stage 1",
            "rank": 1,
            "owner": {
                "displayName": "hughl01",
             ......  
            
    ],
    "artifacts": [
        {
            "sourceId": "59b994e8-4a77-46a1-8b5d-6a25f10-9df2-4cc7-9f2f-944cf7280d1c",
            "type": "Git",
            "alias": "_111",
            "definitionReference": {
                "branches": {
                    "id": "master",
                    "name": "master"
                },
                "checkoutNestedSubmodules": {
                    "id": "True",
                    "name": "Any nested submodules within"
                },
                "checkoutSubmodules": {
                    "id": "",
                    "name": ""
                },
                "defaultVersionSpecific": {
                    "id": "",
                    "name": ""
                },
                "defaultVersionType": {
                    "id": "latestFromBranchType",
                    "name": "Latest from the default branch"
                },
                "definition": {
                    "id": "46f31875-9df2-4cc7-9f2f-9441c",
                    "name": "111"
                },
                "fetchDepth": {
                    "id": "",
                    "name": ""
                },
                "gitLfsSupport": {
                    "id": "",
                    "name": ""
                },
                "project": {
                    "id": "59b994e8-4a77-46a1-8b5d-6a26",
                    "name": "xx"
                }
            },
            "isRetained": false
        },
        {
            "sourceId": "59b994e8-4a77-46a1-8b5d-6a24b6:30",
            "type": "Build",
            "alias": "_dev02",
            "definitionReference": {
                "artifactSourceDefinitionUrl": {
                    "id": "https://dev.azure.com/{org}/_permalink/_build/index?collectionId=0933e8b2-f504-4b7e-9ea59&projectId=59b994e8-4a77-4a1-8b5d-6a4b6&definitionId=30",
                    "name": ""
                },
                "defaultVersionBranch": {
                    "id": "",
                    "name": ""
                },
                "defaultVersionSpecific": {
                    "id": "2279",
                    "name": "2279"
                },
                "defaultVersionTags": {
                    "id": "",
                    "name": ""
                },
                "defaultVersionType": {
                    "id": "specificVersionType",
                    "name": "Specific version"
                },
                "definition": {
                    "id": "30",
                    "name": "dev02"
                },
                "definitions": {
                    "id": "",
                    "name": ""
                },
                "IsMultiDefinitionType": {
                    "id": "False",
                    "name": "False"
                },
                "project": {
                    "id": "59b994e8-4a77-4xxx10d24b6",
                    "name": "xx"
                },
                "repository": {
                    "id": "",
                    "name": ""
                }
            },
            "isPrimary": true,
            "isRetained": false
        },
        {
            "type": "Build",
            "alias": "_UnitTest",
            "definitionReference": {
                "defaultVersionType": {
                    "id": "latestType",
                    "name": "Latest"
                },
                "definition": {
                    "id": "27",
                    "name": "UnitTest"
                },
                "project": {
                    "id": "59b994e8-4a77xxx25f10d24b6",
                    "name": "xx"
                }
            },
            "isPrimary": false,
            "isRetained": false
        }
    ],
    "triggers": [],
    "releaseNameFormat": "Release-$(rev:r)",
    "tags": [],
    "properties": {
        "DefinitionCreationSource": {
            "$type": "System.String",
            "$value": "ReleaseNew"
        },
        "IntegrateBoardsWorkItems": {
            "$type": "System.String",
            "$value": "True"
        },
        "IntegrateJiraWorkItems": {
            "$type": "System.String",
            "$value": "false"
        }
    },
    "id": 2,
    "name": "New release pipeline (1)",
    "path": "\\",
    "projectReference": null,
    "url": "https://vsrm.dev.azure.com/{org}/59b994e8-4a7xxd-6a25xx/_apis/Release/definitions/2",
    "_links": {
        "self": {
            "href": "https://vsrm.dev.azure.com/{org}/59b994e8-4xx1-xx0d24b6/_apis/Release/definitions/2"
        },
        "web": {
            "href": "https://dev.azure.com/{org}/59b994e8-xx5f10d24b6/_release?definitionId=2"
        }
    }
}
Hugh Lin
  • 17,829
  • 2
  • 21
  • 25
  • Hi @Hugh Lin, I replaced the revision number, but somehow I am still getting the error. Did you have to update modifiedOn datetime or anything else? { "$id": "1", "innerException": null, "message": "You are using an old copy of the release pipeline. Refresh your copy and try again.", "typeName": "Microsoft.VisualStudio.Services.ReleaseManagement.Data.Exceptions.InvalidRequestException, Microsoft.VisualStudio.Services.ReleaseManagement2.Data", "typeKey": "InvalidRequestException", "errorCode": 0, "eventId": 3000 } – TNV Apr 21 '20 at 21:02
  • I did n’t update the `modifiedOn` parameter, I just removed the `lastRelease` part from the request body, I attached my sample request body in the answer. – Hugh Lin Apr 22 '20 at 02:16
  • 1
    I did it wrong the first time. I set the revision number to be the number it is currently on and it works now. Thanks, I will tie all of this together and update the PowerShell script that I have. – TNV Apr 22 '20 at 22:14
  • Hello @HughLin, I have changed the only revision by count +1 but still shows "You are using an old copy of the release pipeline. Refresh your copy and try again." , TNV Please guide me , is there needs to change anything except revision... – microset Apr 25 '22 at 05:33