Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops 在Azure DevOps中将标记添加到存储库_Azure Devops_Tags - Fatal编程技术网

Azure devops 在Azure DevOps中将标记添加到存储库

Azure devops 在Azure DevOps中将标记添加到存储库,azure-devops,tags,Azure Devops,Tags,我是Azure DevOps的新手。我需要将标记添加到存储库中,当构建正在执行时,它应该从txt文件中读取标记名并相应地创建。在构建成功完成期间,它应该为该成功构建创建标记。 我认为自动化标记创建的最简单方法是使用 这背后的想法是在成功构建结束时添加一个额外的脚本,该脚本调用API并创建必要的标记 脚本可能类似于以下内容: - script: | export TAG_NAME="$(cat tag-file.txt)" ##Somehow export the ta

我是Azure DevOps的新手。我需要将标记添加到存储库中,当构建正在执行时,它应该从txt文件中读取标记名并相应地创建。

在构建成功完成期间,它应该为该成功构建创建标记。

我认为自动化标记创建的最简单方法是使用

这背后的想法是在成功构建结束时添加一个额外的脚本,该脚本调用API并创建必要的标记

脚本可能类似于以下内容:

- script: |
    export TAG_NAME="$(cat tag-file.txt)" ##Somehow export the tag name as env variable
    export ORGANIZATION="organization_name" ##If you use variable groups, you can add it there and skip this line.
    curl -d "" -H "Content-Type: application/json" -H "Authorization: Basic $(PERONSAL_ACCESS_TOKEN)" \
     -X PUT https://dev.azure.com/$(ORGANIZATION)/$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/tags/$(TAG_NAME)?api-version=6.0
  condition: succeeded()

您可以按照说明创建个人访问令牌。在使用此令牌调用REST API之前,必须将其转换为
Base64
string。为此,您可以使用脚本。

LJ。共享使用YAML管道的解决方案。您可以直接将该部分添加到
xx.yml
文件中

根据您的描述,您似乎正在使用经典UI编辑器

然后您可以使用或调用脚本

此外,RESTAPI正在向构建添加标记

因为您只想标记回购,所以可以直接使用git命令

然后需要授予创建标记贡献(添加/删除文件)权限


有关详细示例,请参考这里的示例YAML管道任务,该任务创建带注释的Git标记。
与调用
git-tag
命令相比,我看到的主要好处是管道不需要
Contribute
权限。拥有
Create Tag
权限是不够的

-任务:PowerShell@2
displayName:使用内联脚本创建Git标记
环境:
SYSTEM_ACCESSTOKEN:$(SYSTEM.ACCESSTOKEN)#允许您使用$(SYSTEM.ACCESSTOKEN)对REST调用进行身份验证
投入:
targetType:“内联”
脚本:|
$rootUrl=“$env:SYSTEM\u TEAMFOUNDATIONCOLLECTIONURI$env:SYSTEM\u TEAMPROJECTID/\u api”
$authorizationHeader=@{Authorization=“Bearer$env:SYSTEM_ACCESSTOKEN”}
$message=“YOUR GIT TAG message”#TODO:设置消息
$body=“{`”name`:“$Env:BUILD\u BUILDNUMBER`”,“taggedObject`:{`”objectId`:“$Env:BUILD\u SOURCEVERSION`}”,“message`:“$message`}”
$createTagUrl=“$rootUrl/git/repositories/$($env:Build_Repository_Name)/notatedTags?api版本=6.0”#api版本=6.0将来可能会更改!
$createTagResponse=Invoke RestMethod-Uri$createTagUrl-Method POST-Headers$authorizationHeader-Body$Body-ContentType应用程序/json
if($createTagResponse-ne$Null)
{
写入主机$createTagResponse
写入主机“已创建Git标记!”
}
failOnStderr:true

只是为了澄清一些事情-通过标签,您是指
git标签
还是您在工作流程中使用的其他特定/自定义标签?提到
.txt
文件的部分让我感到困惑。当构建成功时,在Azure DevOps中添加标记。默认情况下,它将采用标记名$(build.buildNumber),这里我想添加标记名作为txt文件中提到的自定义名称。例如,我在txt文件中提到标记名为1.2.3。因此,在构建成功完成期间,它应该将该成功构建的标记创建为1.2.3。希望现在一切都清楚了。我尝试过使用Powershell,构建正在获得成功,但构建标记没有被创建。也没有问题,也不确定标记没有被创建的原因。您好@Dinaa根据您的问题标题,您需要将标记添加到存储库而不是构建。我共享的API将标记您的git repo,而不是构建本身。对于标记一个构建,您应该使用RESTAPI来标记LJ。建议。希望是清楚的。我可以在哪个任务下添加上面的yaml脚本。因为我在任务组中找不到yaml的任务。在本例中,等于
-script
的任务将是
命令行脚本
。但我认为这两种方法中的任何一种都应该有效:
命令行脚本
Bash
PowerShell
。另外,检查PatrickLu的答案,在这种情况下,它可能更适合您。