Azure Boardsとの連携によるトレーサビリティ確保
Azure Artifactsの変更を要件レベルで追跡するため、Azure Boardsとの連携をする方法について説明します。
ワークアイテムとの自動連携
パイプラインでAzure Boardsのワークアイテムの自動更新を実装します。これにより、コードのコミットからパッケージ公開までの流れを、Azure Boards上のワークアイテムと自動的に紐付けることができます。
このタスクは、Azure Artifacsへのパッケージ公開が完了した後に行うべきなので、Deployステージのタスクの末尾に追加していきます。
# (4)ワークアイテムの自動更新
- task: PowerShell@2
displayName: 'ワークアイテム更新'
inputs:
targetType: 'inline'
script: |
# (4)-1コミットメッセージからワークアイテムIDを抽出(例:"Add feature #123")
$commitMessage = "$(Build.SourceVersionMessage)"
$workItemPattern = "#(\d+)" # #に続く数字をキャプチャ
# (4)-2Azure DevOps REST APIを使用してワークアイテムを更新
if ($commitMessage -match $workItemPattern) {
$workItemId = $Matches[1]
Write-Host "ワークアイテム #$workItemId を更新します"
# パイプラインの自動認証トークンをbase64エンコードする
$base64Token = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$(System.AccessToken)"))
$headers = @{
'Authorization' = "Basic $base64Token"
'Content-Type' = 'application/json-patch+json'
}
# JSON Patch形式で更新内容を定義
$historyValue = "パッケージ $(packageVersion) がAzure Artifactsに公開されました。`nビルド番号: $(Build.BuildNumber)`nビルドURL: $orgUrl/$project/_build/results?buildId=$(Build.BuildId)"
$body = "[`n"
$body += " {`n"
$body += ' "op": "add",' + "`n"
$body += ' "path": "/fields/System.History",' + "`n"
$body += ' "value": "' + $historyValue.Replace("`n", "\n").Replace('"', '\"') + '"' + "`n"
$body += " }`n"
$body += "]"
# REST APIエンドポイントを構築
$uri = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/wit/workitems/$workItemId?api-version=7.0"
try {
Invoke-RestMethod -Uri $uri -Method Patch -Headers $headers -Body $body -ErrorAction Stop
Write-Host "ワークアイテムの更新が完了しました"
} catch {
Write-Warning "ワークアイテムの更新に失敗しました: $($_.Exception.Message)"
exit 0
}
} else {
Write-Host "コミットメッセージにワークアイテムIDが含まれていません"
}
このタスクでは、コミットメッセージ内に含まれるAzure BoardsのワークアイテムID(例:#123)を自動検出し、Azure Boards上の該当するワークアイテムにパッケージ公開の記録を追加します((4)-1)。
コミットメッセージ内にワークアイテムIDが含まれる場合、Azure Boards用のREST APIを用いてワークアイテム内にコメントを残すようにしています((4)-2)。
例として、Azure Boardsでワークアイテム(ここではタスク)を作成し、自動採番されたワークアイテムIDをコミットメッセージに含めた状態でAzure Pipelinesのワークフローを実行してみます。
Azure Boardsでワークアイテムを作成するとタイトルの横にワークアイテムIDが表示されます(以下の画像では「1」がID)。
リポジトリ内のファイルを更新し、このIDをgitのコミットメッセージに含めてプッシュまで実施します。
# 何らかのファイルの更新を行う $ git add --a # コミットメッセージにワークアイテムIDを含める $ git commit -m "add feature #1" $ git push origin
コミットメッセージ内に「#1」と、ワークアイテムIDを含めています。この状態でAzure Pipelinesでワークフローを実行すると、Azure Boardsの該当のワークアイテムが更新され、コメントが追加されます。
こうしてAzure PipelinesとAzure Boardsを連携することで、コードの修正をタスクに紐づけられるようになり、トレーサビリティを向上できます。
