kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Azure DevOps REST APIでタスクを作る

なんかやるたびに調べている気がするので自分用のメモ。

docs.microsoft.com

新しいのが好きなので、7.1 Previewです。結構頻繁に更新されているので、気が付いたら8.0とかになっているかもしれません。

$PATに作成したPersonal Access Tokenが格納されているとします。

docs.microsoft.com

権限はWork ItemsRead & writeがあれば大丈夫なはずです。

$organization = '{Your Organization}'
$Project = '{Your Project}'
$TaskName = '{Your Task Title}'
$PAT='{Your Personal Access Token}'
$TaskTitle=[System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($TaskName))
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$PAT"))
$header = @{authorization = "Basic $token"}
$uri = 'https://dev.azure.com/$organization/$Project/_apis/wit/workitems/$User%20Story?api-version=7.1-preview.3'
$jsonbody="[
  {
    `"op`": `"add`",
    `"path`": `"/fields/System.Title`",
    `"value`": `"$TaskTitle`"
  }
]"
$json = Invoke-RestMethod -Uri $Uri -Method Post -ContentType "application/json-patch+json" -Headers $header -body $jsonbody

$uri のworkitemsに続く値はプロセステンプレートにあるタスクの種類になります。私のサンプルではAgileで作っているプロジェクトに対して発行しているので、User%20Storyですが、ScrumであればProduct%20Backlog%20Itemなどになります。空白も含まれるので、%20を忘れないように注意。

タスク名に日本語を使う場合、Base64 Encodingが必要です。

Azure Pipelinesから呼び出して、PATをLibraryに格納する場合(まぁしますよね)、":$PAT"ではなく、":$ENV:PAT"となります。

これは「作るだけ」なので、このAPIで作ってもタスクが作成されるだけになります。Iteration、Area、Assigned toなどの値はUpdateで更新していきます。

docs.microsoft.com

全部のフィールド設定するのは大変ですが、先ほどのBodyは配列指定ができるので、最初op:addの次の要素でほかの要素も指定すればいいはずです…また後で検証してみます。