标签: azure-pipelines-yaml

如何在带有变量组的 azure DevOps yaml 管道的变量中使用 IF ELSE?

除了变量组之外,我还尝试将 2 个值之一分配给变量,但找不到有关如何使用 IF ELSE 的参考。

基本上我需要将这个 jerkins 逻辑转换为 azure DevOps。

詹金斯

if (branch = 'master') { 
   env = 'a'
} else if (branch = 'dev'){
    env ='b'
}
Run Code Online (Sandbox Code Playgroud)

我从下一个中找到了 1 个参考,但是如果变量部分没有变量组,这个参考似乎有效。

/sf/answers/4027276851/

但是在我的管道中,我已经有一个用于秘密的变量组,所以我必须使用名称/值约定,并且该示例不适用于诸如expected a mappingorA mapping was not expected或 or 之类的错误Unexpected value 'env'

variables:
- group: my-global
- name: env
  value:
    ${{ if eq(variables['Build.SourceBranchName'], 'master') }}: 
      env: a
    ${{ if eq(variables['Build.SourceBranchName'], 'dev') }}: 
      env: b

Run Code Online (Sandbox Code Playgroud)

或者

variables:
- group: my-global
- name: env
  value: …
Run Code Online (Sandbox Code Playgroud)

azure-devops azure-pipelines azure-pipelines-yaml

31
推荐指数
5
解决办法
3万
查看次数

Azure Pipelines:PublishBuildArtifacts 和 PublishPipelineArtifact 任务之间的区别?

我注意到PublishPipelineArtifact任务的存在,但我不清楚与旧的PublishBuildArtifacts任务是否有任何功能差异?

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

31
推荐指数
1
解决办法
1万
查看次数

AzurePipeline 失败的原因是:找不到 .NETFramework,Version=v4.6.1 的参考程序集

我有一个用于我的构建的 Azure 管道设置。我最近遇到了这个问题,但找不到解决方法:

##[error]C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1220,5): Error MSB3644: The reference assemblies for .NETFramework,Version=v4.6.1 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application. You can download .NET Framework Developer Packs at https://aka.ms/msbuild/developerpacks
Run Code Online (Sandbox Code Playgroud)

大约一周前,我们的许多构建都失败了,微软改变了一些东西,我们得到了这样的东西:

[error]C:\Users\VssAdministrator\.nuget\packages\codegeneration.roslyn.buildtime\0.6.1\build\CodeGeneration.Roslyn.BuildTime.targets(73,5): Error CGR1001: CodeGeneration.Roslyn.Tool (dotnet-codegen) is not available, code generation won't run. Please check https://github.com/AArnott/CodeGeneration.Roslyn for usage instructions. 
Run Code Online (Sandbox Code Playgroud)

但是能够通过显式添加一个任务来包含 netcore2.1 sdk 来解决这个问题

##[error]C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1220,5): Error MSB3644: The reference assemblies for .NETFramework,Version=v4.6.1 were not found. …
Run Code Online (Sandbox Code Playgroud)

yaml build-server azure-devops azure-pipelines azure-pipelines-yaml

22
推荐指数
2
解决办法
1万
查看次数

Azure Devops YAML 管道中的条件相关作业

我正在 yaml 中构建一个复杂的管道,并尝试在两个作业之间创建依赖关系,以便后一个作业在前一个作业之后运行,但前提是前者设置为基于参数运行。我似乎无法弄清楚这是否可行。

我有一个这样定义的管道:

parameters:
- name: doJobA
  type: boolean

stages:
  jobs:
  - job: JobA
    condition: eq('${{ parameters.doJobA }}', true)
    # ... details removed for brevity

  - job: JobB
    dependsOn: JobA
    # ... details removed for brevity
Run Code Online (Sandbox Code Playgroud)

JobB应该在JobAifparameters.doJobA为 true 后运行,或者如果parameters.doJobA为 false 则立即运行。如果不满足条件,简单地添加dependsOn条件就会导致跳过,这是有道理的,但我希望它无论如何都能运行。JobBJobA

dependsOn是否可以以这种方式定义条件?

编辑:我遇到了一个额外的问题,导致下面的解决方案无法使用。我需要条件依赖于先前运行的 PowerShell 脚本设置的变量,而不是基于参数。

azure-devops azure-pipelines azure-pipelines-yaml

20
推荐指数
1
解决办法
3万
查看次数

“配置触发器失败,再次编辑并保存管道”,没有明显错误,也没有更多详细信息

在将一堆 YAML 管道转换为使用模板来保存作业逻辑以及定义管道变量后,我遇到了一个奇怪的问题。管道运行得很好,但是我收到“最近检测到的一些与管道触发相关的问题”。管道摘要页面顶部的警告和仅查看详细信息指出:“配置触发器失败,请再次编辑并保存管道。”

这里奇怪的部分是管道工作得很好,包括触发器。没有任何问题,也没有提供有关假定问题的更多细节。目前,我已经为管道覆盖了 YAML 触发器,但我也在 YAML 中定义了相同的触发器,看看这是否有帮助(但没​​有)。

我正在寻找有关可能导致此问题的原因的任何想法,或者鉴于错误/警告提供的完全缺乏详细信息,我如何能够进一步对其进行故障排除。这给开发人员带来了很多困惑,他们认为警告可能导致他们的构建出现问题。

这是主要管道。构建存储库是一个共享存储库,用于保存在构建系统中的多个存储库中使用的代码。dev.yaml 包含开发环境特定的变量值。共享保存基于管道运行的分支有条件设置的变量。

name: ProductName_$(BranchNameLower)_dev_$(MajorVersion)_$(MinorVersion)_$(BuildVersion)_$(Build.BuildId)
resources:
  repositories:
    - repository: self
    - repository: build
      type: git
      name: Build
      ref: master

# This trigger isn't used yet, but we want it defined for later.
trigger: 
  batch: true
  branches:
    include: 
    - 'dev'

variables:
- template: YAML/variables/shared.yaml@build
- template: YAML/variables/dev.yaml@build

jobs:
- template: ProductNameDevJob.yaml
  parameters:
    pipelinePool: ${{ variables.PipelinePool }}
    validRef: ${{ variables.ValidRef }}
Run Code Online (Sandbox Code Playgroud)

然后这就是实际工作 yaml 的开始。它提供了一种可重用的作业定义,可以在多个总体管道中使用:

parameters:
- name: dependsOn
  type: object
  default: {}
- name: …
Run Code Online (Sandbox Code Playgroud)

azure-devops azure-devops-server azure-pipelines-yaml azure-devops-server-2020

20
推荐指数
2
解决办法
2万
查看次数

如何更改 Azure Pipelines 中管道的存储库位置

我已将存储库从 BitBucket 导入到 GitHub。如何将 Azure Pipelines 中的现有管道指向新的存储库位置?到目前为止,用户界面让我很失望。

github azure-pipelines azure-pipelines-yaml

16
推荐指数
1
解决办法
5895
查看次数

错误:在 ADO 管道中运行 Azure CLI 任务时无法找到可执行文件:“powershell”

我尝试在管道中运行 Azure CLI 任务并收到以下错误:

Starting: AzureCLI
==============================================================================
Task         : Azure CLI
Description  : Run Azure CLI commands against an Azure subscription in a PowerShell 
Core/Shell script when running on Linux agent or PowerShell/PowerShell Core/Batch script when running on Windows agent.
Version      : 2.1.0
Author       : Microsoft Corporation
Help         : https://learn.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-cli
==============================================================================
##[error]Script failed with error: Error: Unable to locate executable file: 'powershell'. Please verify either the file path exists or the file can be found within a directory specified by …
Run Code Online (Sandbox Code Playgroud)

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

15
推荐指数
2
解决办法
1万
查看次数

如何:在 Azure DevOps YAML 中有条件地插入模板?

以下是我尝试完成有条件插入模板的方法。根据要求,我想根据运行时提供的管道变量调用 fresh-deploy.yml 或 update.yml 。用户可以将名为“freshInstall”的变量编辑为 true 或 false。

主管道(入口点):

# azure-pipelines.yml
variables:
  shouldUpdate: 'false'

jobs:
  - job: TestJob
    pool:
      name: "Vyas' Local Machine"
    steps:
    - checkout: none
    - template: ./testIf.yml
      parameters:
        freshInstall: $(freshInstall)
Run Code Online (Sandbox Code Playgroud)

testif.yml:

# testIf.yml
parameters:
  - name: freshInstall
    type: string  # Can't be boolean as runtime supplied variable values ARE strings

steps:

  # set a preexisting variable valued 'false' to 'true'
  - powershell: |
      $shouldUpdate = 'true'
      Write-Host "##vso[task.SetVariable variable=shouldUpdate]$shouldUpdate"
    displayName: 'Set Should Update to $(shouldUpdate)'

  # Check …
Run Code Online (Sandbox Code Playgroud)

azure-devops azure-pipelines azure-pipelines-yaml

13
推荐指数
2
解决办法
2万
查看次数

如果之前的任务失败,如何强制 Azure DevOps 管道失败?

我的基于 YAML 的 Azure DevOps 管道包含多个任务,其中continueOnError: true. 我故意这样做,以便即使其中一些测试套件失败(每个任务运行不同的测试套件),我也可以运行所有测试套件。目前,如果这些任务中的任何一个失败,构建将被标记为“部分成功”。现在我如何强制将构建标记为“失败”?

我可以通过在每个任务失败时设置构建变量来手动执行此操作,然后在最后一步中检查该变量的值。但是,如果管道中的任何先前步骤失败,那么强制构建失败的最简单方法是什么?

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

13
推荐指数
1
解决办法
2万
查看次数

如何获取 Azure Pipeline YAML 文件中的当前日期以使用变量?

我正在尝试将有用的版本号注入到我正在使用 Azure DevOps 管道构建和部署的 ASP Core 应用程序中。

- script: dotnet publish -c $(buildConfiguration) -p:Version=2022.06.21 -p:SourceRevisionId=$(Build.SourceVersion)
Run Code Online (Sandbox Code Playgroud)

但我一生都无法弄清楚如何将日期放入我可以实际使用的变量中。这确实非常值得注意,因为当前日期(附加了一些其他内容)是 DevOps 本身使用的默认内部版本号。

文档太可怕了。我该怎么做呢?

azure-devops azure-pipelines azure-pipelines-yaml

13
推荐指数
1
解决办法
1万
查看次数