标签: azure-pipelines-yaml

如何在Azure DevOps Pipeline中编写if else条件

我有一个天蓝色的管道并使用参数运行,其中有多个选项,如下所示:

选择测试执行

  • 产品
  • 产品与成本
  • 带附件的产品

如果我选择Product,则执行product.js文件,如果选择,Product with Cost则执行"productCost.js",依此类推。我编写了一个天蓝色管道脚本来执行此操作。我有另一个条件"Generate Test Data"复选框,它返回布尔值true,或者false如果该值是true,那么我必须选择一个文件productWithTestData.js(如果Product选择)-我不知道如何在Azure管道代码中编写if else条件。请找到我的伪代码

有人可以帮助我如何为我的用例编写 if else 条件 - 提前感谢您的帮助!谢谢!

variables:
  - name: fileName
    ${{ if eq(parameters.selectTestRun, 'Product') }}:
      value: 'product.js'
    else ${{ if eq(parameters.selectTestRun, 'Product') } && { if eq(parameters.testData, True) }}:   
      value: 'productWithTestData.js'
Run Code Online (Sandbox Code Playgroud)

我的管道代码:

trigger:
  none

parameters:

- name: selectTestRun
  displayName: Select test execution
  type: string
  default: Product
  values: …
Run Code Online (Sandbox Code Playgroud)

azure-devops azure-pipelines azure-pipelines-yaml

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

如何在 YAML 管道中循环访问用户定义的变量?

我正在尝试循环访问 Azure DevOps YAML 管道中的用户定义变量。
变量已通过 UI 创建:

在此输入图像描述

在此输入图像描述

在我正在使用的 YAML 管道代码下方:

trigger:
- dev
- main

pr:
- dev

pool:
  vmImage: ubuntu-latest

stages:

- stage:
  jobs:
  - job: TestVars
    steps:
    - ${{ each var in variables }}:
      - script: |
          echo ${{ var.key }}
          echo ${{ var.value }}
        displayName: ${{ var.key }}
Run Code Online (Sandbox Code Playgroud)

当运行上述管道时,仅列出系统和构建变量(例如system、system.hostType、build.queuedBy等)。

任何循环用户定义变量的帮助将不胜感激。

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

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

仅当某些文件发生更改时才运行 Azure Pipelines 作业

我有一个包含 Dockerfile 和其他代码的存储库。无论发生什么变化,我们都希望运行某些步骤,但只想在发生变化docker build时运行作业。**/Dockerfile

我已经查看了条件文档表达式文档,但我不清楚如何(如果可能的话)如何组合这些文档或以其他方式实现所需的结果。

我意识到在bash(例如git rev-list...git diff --name-only <previous_commit>..HEAD | grep <pattern>)中这是可能的,但这有点麻烦,并且它仍然在 Azure Pipelines 中显示作业已运行,只是短路了。理想情况下,它会(适当地)表明该作业被全部跳过。

我还意识到 Docker 部分和代码部分可以位于具有单独构建触发器的单独存储库中,但如果可能的话,希望将它们放在同一个存储库中。

git azure-pipelines azure-repos azure-pipelines-yaml

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

如何使用 yaml 在 azure devops 中回滚到之前的构建

我有一个多阶段管道 YAML 部署到不同的环境(PreDev-Dev-QA-Stage-Prod),我正在尝试实施回滚策略以回滚到以前的版本或以前的构建工件,并且正在查看此页面https:// /learn.microsoft.com/en-us/azure/devops/pipelines/process/deployment-jobs?view=azure-devops但无法弄清楚,也没有找到任何示例。任何帮助表示赞赏

azure-devops azure-pipelines azure-pipelines-yaml

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

在 Azure Pipelines 中结帐时使用运行时变量作为存储库名称

我在多阶段管道中有一个矩阵,它生成作业并签出到不同的 git 存储库并进行提交。

该矩阵将存储库名称作为值,我想在checkout任务期间引用它。但是,由于在运行时评估变量,我不断收到错误。

即矩阵

matrix:
  repo_foo:
    repo: foo
  repo_bar:
    repo: bar
Run Code Online (Sandbox Code Playgroud)

我想做一些类似的事情

steps:
- checkout: $[ variables['repo'] ]
Run Code Online (Sandbox Code Playgroud)

但这些不会被评估并在管道启动之前抛出错误。同样,使用${{ variables['repo'] }}也会失败,因为它在编译时进行评估,从而变成空字符串。

我已将潜在的存储库定义为管道 yaml 中的资源,并尝试将完整的 git 路径作为变量值传递。

我还有其他方法可以做到这一点吗?

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

7
推荐指数
1
解决办法
5992
查看次数

Azure DevOps yaml 管道:如何知道正在签出哪个分支?

目前,我的 YAML 管道和应用程序的源代码位于两个不同的分支中。

我试图找到证据证明正在检查的确实是源代码的分支,而不是我的管道的分支。

我看到末尾的签出调用git fetch是针对特定的提交,而不是针对指定的分支名称

这是我的资源定义:

resources:
  repositories:
  - repository: RepoName
    type: git
    name: 'MyRepository'  # repository in Azure DevOps
    trigger:
      branches:
        include:
        - UAT
Run Code Online (Sandbox Code Playgroud)

在我的一个步骤中,我做了一个checkout: RepoName.

我本来期待git checkout UAT在拉出源代码后,但正如所说,我看到了特定提交的签出。

我如何确定正在检查哪个分支?

azure-devops azure-pipelines azure-pipelines-yaml

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

Azure Devops 中的秘密管道参数

我有一个用例,我想在 yaml 管道中使用用户名和密码的管道参数。对于用户名来说很简单,因为我只需在参数部分添加以下内容。

parameters:
- name: Username
  type: string
  displayName: Username(Email)
Run Code Online (Sandbox Code Playgroud)

我还想使用密码作为管道参数,但我还没有找到将其声明为秘密的方法。有没有办法像变量一样使用管道参数作为秘密?到目前为止,我找到了一个解决方法,将一个变量声明为秘密,并在每次运行之前更新该变量。但这不是最好的体验。也许我错过了文档中的某些内容?

如果它像下面的代码一样工作那就太棒了:

parameters:
- name: Username
  type: string
  displayName: Username(Email)
- name: Password
  type: secret
  displayName: Password
Run Code Online (Sandbox Code Playgroud)

azure-devops azure-pipelines azure-pipelines-yaml

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

如何在 Azure Devops 管道上正确使用表达式结果作为布尔值?

我尝试使用or表达式在模板上定义布尔值,如下所示:

parameters:
  - name: A
    default: true
  - name: B
    default: false

stages:
  - template: bacon.yml@template
    parameters:
      booleanParameter: or(eq(${{ parameters.A }}, true), eq(${{ parameters.B}}, true))
Run Code Online (Sandbox Code Playgroud)

在我看来,它应该工作得很好,但我不断收到同样的错误:

The 'booleanParameter' parameter value 'or(eq(True, true), eq(False, true))' is not a valid Boolean.
Run Code Online (Sandbox Code Playgroud)

我尝试了一些语法的小变化,所有这些都会导致相同的错误。

我在这里缺少什么?

azure-devops azure-pipelines azure-pipelines-yaml

7
推荐指数
1
解决办法
6713
查看次数

Azure DevOps Yaml 管道中使用的 YAML 文件中的双大括号“{{}}”意味着什么?

最近正在研究 Azure DevOps 模板。并遇到了这种双花括号语法。只是想知道如何在 Azure DevOps 中使用双花括号。

看过一些关于相同内容的帖子。

  1. 将条件值分配给 Azure DevOps 中的变量

  2. Yaml 文件中的大括号

  3. 如果是在 Azure DevOps 中

  4. Azure DevOps 中的条件变量赋值

可以说,我在组中定义了一个变量,如下所示。

在 Azure DevOps 中定义变量组

我们还可以在 yaml 文件中定义变量,如下所示。

variables:
- name: BuildConfiguration
  value: 'Release'

- name: finalBuildArtifactName
  value: 'TempFolderName'
Run Code Online (Sandbox Code Playgroud)

什么时候应该使用双大括号语法?

我有关于并使用以下方法来引用变量的想法。

  1. 变量['MyVar']
  2. 变量.MyVar

与上述两个相比,我们可以用双花括号完成什么?

让 yaml 管道中的东西正常工作非常困难。进行更改、签入、运行管道、查看结果并再次返回。这非常耗时,而且至少可以说并不顺利。

azure-devops azure-pipelines azure-pipelines-yaml

7
推荐指数
1
解决办法
6756
查看次数

CopyFiles 任务未拾取文件

在数据库项目构建和发布管道中使用 Azure DevOps YAML

这段代码正确地获取了我的四个 dacpac 文件,我可以看到这些文件被复制到控制台中

    - task: CopyFiles@2
      displayName: Copy build output to artifacts staging
      inputs:
        SourceFolder: "$(Build.SourcesDirectory)"
        flattenFolders: true
        Contents: '**\bin\**\*.dacpac'
        TargetFolder: "$(Build.ArtifactStagingDirectory)"
Run Code Online (Sandbox Code Playgroud)

这段代码正确地获取了我的发布文件,我可以看到这些文件正在控制台中复制

    - task: CopyFiles@2
      displayName: Copy build output to artifacts staging
      inputs:
        SourceFolder: "$(Build.SourcesDirectory)"
        flattenFolders: true
        Contents: '**\PublishProfile\*.publish.xml'
        TargetFolder: "$(Build.ArtifactStagingDirectory)"
Run Code Online (Sandbox Code Playgroud)

这段代码报告“找到零个文件”

    - task: CopyFiles@2
      displayName: Copy build output to artifacts staging
      inputs:
        SourceFolder: "$(Build.SourcesDirectory)"
        flattenFolders: true
        Contents: |
          '**\bin\**\*.dacpac'
          '**\PublishProfile\*.publish.xml'
        TargetFolder: "$(Build.ArtifactStagingDirectory)"
Run Code Online (Sandbox Code Playgroud)

此管道多行语法遍布示例 https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/copy-files?view=azure-devops&tabs=yaml#examples

我还使用 Get-ChildItem 来双重确认这些文件是否存在。

好像| / 多行不能按描述工作。

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

7
推荐指数
1
解决办法
6354
查看次数