Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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_Azure Pipelines - Fatal编程技术网

Azure devops 为什么在多阶段Azure Devops管道中的环境下,更改和工作项页面是空的?

Azure devops 为什么在多阶段Azure Devops管道中的环境下,更改和工作项页面是空的?,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我在Azure DevOps中创建了一个基于yaml的多阶段管道 variables: versionPrefix: '7.1.0.' versionRevision: $[counter(variables['versionPrefix'], 100)] version: $[format('{0}{1}',variables['versionPrefix'],variables['versionRevision'])] solution: '**/product.sln'

我在Azure DevOps中创建了一个基于yaml的多阶段管道

variables:
  versionPrefix: '7.1.0.'
  versionRevision: $[counter(variables['versionPrefix'], 100)]
  version: $[format('{0}{1}',variables['versionPrefix'],variables['versionRevision'])]
  solution: '**/product.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Debug'

name: $(version)_$(Date:yyyyMMdd)$(Rev:.r)

stages:
- stage: Build
  pool: Default
  jobs:
  - job: Build
    displayName: Build
    steps:
      - task: NuGetToolInstaller@1
      - task: NuGetCommand@2
        inputs:
          restoreSolution: '$(solution)'
      - task: VersionAssemblies@2
        displayName: Version Assemblies
        inputs:
          Path: '$(Build.SourcesDirectory)'
          VersionNumber: '$(version)'
          InjectVersion: true
          FilenamePattern: 'AssemblyInfo.*'
          OutputVersion: 'OutputedVersion'
      - task: VSBuild@1
        displayName: Build product
        inputs:
          solution: '$(solution)'
          platform: '$(buildPlatform)'
          configuration: '$(buildConfiguration)'
          maximumCpuCount: true

- stage: Deploy
  dependsOn: Build
  pool: Default
  jobs:
  - deployment: Deployment
    displayName: DeployA
    environment: 7-1-0
    strategy:
      runOnce:
        deploy:
          steps:
          - task: PowerShell@2
            inputs:
              targetType: 'inline'
              script: |
                Write-Host "Deployed"
如上所示,管道包括一个引用名为“7-1-0”的环境的部署阶段。管道运行后,将在该环境的UI中显示部署。但是,在这种环境下,更改和工作项页面都是空的。我确认有以前未部署到此环境的新更改。为什么?

请注意,部署阶段实际上没有做任何事情。我们正在手动进行实际部署,但希望通过DevOps跟踪环境的变化。此外,我们还没有为环境定义任何资源。我找不到任何声明需要定义资源以跟踪提交和工作项的内容

- download: none
更新1

根据下面@Leo Liu MSFT的建议,我更新了管道以发布一个工件。请注意,构建在自托管代理上运行。然而,在环境变化和工作项目方面,我仍然没有得到任何结果

variables:
  versionPrefix: '7.1.0.'
  versionRevision: $[counter(variables['versionPrefix'], 100)]
  version: $[format('{0}{1}',variables['versionPrefix'],variables['versionRevision'])]
  solution: '**/product.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Debug'

name: $(version)_$(Date:yyyyMMdd)$(Rev:.r)

stages:
- stage: Build
  pool: Default
  jobs:
  - job: Build
    displayName: Build
    steps:
      - task: NuGetToolInstaller@1
      - task: NuGetCommand@2
        inputs:
          restoreSolution: '$(solution)'
      - task: VersionAssemblies@2
        displayName: Version Assemblies
        inputs:
          Path: '$(Build.SourcesDirectory)'
          VersionNumber: '$(version)'
          InjectVersion: true
          FilenamePattern: 'AssemblyInfo.*'
          OutputVersion: 'OutputedVersion'
      - task: VSBuild@1
        displayName: Build product
        inputs:
          solution: '$(solution)'
          platform: '$(buildPlatform)'
          configuration: '$(buildConfiguration)'
          maximumCpuCount: true
      - task: PowerShell@2
        inputs:
          targetType: 'inline'
          script: |
            New-Item -Path '$(build.artifactstagingdirectory)' -Name "testfile1.txt" -ItemType "file" -Value "Hello, DevOps!" -force
      - task: PublishBuildArtifacts@1
        inputs:
          PathtoPublish: '$(Build.ArtifactStagingDirectory)'
          ArtifactName: 'drop'
          publishLocation: 'FilePath'
          TargetPath: 'C:\a\p\\$(Build.DefinitionName)\\$(Build.BuildNumber)'

- stage: Deploy
  dependsOn: Build
  pool: Default
  jobs:
  - deployment: Deployment
    displayName: DeployA
    environment: 7-1-0
    strategy:
      runOnce:
        deploy:
          steps:
          - task: PowerShell@2
            inputs:
              targetType: 'inline'
              script: |
                Write-Host "Deployed"
更新2

根据@Leo Liu MSFT的后续建议,我创建了以下内容,试图将工件发布到Azure。我还将yaml简化为使用Microsoft托管代理。注意,我确实描述了这个问题,这就是为什么我像“下载:无”那样配置部署任务。我仍然没有在环境中得到任何改变或工作项

variables:
  ArtifactName: drop

stages:
- stage: Build
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: ubuntu-latest
    steps:
      - task: CopyFiles@2
        displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
        inputs:
          SourceFolder: '$(System.DefaultWorkingDirectory)/Build'
          targetFolder: '$(build.artifactstagingdirectory)'

      - task: PublishBuildArtifacts@1
        displayName: 'Publish Artifact: drop'
        inputs:
          ArtifactName: $(ArtifactName)

- stage: Deploy
  dependsOn: Build
  pool:
   vmImage: ubuntu-latest
  jobs:
  - deployment: Deployment
    displayName: DeployA
    environment: 7-1-0
    strategy:
      runOnce:
        deploy:
          steps:
          - download: none
          - task: DownloadBuildArtifacts@0
            inputs:
                artifactName: $(ArtifactName)
                buildType: 'current'
                downloadType: 'single'
                downloadPath: '$(System.ArtifactsDirectory)'
最后更新

这是正在工作的YAML。最后一个技巧是将下载设置为当前,并指定工件名称

variables:
  ArtifactName: drop

stages:
- stage: Build
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: ubuntu-latest
    steps:
      - task: CopyFiles@2
        displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
        inputs:
          SourceFolder: '$(System.DefaultWorkingDirectory)/Build'
          targetFolder: '$(build.artifactstagingdirectory)'

      - task: PublishBuildArtifacts@1
        displayName: 'Publish Artifact: drop'
        inputs:
          ArtifactName: $(ArtifactName)

- stage: Deploy
  dependsOn: Build
  pool:
   vmImage: ubuntu-latest
  jobs:
  - deployment: Deployment
    displayName: DeployA
    environment: 7-1-0
    strategy:
      runOnce:
        deploy:
          steps:
          - download: current
            artifact: $(ArtifactName)
为什么在多阶段Azure Devops管道中的环境下,更改和工作项页面是空的

您需要添加任务以将构建构件发布到Azure管道

Azure devops通过REST API跟踪更改和工作项,然后Azure devops通过传输文件将此信息传递给其他环境

因此,我们需要将工件发布到Azure管道,以便部署阶段在获取源代码时能够获取这些信息

作为测试,我只是在构建阶段添加复制任务和发布构建工件任务,如:

stages:
- stage: Build
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: ubuntu-latest
    steps:
      - task: CopyFiles@2
        displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
        inputs:
          SourceFolder: '$(System.DefaultWorkingDirectory)'
          targetFolder: '$(build.artifactstagingdirectory)'

      - task: PublishBuildArtifacts@1

        displayName: 'Publish Artifact: drop'

- stage: Deploy
  dependsOn: Build
  pool:
   vmImage: ubuntu-latest
  jobs:
  - deployment: Deployment
    displayName: DeployA
    environment: 7-1-0
    strategy:
      runOnce:
        deploy:
          steps:
          - task: PowerShell@2
            inputs:
              targetType: 'inline'
              script: |
                Write-Host "Deployed"
结果是:

更新:

我不得不做一些更新来处理下载的问题 人工制品仍然没有在服务器上获得任何更改或工作项 环境我非常感谢你的帮助

这是因为禁用内置下载任务而不是使用DownloadBuildArtifacts任务,该任务没有获取提交和工作项的功能

- download: none
您需要在YAML中删除以上内容。当我测试更新的YAML时,没有下载:无,它工作正常


希望这能有所帮助。

什么东西作为工件发布重要吗,或者它可以是任何东西吗?此外,我正在使用自托管代理,并将工件发布到本地文件夹。那有关系吗?@bk不过,它可以是任何东西。自托管代理也可以正常工作。您可以通过一个简单的示例来测试它,祝您愉快:。我创建了一个示例,并用它更新了我的问题。感觉我遗漏了一些明显的内容。@但是,我担心我们无法将其设置在本地文件夹中,必须将生成工件发布到Azure管道。非常抱歉,我在您以前的评论中忽略了此问题。请参阅我问题中的更新2。我试图使我的YAML尽可能接近您发布的样本。我不得不做一些更新来处理下载工件的问题。仍然没有在环境上获得任何更改或工作项。我非常感谢你的帮助!