我尝试用当前构建版本在我的存储库中创建一个文件,每当有推送到main时,它就会自动更新。
- task: Bash@3
inputs:
targetType: 'inline'
script: |
sudo echo "$(major).$(minor).$(patch)" > version.txt
cat version.txt
但是,即使cat命令显示了正确的内容,也不会在repo上创建该文件。
我的一个同事建议我使用工件,我开发了以下代码:
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: |
sudo echo "$(major).$(minor).$(patch)" > version.txt
cat version.txt
- task: PublishPipelineArtifact@1
inputs:
publishLocation: filepath
targetPath: version.txt # path to the folder or file to publish
artifactName: version # name of the artifact to create
工件制作正确,我可以下载并看到正确的版本号。有没有办法将此工件直接推入我的Azure repo主分支的根目录?提前感谢。
2条答案
按热度按时间ikfrs5lh1#
你需要在创建文件后执行git add和commit(我猜你是在使用Git,因为你在谈论仓库):
https://learn.microsoft.com/en-us/azure/devops/pipelines/scripts/git-commands?view=azure-devops&tabs=yaml
您所谈论的工件实际上只是一个概念,而不是您可以或应该在任何地方提交的有形的东西。实际上,当您发布管道工件时,您实际上只是在某个地方存储一个文件、文件夹结构或压缩包,在那里可以由另一个阶段或管道下载。在您的示例中,它只是一个文件,因此您将提交该文件。当然,如果管道在运行开始时检出其他某个分支,则需要检出main-branch。
mf98qq942#
有没有办法把这个神器直接推到我的Azure存储库的主分支的根中?
Jukkak是对的。要将工件(在您的场景中为
version.txt
)直接推送到Azure repo主分支的根目录中,您需要运行git命令添加version.txt
文件,然后提交它以推送到repo中。请参见Run Git commands in a script我尝试用当前构建版本在我的存储库中创建一个文件,每当有推送到main时,它就会自动更新。
但是,根据您上面的描述,CI触发器是在主分支上的管道中启用的,因此每当有推送到主分支时都会触发新管道。这意味着当
version.txt
被推送到Azure存储库的主分支时,它会触发新管道。为了避免这种情况,我们可以将[skip ci]
包含在作为推送一部分的任何提交的消息中,Azure管道将跳过为此推送运行CI。请参阅跳过单个推送的CI供您参考的最终YAML: