0

我的任务是在发布触发时自动在 WIKI 上生成和发布发布说明,为此我正在关注这个博客,它非常方便的博客,但我的不幸仍然无法使用发布模板创建 wiki 页面。(同时使用 Azure DevOps 和 TFS)

在此处输入图像描述

模板:

**Build Number**  : $($build.buildnumber)    
**Build started** : $("{0:dd/MM/yy HH:mm:ss}" -f [datetime]$build.startTime)     
**Source Branch** : $($build.sourceBranch)  
###Associated work items  
@@WILOOP@@  
* #$($widetail.id)
@@WILOOP@@  
###Associated change sets/commits  
@@CSLOOP@@  
* **ID $($csdetail.changesetid)$($csdetail.commitid)** 
  >$($csdetail.comment)    
@@CSLOOP@@

PowerShell 脚本

$content = [IO.File]::ReadAllText("$(System.DefaultWorkingDirectory)\releasenotes.md")
$data = @{content=$content;} | ConvertTo-Json;
$params = @{uri = '$(WikiPath)';
  Method = 'PUT';
  Headers = @{Authorization = "Bearer $(System.AccessToken)" };
  ContentType = "application/json";
  Body = $data;
}
Invoke-WebRequest @params

请指导我做错了什么

4

2 回答 2

1

经过测试,我们发现您提到的博客中的 PowerShell 脚本使用了这个 Rest API: Pages - Create Or Update,因此 wikipath 是请求的 url,如下格式:

https://dev.azure.com/{organization}/{project}/_apis/wiki/wikis/{wikiIdentifier}/pages?path={path}&api-version=6.0

例如,我们创建一个名为scrum-test.wiki的项目 wiki ,并想创建一个名为Release notes的新 wiki 页面,url 如下所示

https://dev.azure.com/{organization}/{project}/_apis/wiki/wikis/scrum-test.wiki/pages?path=Release notes&api-version=6.0

如果我们现在想在发行说明页面下创建一个名为 0.1.0 的子 wiki 页面,则 url 如下所示

https://dev.azure.com/{organization}/{project}/_apis/wiki/wikis/scrum-test.wiki/pages?path=Release notes/0.1.0&api-version=6.0

此外,使用 AccessToken 我们总是得到错误,"The wiki page operation failed with message : User does not have write permissions for this wiki."即使我们授予身份的完整 wiki 权限:{project name} Build Service ({organization name}),所以我们使用具有完全访问权限的PAT 身份验证,它可以在下面的 PowerShell 脚本中正常工作.

$content = [IO.File]::ReadAllText("$(System.DefaultWorkingDirectory)\releasenotes.md")
$data = @{content=$content;} | ConvertTo-Json;

$connectionToken="PAT here"

$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))

$params = @{uri = '$(WikiPath)';
  Method = 'PUT';
  Headers = @{Authorization = "Basic $base64AuthInfo" };
  ContentType = "application/json";
  Body = $data;
}
Invoke-WebRequest @params
于 2021-02-09T03:38:49.207 回答
1

System.AccessToken检查工作级别的访问权限: https ://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=classic

在此处输入图像描述

此外,检查您的 wiki 上的权限

在此处输入图像描述

于 2021-02-08T14:06:01.870 回答