Zum Inhalt

Erstellen Sie Standardaufgaben

Da es sinnvoll ist, Standardaufgaben (DoD) für eine User Story zu erstellen, damit Sie nichts vergessen, überprüft dieses Skript alle User Stories in der aktuellen Iteration und erstellt die notwendigen Aufgaben für diese Storys.

Vorräte

  1. PAT-Token aus Ihrem DevOps-Projekt
  2. Projekt- und Organisationsname.
  3. Eine Möglichkeit, Ihr Powershell-Skript zu automatisieren. Dies kann über eine geplante Aufgabe, eine geplante Pipeline oder beispielsweise einen Webhook erfolgen.

-Skript

Das Skript verwendet die DevOps-API zum Erstellen von Aufgaben. Die Aufgaben werden in einer JSON-Datei definiert. Stellen Sie sicher, dass sich diese Datei am selben Speicherort wie das Skript befindet.

```json title="workitems.json" Linenums="1" [ { „Titel“: „Dokumentation“, „Beschreibung“: „Beschreiben Sie die Änderungen oder neuen Funktionen auf https://docs.loevencloud.nl“ }, { „Titel“: „Schritt-für-Schritt-Plan“, „Beschreibung“: „Definieren Sie einen Schritt-für-Schritt-Plan.“ }, { „Titel“: „Der Test“, „Beschreibung“: „Tests beschreiben und nach Möglichkeit implementieren.“ }, { „Titel“: „Forschung“, „Beschreibung“: „Gehen Sie raus und recherchieren Sie.“ }, { „Titel“: „Automatisierer“, „Beschreibung“: „Kann das automatisch erfolgen?“ }, { „Titel“: „Integrieren“, „Beschreibung“: „integriert es in das aktuelle Setup (https://docs.loevencloud.nl)“ } ]

```powershell title="automateTasks.ps1" Linenums="1"
<#
.ZUSAMMENFASSUNG
Automatisierungsskript für allgemeine Entwicklungsaufgaben
#>
[CmdletBinding()]
param (
[Parameter()]
[string]$org = „DEVOPSORG“,
[Parameter()]
[string]$project = "DEVOPSPROJECT",
[Parameter()]
[string]$pat = „DEVOPSPAT“
)
#Globale Variablen
$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("`:$Pat"))
$header = @{
Autorisierung = „Basic $B64pat“
}
$iterationBaseUri = 'https://dev.azure.com/ORG/PROJECT/_apis/work/teamsettings/iterations?$timeframe=current
$iterationUri = $iterationBaseUri.replace("ORG/PROJECT","$org/$project")
$workItemBasePostUri = 'https://dev.azure.com/ORG/PROJECT/_apis/wit/workitems/$Task?api-version=6.1-preview.3'
$workItemPostUri = $workItemBasePostUri.replace("ORG/PROJECT", "$org/$project")
$currentIteration = Invoke-RestMethod -Method GET -Headers $header -Uri $iterationUri -ContentType "application/json"
$workitemsUri = "https://dev.azure.com/$org/$project/_apis/work/teamsettings/iterations/$($currentIteration.value.id)/workitems?api-version=7.0"
$allWorkitems = Invoke-RestMethod -Method GET -Headers $header -Uri $workitemsUri -ContentType "application/json"
$defaultWorkItems = Get-Content -Raw -Path /scripts/workitems.json | 
ConvertFrom-Json
$userStories = $allWorkitems.workItemRelations | 
Where-Object { $_.source -eq $null }
$excludedStories = @("OPS", "OOTS")

#Funktionen
Funktion Add-devOpsWorkItem {
[CmdletBinding()]
param (
[Parameter()]
[string]$Titel,
[Parameter()]
[string]$userStoryId,
[Parameter()]
[string]$description,
[Parameter()]
[string]$iterationPath
)
$body = @(
@{
op = "hinzufügen"
path = "/fields/System.IterationPath"
value = "$iterationPath"
},
@{
op = "hinzufügen"
path = "/fields/System.Title"
value = „$title“
},
@{
op = "hinzufügen"
path = "/fields/System.Description"
value = "$description"
},
@{
op = "hinzufügen"
path = "/relationen/-"
Wert = @{
rel = "System.LinkTypes.Hierarchy-Reverse"
url = „https://dev.azure.com/$org/$project/_apis/wit/workitems/$userStoryId“
}
}
) | 
ConvertTo-Json -Tiefe 10
$response = Invoke-RestMethod -Uri $workItemPostUri -Headers $header -Method POST -Body $body -ContentType "application/json-patch json"

if ($response.id) {
Write-Host „`tTask $title erstellt und verknüpft“
}
anders {
Write-Host „Fehler beim Erstellen der Aufgabe und beim Verknüpfen mit der User Story: $($response | ConvertTo-Json -Depth 10)“
}
}

# Hauptskript
foreach ($userStory in $userStories) {
$storyProperties = Invoke-RestMethod -Method get -Headers $header -Uri $userstory.target.url -ContentType "application/json"
$iteration = $($storyProperties.fields.'System.IterationPath')
Write-Output „$iteration – $($storyProperties.fields.‘System.Title‘)“
if ($excludedStories -contains $($storyProperties.fields.'System.Title')) {
Write-Output „$($storyProperties.fields.‘System.Title‘) ist für den Standardarbeitsprozess ausgeschlossen.“
}
anders {
$childItems = $allWorkitems.workItemRelations | 
Where-Object { $_.source.id -eq $userstory.target.id }
$activeTasks = @()
foreach ($child in $childItems) {
$taskMeta = @{} | 
Objekttitel auswählen
$childProperties = Invoke-RestMethod -Method get -Headers $header -Uri $child.target.url -ContentType "application/json"
$taskMeta.Title = "`t$($childProperties.fields.'System.Title')"
$activeTasks = $taskMeta
}
foreach ($defaultTask in $defaultWorkItems) {
if (!($activeTasks.Title -match $defaultTask.Title)) {
Add-devOpsWorkItem -Title $defaultTask.Title -userStoryId $userstory.target.id -iterationPath $iteration -description $defaultTask.Description
}
}
}
}