标签: azure-pipelines-yaml

如何将单元测试失败消息显示为 .Net Core 中的构建错误?

我们使用 dotnet test --no-build 在 PR/CI 构建期间运行单元测试:

- task: DotNetCoreCLI@2
  ${{ if eq(parameters.shortName, '') }}:
    displayName: "Test ${{ parameters.name }}"
  ${{ if ne(parameters.shortName, '') }}:
    displayName: "Test ${{ parameters.shortName }}"
  inputs:
    command: "test"
    projects: ${{ parameters.path }}
    ${{ if eq(parameters.testFilter, '') }}:
      arguments: $(TestBinLogArg) -c $(BuildConfiguration) --no-build ${{ parameters.commonFlags }} ${{ parameters.moreTestArgs }} --filter ${{ parameters.unitTestFilter }}
    ${{ if ne(parameters.testFilter, '') }}:
      arguments: $(TestBinLogArg) -c $(BuildConfiguration) --no-build ${{ parameters.commonFlags }} ${{ parameters.moreTestArgs }} --filter (${{ parameters.unitTestFilter }})&(${{ parameters.testFilter }})
    publishTestResults: …
Run Code Online (Sandbox Code Playgroud)

unit-testing azure-devops azure-pipelines azure-pipelines-yaml

5
推荐指数
1
解决办法
409
查看次数

在模板作业中跨阶段使用管道变量

问题描述

我在尝试在另一个阶段使用在一个阶段中创建的变量时遇到了一些问题,并设法找到了各种新旧文章来描述如何完成此操作。识别新语法的最新文章/帖子

$[stageDependencies.{stageName}.{jobName}.outputs['{stepName}.{variableName}']

像这样使用:

variables:
  myVariable: $[stagedependencies.CreateStageVarStage.CreateStageVarJob.outputs['SetValueStep.VariableFromFirstStage']]
Run Code Online (Sandbox Code Playgroud)

在您需要使用作业模板之前,这非常有效。

我在网上找到的示例都没有涵盖模板的情况。他们只是演示了同一个 yaml 文件中的多个阶段如何获取该值。

语法取决于能否将表达式放入变量中。不幸的是,当您在作业中使用模板时,无法声明变量并将其作为参数传递,从而导致其无法求值。

- stage: UseJobTemplateStage
  displayName: 'Use Job Template Stage'
  dependsOn: CreateStageVarStage
  jobs:
  - template: templates/job-showstagevars.yml
    parameters:
      ValueToOutput: $[ stagedependencies.CreateStageVarStage.CreateStageVarJob.outputs['SetValueStep.VariableFromFirstStage'] ]
Run Code Online (Sandbox Code Playgroud)

在这个片段中,它按原样出现。该值不会被替换。

理论上,您可以将作业设置为使表达式存在于变量块中,但这种硬编码破坏了模板的主要优点之一。

相关文章

在 Azure DevOps Pipelines 中跨阶段共享变量
Azure DevOps 发行说明 - sprint 168

azure-devops azure-pipelines-yaml

5
推荐指数
1
解决办法
4560
查看次数

Bash 中的 Yaml 变量赋值问题

我在尝试在 yaml 文件中使用以下语法分配变量时遇到问题。以下代码取自 Microsoft 文档中定义变量的理解变量语法部分:

variables:
- name: one
  value: initialValue 

steps:
  - script: |
      echo ${{ variables.one }} # outputs initialValue
      echo $(one)
    displayName: First variable pass
  - bash: echo '##vso[task.setvariable variable=one]secondValue'
    displayName: Set new variable value
  - script: |
      echo ${{ variables.one }} # outputs initialValue
      echo $(one) # outputs secondValue
    displayName: Second variable pass
Run Code Online (Sandbox Code Playgroud)

具体来说,我发现问题出在语法注释'##vso[task.setvariable variable=one]secondValue' :我没有使用直接写入上面一行的字符串,我使用的是 bash 变量,其语法$variableName代替secondValue

问题是:

variables:
- name: one
  value: "initialValue" 

steps:
- task: Bash@3 …
Run Code Online (Sandbox Code Playgroud)

bash yaml azure-devops azure-pipelines azure-pipelines-yaml

5
推荐指数
1
解决办法
851
查看次数

如何在特定文件夹和分支上设置触发器

trigger:
 branches:
   include:
     - main
 paths:
   include:
      - FPH.IaC/IAC/*
Run Code Online (Sandbox Code Playgroud)

您好,我希望仅当主分支的特定文件夹 (FPH.IaC/IAC/) 下的文件发生更改时才触发我的 yaml 管道。

但是,使用此 yaml,每次在主分支下更改某些文件时都会触发管道。难道branch和Path实际上是OR关系还是我做错了什么?

谢谢

azure-pipelines-yaml

5
推荐指数
1
解决办法
697
查看次数

Azure DevOps - Yaml 管道将发布状态发布到工作项

首先 - 我知道根据 MS 官方文档,通过部署控制更新具有发布状态的工作项的内置功能仅在发布管道中受支持,而不是多阶段 YAML 管道(请参阅此处记录的第一个注释:https: // /learn.microsoft.com/en-us/azure/devops/boards/work-items/work-item-deployments-control?view=azure-devops

是否有人使用 powershell 或 Azure DevOps Rest api 创建插件或集成,可以使用正确的信息更新工作项,以自动将工作项链接到发布环境信息,因为此功能似乎不适用于yaml 发布管道?

azure-devops azure-pipelines azure-pipelines-release-pipeline azure-pipelines-yaml

5
推荐指数
1
解决办法
2047
查看次数

跨多个任务共享azure管道任务“env”

我有 2 个管道从同一存储库调用代码。1 个管道调用控制台应用程序,另一个管道调用自动化测试。

这两个任务都需要进行相同的env设置。现在我的 yaml 看起来像这样:

- task: DotNetCoreCLI@2
  displayName: Run Tests
  env:
    env.var.1: $(var1)
    env.var.2: $(var2)
  inputs:
    command: 'test'
    projects: '$(project)'
    publishTestResults: true
Run Code Online (Sandbox Code Playgroud)
- task: CmdLine@2
  displayName: Run Console Application
  env:
    env.var.1: $(var1)
    env.var.2: $(var2)
  inputs:
    workingDirectory: '$(workingDir)'
    script: './$(appToRun)'
    failOnStderr: true
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用变量来存储所有环境变量或在运行之前设置它们的任务?我的实际任务有大约20个环境变量需要设置。

azure-pipelines azure-pipelines-tasks azure-pipelines-yaml

5
推荐指数
0
解决办法
429
查看次数

更新到 .net 6 后管道无法工作

我已将我的网站更新为 .net 6。它也可以在本地运行。但是,我在 Azure DevOps 中的 yaml 管道不再运行。像这样的解决方案中的所有 .csproj 文件的发布步骤都存在错误。我不知道如何配置它应该使用.net 6。

C:\Program Files\dotnet\sdk\5.0.403\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(141,5): error NETSDK1045: The current .NET SDK does not support targeting .NET 6.0.  Either target .NET 5.0 or lower, or use a version of the .NET SDK that supports .NET 6.0. [D:\a\1\s\04_Contracts\Contracts\Contracts.csproj]
##[error]Error: The process 'C:\Program Files\dotnet\dotnet.exe' failed with exit code 1
Run Code Online (Sandbox Code Playgroud)

这是发布的管道步骤。

- task: DotNetCoreCLI@2
  displayName: 'dotnet publish'
  inputs:
    command: publish
    publishWebProjects: false
    projects: '**/*.csproj'
    arguments: '-r linux-x64 --output $(build.artifactstagingdirectory)'
Run Code Online (Sandbox Code Playgroud)

pipeline azure-devops azure-pipelines azure-pipelines-yaml

5
推荐指数
1
解决办法
6012
查看次数

Azure DevOps 构建变量 Build.Reason 是否可以在 YAML 模板编译时条件中使用?

我想要这样的东西:

  - ${{ if or(eq(parameters.RunTestsOnPRBuildOnly, false), eq(variables.Build.Reason, 'PullRequest')) }}:
      - template: ps-module-run-tests.yml
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为variables.Build.Reason是空的。有可能吗?

请注意,我知道如何修改ps-module-run-tests.yml模板以将我的愿望表达为运行时条件。换句话说,我知道如何实现这一点:

在此输入图像描述

我很好奇的是是否Build.Reason可以在编译时条件下使用,以便这些步骤甚至不会被渲染。从表面上看,这并没有固有的问题,因为该值在开始时就已知,但这取决于模板的编译时间。如果太早的话,那是不可能的,但我不知道这些细节。也许我做不到,因为我错过了一些东西。

那么,有可能吗?

azure-devops azure-pipelines azure-pipelines-yaml

5
推荐指数
1
解决办法
5171
查看次数

有没有办法强制对阶段内的所有作业使用相同的代理目录?

所以我正在设置一个新的构建管道,它非常复杂,它是多阶段的,并且阶段内有多项作业。

但我遇到了问题,因为当我尝试依靠在同一代理工作文件夹中执行的一个阶段的第二个和第三个作业来保存某些任务时。当然,这实际上并不起作用。它实际上有时有效,但有时无效。我希望不同的作业总是在与之前的作业相同的文件夹中运行,或者从不运行,但有时不会。

无论如何,所以我想知道是否有一种方法可以将整个阶段或管道限制到单个工作目录。有人有什么想法吗?谢谢!!!

azure-devops azure-pipelines azure-pipelines-yaml

5
推荐指数
2
解决办法
2504
查看次数

使用 if/else 时 Azure Devops Pipeline YAML 中出现重复键错误

我尝试根据 Azure Devops 管道中的目标分支运行不同的构建模式,因此我创建了一个变量和一个 if/ese。

根据此MS 文档,看来我做的事情是正确的。我的 IDE 进行语法/错误检查,不会抱怨 YAML。

但是,当我尝试运行构建管道时,我收到“重复键”作为buildScript变量错误。有谁知道解决这个问题的方法吗?或者我只是在 YAML 中做了一些愚蠢的事情?

我的印象是 YAML 中允许重复键。

variables:
  slotTarget: 'development'
  ${{ if eq(variables['Build.SourceBranchName'], 'main') }} :
    buildScript: build
  ${{ else }} :
    buildScript: devBuild

jobs:
- job: buildApp
  displayName: 'Build the Vue App'
  #Set ENV.VARS for Webpack to read and inject during build
  - bash: |
      echo Running build for $BUILDNUM
      BUILDNUMBER=$BUILDNUM npm run $(buildScript)
    displayName: 'Create Build - $(build.buildNumber) for GIT $(build.SourceVersion) Trigger: $(build.Reason)'
    env: …
Run Code Online (Sandbox Code Playgroud)

yaml azure-devops azure-pipelines azure-pipelines-yaml

5
推荐指数
1
解决办法
2910
查看次数