标签: azure-pipelines-yaml

Azure DevOps Pipeline 在部署中定义变量并在后续作业中重用

我正在使用 Azure DevOps 管道来部署我的代码,现在我需要将变量值从部署作业传递到依赖于它的后续作业。我已经阅读了这个例子,但它似乎根本不起作用。

我想做的是运行一个配置 Key Vault 的 Azure ARM 部署。密钥保管库的名称是从 ARM 部署作业输出的,然后我尝试将该名称传递给另一个需要添加特定机密的作业。访问控制已得到处理,但我仍然需要传递名称。

我已将问题归结为将变量从 a 传递deployment到 a的基础知识job这是我完整的测试管道(几乎完全从这里复制):

trigger: none

stages:
  - stage: X
    jobs:
      - deployment: A
        pool:
          vmImage: "ubuntu-16.04"
        environment: test
        strategy:
          runOnce:
            deploy:
              steps:
                - script: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the deployment variable value"
                  name: setvarStep
                - script: echo $(setvarStep.myOutputVar)
                  name: echovar

      - job: B
        dependsOn: A
        pool:
          vmImage: "ubuntu-16.04"
        variables:
          myVarFromDeploymentJob: $[ dependencies.A.outputs['deploy.setvarStep.myOutputVar'] ]
        steps:
          - script: "echo $(myVarFromDeploymentJob)" …
Run Code Online (Sandbox Code Playgroud)

azure-devops azure-pipelines azure-pipelines-yaml

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

Azure Pipelines 合并未进行评估

我有我想要评估的模板coalesce(${{ parameters.pipeline }}, $(System.DefinitionId))

据我所知,这是正确的语法:

  - task: DownloadBuildArtifacts@0
    inputs:
      buildType: 'specific'
      project: '$(System.TeamProjectId)'
      pipeline: $[ coalesce(${{ parameters.pipeline }}, $(System.DefinitionId)) ]
      buildVersionToDownload: latestFromBranch
      branchName: $[ coalesce(${{ parameters.branchName }}, $(Build.SourceBranch)) ]
      allowPartiallySucceededBuilds: true
      downloadType: 'single'
      downloadPath: '$(Pipeline.Workspace)'
      artifactName: ${{ parameters.artifact }}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此命令时,我收到此错误:

定义名称 $[ coalesce(141, 342) ] 与有效定义不对应

认为这可能意味着它没有评估表达式并使用文字 string '$[ coalesce(141, 342) ]'

似乎Build.DefinitionId只在运行时可用,否则我会将参数默认设置为${{ Build.DefinitionId }},然后设置pipeline: ${{ parameters.pipeline }}

我已经尝试了十几种不同的变体$[ ],在. 它们都不起作用,但这个是最接近的,因为它实际上正确地替换了变量。${{ }}$( )coalesce()

有任何想法吗?

azure-devops azure-pipelines azure-pipelines-yaml

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

如何将变量传递给azure yaml中的模板参数?

我有模板

dockerbuild.yml

steps:
  - task: Bash@3
    displayName: Build an image to container registry
    inputs:
      script : echo $(PATH)
Run Code Online (Sandbox Code Playgroud)

然后是一个变量文件

var.build.yml
- name: PATH
  value: 'docker/path'
- name: PATH1
  value: 'docker/oldpath'
- name: PATH2
  value: 'docker/newpath'

azurepipeline1.yml

resources:
  repositories:
  - repository: templates
    type: git
    name: components/pipeline_templates
trigger:
- none

pool:
  name: PoolA

variables:
- template: variabletemplates/var.build.yml@templates

jobs:
  steps:
      - template: CI-CD/dockerbuild.yml@templates  # Template reference  
        parameters:
          PATH: ${{ variables.PATH }}
      - template: CI-CD/dockerbuild.yml@templates  # Template reference  
        parameters:
          PATH: ${{ variables.PATH1 }}
      - …
Run Code Online (Sandbox Code Playgroud)

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

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

直接在 Azure Pipelines 中可视化 .net 核心代码覆盖率

我有一个 .net core 项目,在 Azure DevOps 中设置了管道(YAML、多阶段)管道。我们有一堆在管道运行时执行的单元测试 - 一切都很好。

然而,我们希望更深入地了解我们的代码覆盖率。所以我们这样配置我们的任务

- task: DotNetCoreCLI@2
  displayName: Run UnitTests
  enabled: true
  inputs:
    command: test
    projects: '**/PM.UnitTests.csproj'
    arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'
Run Code Online (Sandbox Code Playgroud)

结果是这样的

在此输入图像描述

我们现在可以在管道结果中看到这一点:

在此输入图像描述

可以在 Visual Studio 等中下载并分析该 .coverage 文件。

然而,我们真的希望能够直接在 Azure Pipelines 中看到结果。我们有一个 Typescript 项目来执行此操作。结果是这样的: 在此输入图像描述

遗憾的是,我根本不知道如何将其应用到 .net core 项目。

Q1:.net core 项目是否有可能获得相同的体验……以及如何获得?

此外,我们希望能够对用于计算代码覆盖率百分比的代码部分进行过滤。

问题 2:是否正确理解这是使用.runsettings文件完成的?

谢谢 :-)

/杰斯珀

作为参考,这是我的测试 .net core 解决方案中的完整 YAML 管道。解决方案超级简单——一个.net core类库和一个.net core测试类库

在此输入图像描述

pool:
  vmImage: vs2017-win2016

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'restore'
    feedsToUse: 'select'
    vstsFeed: 'd12c137f-dac4-4ea7-bc39-59bd2b784537' …
Run Code Online (Sandbox Code Playgroud)

code-coverage .net-core azure-pipelines azure-pipelines-yaml

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

使用 npm 任务与在 Azure 管道中使用脚本有什么区别?

在执行 npm 安装时,我正在努力找出 Azure 管道的以下两个片段之间的差异。

片段 1(使用任务):

- task: Npm@1
  inputs:
    command: 'install'
Run Code Online (Sandbox Code Playgroud)

片段 2(使用脚本):

- script: npm install
Run Code Online (Sandbox Code Playgroud)

我唯一的猜测是一个比另一个性能更好?另外,是否推荐一种方法而不是另一种方法?

azure-pipelines azure-pipelines-yaml

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

Azure DevOps 和 Azure CLI:无法找到可执行文件

当尝试在基于 ubuntu 的 Azure DevOps 管道中运行简单的 Azure CLI 任务时,我收到以下错误消息:

##[error]Script failed with error: Error: Unable to locate executable file: 
'/home/vsts/work/_temp/azureclitaskscript1637831708745.bat'. 
Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. 
Also check the file mode to verify the file is executable.
Run Code Online (Sandbox Code Playgroud)

如果我正确地阅读了此内容,则未找到内联脚本,对吗?我在这里缺少什么?这是完整的 YAML:

trigger:
- main
- dev

pool:
  vmImage: ubuntu-latest

steps:
- task: AzureCLI@2
  inputs:
    azureSubscription: 'My Subscription Name'
    scriptType: 'batch'
    scriptLocation: 'inlineScript'
    inlineScript: 'az --version'
Run Code Online (Sandbox Code Playgroud)

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

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

Azure Devops - 矩阵策略 - 有条件作业运行

*请忽略格式问题

trigger:
 - none
parameters:
- name: stg
displayName: "Environment Names"
type: string
 
pool:
  vmImage: ubuntu-latest
stages:
  - stage: stage1
    displayName: 'Stage C1'
    jobs:
    - job: jobabc
      strategy:
        maxParallel: 2
        matrix: 
            env_1:
                EnvironmentX: E1
                Browser: IE
            env_2:
                EnvironmentX: E2
                Browser: Firefox
            env_3:
                EnvironmentX: E3
                Browser: Chrome
    displayName: 'Job 1'
    condition: contains('${{parameters.stg}}', $(EnvironmentX))}}  
    steps: 
    - task: CmdLine@2
      displayName: 'My Task '
      inputs:
        script: 'echo Stage C1 $(Browser)' 
Run Code Online (Sandbox Code Playgroud)

我将stg参数传递为E1E3E4.

在 Matrix 中我定义了EnvironmentX其值可以是E1, E2, or E3 …

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

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

如何参数化 Azure DevOps 部署 YAML 管道以部署到多个环境

我有一个 Azure DevOps 部署 YAML 管道,用于创建 Azure 应用服务并向其部署代码。实际的管道更复杂,但我针对这个问题将其简化。

目前,我的管道可以使用变量中定义的资源名称成功部署到特定的 Azure 订阅(服务连接器)。

我需要对管道进行参数化,以便它可以使用多个服务连接器部署到多个不同的环境(指 Azure 订阅)。每个环境都有不同的 Azure 资源命名约定。

有没有办法从 XML 或 JSON 文件读取管道变量的值?这样,我可以为每个环境拥有多个配置文件,并将它们存储为我的存储库的一部分。

这是多环境部署管道配置的正确方法吗?

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

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

Azure Devops Pipeline 多个矩阵选项的叉积

Azure DevOps 管道文档提供了一个用于matrix构建两个不同操作系统和版本组合的示例:

strategy:
  matrix:
    jdk10_linux:
      imageName: "ubuntu-latest"
      jdkVersion: "1.10"
    jdk11_windows:
      imageName: "windows-latest"
      jdkVersion: "1.11"
Run Code Online (Sandbox Code Playgroud)

这里

问题:有没有办法获得多组矩阵选项的叉积。举例来说,假设我想要这个:

strategy:
  matrix:
    jdk10_linux:
      imageName: "ubuntu-latest"
      jdkVersion: "1.10"
    jdk11_linux:
      imageName: "ubuntu-latest"
      jdkVersion: "1.11"
    jdk10_windows:
      imageName: "windows-latest"
      jdkVersion: "1.10"
    jdk11_windows:
      imageName: "windows-latest"
      jdkVersion: "1.11"
Run Code Online (Sandbox Code Playgroud)

除了复制并粘贴整个列表之外,是否有更干净/更简单的方法来执行此操作?

从逻辑上讲,我希望能够说更多类似的话:

imageList: ['windows-latest', 'ubuntu-latest']
jdkList: ['1.10', '1.11']
optionList: ['a','b','c']

strategy:
  matrix_combine_lists:
    imageName: imageList
    jdkVersion: jdkList
    someOption: optionList
Run Code Online (Sandbox Code Playgroud)

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

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

Azure DevOps Artifact Feed,来自 azure 管道的推送包出现错误 403

我面临许可问题。

我正在 Azure DevOps 中开发一个 yaml 管道,它使用同一项目下其他存储库中的模板。

这些模板非常简单。

  • dotnet 恢复 - 或 - npm install
  • dotnet 发布并将文件夹推送到通用包 feed -或者 - dotnet pack 并将 nupkg 推送到 nuget feed
parameters:
- name: jobName
  type: string
- name: projectPath
  type: string
- name: projectName
  type: string
- name: filesToDelete
  type: object

jobs:
- job:
  displayName: ${{ parameters.jobName }}
  steps:

  - task: DotNetCoreCLI@2
    displayName: Dotnet build
    inputs:
      command: 'build'
      projects: '${{ parameters.projectPath }}/${{ parameters.projectName }}.csproj'
      arguments: '-c Debug'

  - task: DotNetCoreCLI@2
    displayName: Dotnet pack …
Run Code Online (Sandbox Code Playgroud)

azure-devops azure-pipelines-build-task azure-pipelines azure-artifacts azure-pipelines-yaml

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