git 如何将Azure管道的工件发布到存储库的主分支?

j2cgzkjk  于 2023-01-11  发布在  Git
关注(0)|答案(2)|浏览(128)

我尝试用当前构建版本在我的存储库中创建一个文件,每当有推送到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主分支的根目录?提前感谢。

ikfrs5lh

ikfrs5lh1#

你需要在创建文件后执行git add和commit(我猜你是在使用Git,因为你在谈论仓库):
https://learn.microsoft.com/en-us/azure/devops/pipelines/scripts/git-commands?view=azure-devops&tabs=yaml
您所谈论的工件实际上只是一个概念,而不是您可以或应该在任何地方提交的有形的东西。实际上,当您发布管道工件时,您实际上只是在某个地方存储一个文件、文件夹结构或压缩包,在那里可以由另一个阶段或管道下载。在您的示例中,它只是一个文件,因此您将提交该文件。当然,如果管道在运行开始时检出其他某个分支,则需要检出main-branch。

mf98qq94

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:

trigger:
- main

variables:
 system.debug : true
 major: '1'
 minor: '0'
 patch: $[counter(variables['minor'], 1)]

pool:
  vmImage: ubuntu-latest

steps:
  - checkout: self
    persistCredentials: true
  - task: Bash@3
    inputs:
      targetType: 'inline'
      script: |
        sudo echo "$(major).$(minor).$(patch)" > version.txt
        cat version.txt
        git config --global user.email "you@example.com"
        git config --global user.name "Your name"
        git status
        git checkout -b main
        git add --all
        git status
        git commit -m "Push version.txt to repo and [skip ci]"
        git push origin main
        git status
      workingDirectory: '$(Build.SourcesDirectory)'

相关问题