ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ืื ื• ืžืžืฉื™ื›ื™ื ื‘ืกืงื™ืจื” ืฉืœ ื›ืœื™ ื ืคืœื ืœืคื™ืชื•ื— ืขื‘ื•ืจ Windows ื•ืขื•ื“, Azure DevOps. ื”ืคืขื, ืœืื—ืจ ืฉืกื‘ืœืชื™ ื”ืจื‘ื” ืขื ืžืฉืชื ื™ ืกื‘ื™ื‘ื”, ื”ื—ืœื˜ืชื™ ืœื”ื›ื ื™ืก ืืช ื›ืœ ื”ื ื™ืกื™ื•ืŸ ืœืžืืžืจ ืื—ื“.

ื”ื—ืœ ืžื”ืขื•ื‘ื“ื” ืฉื™ืฉ ืœื”ื ืชื—ื‘ื™ืจ ืฉื•ื ื” ืœื›ืœ ืกื‘ื™ื‘ืช ื‘ื™ืฆื•ืข, ื•ื›ืœื” ื‘ื”ื™ืขื“ืจ ื™ื›ื•ืœืช ืกื˜ื ื“ืจื˜ื™ืช ืœื”ืขื‘ื™ืจ ืžืฉืชื ื™ื ืžืฉืœื‘ ืื—ื“ ืฉืœ ื”ืฆื™ื ื•ืจ ืœืžืฉื ื”ื•.

ืื ื™ ืืขืฉื” ื”ืกืชื™ื™ื’ื•ืช ืฉื”ื“ื•ื’ืžืื•ืช ื”ืขื™ืงืจื™ื•ืช ื™ื”ื™ื• ื‘- Release Pipelines, ื›ื™ YAML ืขื“ื™ื™ืŸ ืœื ื”ื’ื™ืขื” ืœืฉื, ื•ืื ื™ ืฆืจื™ืš ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ืฉืœื‘ื™ื ืจื‘ื™ื ื•ื—ืคืฆื™ื ืจื‘ื™ื. ื–ื”, ื›ืš ื ืจืื”, ื”ืคืš ื–ืžื™ืŸ ื‘-Pipelines ืจื’ื™ืœื™ื, ืืฉืจ ื›ืžืขื˜ ืžืฉืชื•ื•ื” ืœื”ื ื‘ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช. ื‘-Pipelines YAML, ื”ื•ืกืคื ื• ื”ืกื‘ืจ ื›ืœื™ื ื’ืจืคื™ ืงื˜ืŸ ืœื™ื™ืฆื•ื’ ื”ื˜ืงืกื˜ ืขื ืคืจืžื˜ืจื™ื ืฉื ื™ืชืŸ ืœื”ื’ื“ื™ืจ. ื–ื” ืžืื•ื“ ื ื•ื—; ืืชื” ืœื ืฆืจื™ืš ืœืขื‘ื•ืจ ืขืœ ื”ืชื™ืขื•ื“ ืขื‘ื•ืจ ื›ืœ ืžื•ื“ื•ืœ. ืื‘ืœ ืืชืืจ ื–ืืช ื‘ืžืืžืจ ื”ื‘ื, ืื‘ืœ ืœืขืช ืขืชื” ื”ื ื” ืชืžื•ื ื” ืฉืœ ื”ื—ื™ื“ื•ืฉ ืขืฆืžื•.

ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ืื—ืกื•ืŸ ื•ืฉื™ืžื•ืฉ

ื ืชื—ื™ืœ ืžื–ื” ืฉื™ืฉ ืœื ื• ืžืฉืชื ื™ ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ืžืขืจื›ืช. ื”ื ืžืชื—ื™ืœื™ื, ื‘ื”ืชืื ืœืžืงื•ืจื, ื‘ืžื™ืœื™ื Release, System ื•ื›ื•'. ื”ืจืฉื™ืžื” ื”ืžืœืื” (ื›ืคื™ ืฉืžืกืชื‘ืจ, ืœื), ื–ืžื™ื ื” ื‘ื›ืชื•ื‘ืช ืชื™ืขื•ื“. ื›ืœ ืกื›ื™ื–ื•ืคืจื ื™ื” ืขื ืชื—ื‘ื™ืจ ืžื•ืžื—ืฉืช ืขืœ ื™ื“ื™ ื“ื•ื’ืžื” ืžื”ืชื™ืขื•ื“ ืฉืœื”ืœืŸ. ืœืื•ืชื• ืžืฉืชื ื” ื™ืฉ ืฉืœื•ืฉื” ื™ื™ืฆื•ื’ื™ื, ืชืœื•ื™ ืื™ืคื” ืื ื—ื ื• ืงื•ืจืื™ื ืœื•.

steps:
 - bash: echo This script could use $SYSTEM_ACCESSTOKEN
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  - powershell: Write-Host "This is a script that could use $env:SYSTEM_ACCESSTOKEN"
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)

ืื ืืชื” ืžื’ื“ื™ืจ ืžืฉืชื ื” ื‘ืกื•ื›ืŸ ืฉืขืœื™ื• ืžื‘ื•ืฆืขืช ื”ืžืฉื™ืžื”, ื”ื•ื $(System.AccessToken). ืื ืืชื” ืจื•ืฆื” ืœื”ืฉืชืžืฉ ื‘ื• ื‘ืชื•ืš ืกืงืจื™ืคื˜ powershell ืขืœ ืื•ืชื• ืกื•ื›ืŸ, ื–ื” ื›ื‘ืจ ื™ื”ื™ื” $env:SYSTEM_ACCESSTOKEN. ืื ืืชื”, ื—ืœื™ืœื”, ืจื•ืฆื” ืœื”ืฉืชืžืฉ ื‘ืžืฉืชื ื” ื–ื” ืขืœ ืžืืจื— ืžืจื•ื—ืง ื›ืœืฉื”ื• ื‘ืืžืฆืขื•ืช ืžืฉื™ืžืช PowerShell ื‘ืžื›ื•ื ื•ืช ื”ื™ืขื“, ืขืœื™ืš ืœื”ืขื‘ื™ืจ ื–ืืช ื“ืจืš ืืจื’ื•ืžื ื˜ ืœืกืงืจื™ืคื˜ ื‘ืืžืฆืขื•ืช ืœื”ืคืกื™ืง. ืขื bash ื–ื” ืคืฉื•ื˜ ื™ื•ืชืจ, ืืชื” ื™ื›ื•ืœ ืคืฉื•ื˜ ืœื”ืขื‘ื™ืจ ืืช ื–ื” ืคื ื™ืžื” ื‘ืืžืฆืขื•ืช ื”ืืจื’ื•ืžื ื˜ ื•ื”ืชื—ื‘ื™ืจ $SYSTEM_ACCESSTOKEN.

ืื•ืชื ื—ื•ืงื™ื ืื™ื ื ื—ืœื™ื ืขืœ ื”ืžืฉืชื ื™ื ืฉืœืš; ื›ืืŸ ืืชื” ื›ื‘ืจ ืื—ืจืื™ ืขืœ ื”ืชื—ื‘ื™ืจ. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืžืฉืชื ื™ื ื‘ืื•ืคืŸ ืžืงื•ืžื™ ื‘ื›ืœ ืžืฉื™ืžื”.

ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ืื• ื‘ืื•ืคืŸ ื’ืœื•ื‘ืœื™ ืœื—ื ื•ืช ื”ืžืฉืชื ื”, ื•ืœืื—ืจ ืžื›ืŸ ืงืฉืจ ืื•ืชื ืžื”ื—ื ื•ืช. ื‘ื ื•ื—ื•ืช ืจื‘ื”.

ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ื›ื‘ื•ื ื•ืก, ืื ื”ืžืฉืชื ื™ื ืกื•ื“ื™ื™ื ืžืื•ื“, ื ื™ืชืŸ ืœืื—ืกืŸ ืื•ืชื ื‘ืขื ืŸ Azure ื‘ืื—ืกื•ืŸ ืฉื ืงืจื Azure Vault; ื ื™ืชืŸ ืœืงืฉืจ ืืช Vault ืœืคืจื•ื™ืงื˜ ื‘ืกืคืจื™ื™ื”.

ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ื›ืœ ื‘ืจื•ืจ ืขื ืžืฉืชื ื™ื; ื‘ืฆื™ื ื•ืจื•ืช ืขื“ื™ื™ืŸ ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืื•ืชื ื‘ืื•ืคืŸ ื™ื“ื ื™ ืขื‘ื•ืจ ื›ืœ ื”ืฉืงื”; ื‘ืฉื—ืจื•ืจ ืื™ืŸ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื›ื–ื•. ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืžื” ืืชื” ืžืขื‘ื™ืจ ืœืฆื™ื ื•ืจ ืฉื•ื‘ ื‘ื™ื•ืžื ื™ ื”ืืชื—ื•ืœ ืฉืœ ื”ืกื•ื›ืŸ, ืื‘ืœ ื–ื›ื•ืจ ืฉื”ื ื›ื‘ืจ ื ืžืฆืื™ื ืฉื ื‘ืฆื•ืจื” ืžื•ืžืจืช.

ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ืžืฉืชื ื™ื ื“ื™ื ืžื™ื™ื

ื”ื›ื™ืฃ ืžืชื—ื™ืœ ื›ืฉืื ื—ื ื• ืจื•ืฆื™ื ืœืงื‘ืœ ืขืจืš ื›ืœืฉื”ื• ื‘ืฉืœื‘ ืื—ื“ ื•ืœื”ืขื‘ื™ืจ ืื•ืชื• ืœืฉืœื‘ ื”ื‘ื.

ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ืœื ืกื•ืคืงื” ืœื ื• ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื›ื–ื•. ืื‘ืœ ื”ื™ื“ื™ื™ื ืฉืœื ื• ืœื ืœืฉืขืžื•ื ื•ื‘ืขื–ืจืช ื’ื•ื’ืœ ื ืžืฆื ืคืชืจื•ืŸ. ืชื•ื“ื” ืœืืœ, ืœ-Azure DevOps ื™ืฉ API ืฉืžืืคืฉืจ ืœื ื• ืœืขืฉื•ืช ืงืฆืช ื™ื•ืชืจ ืžืžื” ืฉืชื•ืืจ ื‘ืžืžืฉืง.

ืœื›ืŸ, ื ืฆื˜ืจืš ืงืจื™ืื” ืœืขื“ื›ื•ืŸ ืžืฉืชื ื™ื ื’ืœื•ื‘ืœื™ื™ื, ืื•ืชื” ื ืขืฉื” ื™ืฉื™ืจื•ืช ืžืชื•ืš ื”ืฆื™ื ื•ืจ. ื”ื›ืชื•ื‘ืช ืœืงื•ื—ื” ืžืžืฉืชื ื™ ืกื‘ื™ื‘ื”, ืื•ืชื ืืœื” ืฉืื™ืŸ ืขืœื™ื”ื ืžื™ืœื” ื‘ืชื™ืขื•ื“, ื›ืคื™ ืฉื”ื•ื–ื›ืจ ืงื•ื“ื ืœื›ืŸ. ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืื•ืชื ื‘ืขืฆืžืš ืื•, ืžื” ืขื•ื“, ืœื”ืงืคื™ื“ ืขืœื™ื”ื ืื ื”ื ืกื•ื’ืจื™ื ืืช ื”ื—ื ื•ืช.

$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID)  )

ืื ื—ื ื• ืžื’ื“ื™ืจื™ื ืืช ื”ืขืจืš ื”ืจื™ืง ืฉืœ ื”ืžืฉืชื ื” ืฉื‘ืจืฆื•ื ื ื• ืœื”ืขื‘ื™ืจ, ืžื’ื“ื™ืจื™ื Scope - Release

ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ืœื“ื•ื’ืžื”, ืื ื• ืžื™ื™ืฆืจื™ื ืื™ื–ื” ืžื—ื•ืœืœ ืขืจื›ื™ื ืืงืจืื™. ืฉื™ืžื• ืœื‘ ืœืชื—ื‘ื™ืจ ืฉืœ ื”ื›ืจื–ื” ืขืœ ืžืฉืชื ื” ื‘ืฉืœื‘ ื–ื”; ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื–ื• ื”ื•ืฆื’ื”.

ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ื‘ืฉืœื‘ ื”ื‘ื, ื ืขื‘ื™ืจ ืืช ื”ืžืฉืชื ื” ืœืกืงืจื™ืคื˜, ื›ืŸ, ื›ืŸ, ื–ื” ืœื ืืคืฉืจื™ ื™ืฉื™ืจื•ืช, ื–ื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื“ืจืš ืืจื’ื•ืžื ื˜.

ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ื”ืชืกืจื™ื˜ ืชื—ืช ืกืคื•ื™ืœืจ

PowerShell

#Script requires stageVar variable in release variables set to Release scope

param ( [string] $expVar )
#region variables
$ReleaseVariableName = 'StageVar'
$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID)  )
#endregion


#region Get Release Definition
Write-Host "URL: $releaseurl"
$Release = Invoke-RestMethod -Uri $releaseurl -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
#endregion

#region Output current Release Pipeline
Write-Output ('Release Pipeline variables output: {0}' -f $($Release.variables | ConvertTo-Json -Depth 10))
#endregion


#region Update StageVar with new value
$release.variables.($ReleaseVariableName).value = "$expVar"
#endregion

#region update release pipeline
Write-Output ('Updating Release Definition')
$json = @($release) | ConvertTo-Json -Depth 99
Invoke-RestMethod -Uri $releaseurl -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }
#endregion

#region Get updated Release Definition
Write-Output ('Get updated Release Definition')
Write-Host "URL: $releaseurl"
$Release = Invoke-RestMethod -Uri $releaseurl -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
#endregion

#region Output Updated Release Pipeline
Write-Output ('Updated Release Pipeline variables output: {0}' -f $($Release.variables | ConvertTo-Json -Depth 10))
#endregion

ืื•

ืœึฐื”ึทื›ึผื•ึนืช

INPUT_VAR=$1
RELEASE_VAR=$2

echo Test ID: ${INPUT_VAR}

RELEASE_URL="${SYSTEM_TEAMFOUNDATIONSERVERURI}${SYSTEM_TEAMPROJECTID}/_apis/release/releases/${RELEASE_RELEASEID}?api-version=5.0"

echo release url: $RELEASE_URL

RELEASE_JSON=$(curl -H "Authorization: Bearer $SYSTEM_ACCESSTOKEN" $RELEASE_URL)

OUTPUT=`jq ''.variables.${RELEASE_VAR}.value' = '"${INPUT_VAR}"'' <<< $RELEASE_JSON`

curl -H "Authorization: Bearer $SYSTEM_ACCESSTOKEN" -H "Content-Type: application/json" -X PUT -d "$OUTPUT" $RELEASE_URL

ื‘ืงื™ืฆื•ืจ, ื”ืกืงืจื™ืคื˜ ืฉืœื ื• ืœื•ืงื— ืืช ื”ืžืฉืชื ื” myVar ื›ืงืœื˜ ื•ืžืฉืชืžืฉ ื‘-API ื›ื“ื™ ืœื”ื›ื ื™ืก ืืช ื”ืขืจืš ืฉืœ ื”ืžืฉืชื ื” ื”ื–ื” ืœืชื•ืš stageVar. ื‘ืฉืœื‘ ื”ื‘ื, ื‘ืืžืฆืขื•ืช ืชื—ื‘ื™ืจ ืžืฉืชื ื” ืžืขืจื›ืช, ื ื•ื›ืœ ืœื”ืกืชื›ืœ ืขืœื™ื•.

ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื‘ืฆื™ื ื•ืจื•ืช Azure DevOps

ื”ื“ื•ื’ืžื” ื“ื™ ืคืฉื•ื˜ื”, ืื‘ืœ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืคื•ืชื—ืช ื‘ืคื ื™ื ื• ื”ื–ื“ืžื ื•ื™ื•ืช ื˜ื•ื‘ื•ืช, ื‘ื ื•ืกืฃ ืœืงื•ื“ืžื™ื ืฉืœื™ ืžืืžืจื™ื, ื›ืืฉืจ ืื ื• ื™ื›ื•ืœื™ื ืœื™ืฆื•ืจ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืฉืœื‘ ื”ืจืืฉื•ืŸ ืฉืœ ื”ื‘ื“ื™ืงื”, ืœื‘ืฆืข ืื™ืชื” ื›ืžื” ืžื ื™ืคื•ืœืฆื™ื•ืช ื ื•ืกืคื•ืช, ื•ื›ืžื” ื‘ืžืงื‘ื™ืœ. ื•ื”ืฉืœื‘ ื”ืื—ืจื•ืŸ ื”ื•ื ืœื”ืจื•ืก ืื•ืชื•. ื›ืขืช ืื ื• ืžืคืขื™ืœื™ื ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช ืฉืœ ื”ืžื•ืฆืจ ื‘ื›ืœ ืคืขื ื‘ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื˜ืจื™ื•ืช. ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉื”ื ื—ื™ื™ื ื‘ืขืจืš 10 ื“ืงื•ืช, ื–ื” ืขื•ืœื” ืื’ื•ืจื”.

ื‘ืžืืžืจ ื”ื‘ื, ื‘ืžื™ื“ืช ื”ืฆื•ืจืš, ืื“ื‘ืจ ืขืœ ืฆื™ื ื•ืจื•ืช YAML; ืœืื—ืจื•ื ื” ื”ื™ื• ืฉื ืœื ืžืขื˜ ื—ื™ื“ื•ืฉื™ื ืžืขื ื™ื™ื ื™ื.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”