我正在使用 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) 我有我想要评估的模板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()
有任何想法吗?
我有模板
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) 我有一个 .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
在执行 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)
我唯一的猜测是一个比另一个性能更好?另外,是否推荐一种方法而不是另一种方法?
当尝试在基于 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
*请忽略格式问题
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 DevOps 部署 YAML 管道,用于创建 Azure 应用服务并向其部署代码。实际的管道更复杂,但我针对这个问题将其简化。
目前,我的管道可以使用变量中定义的资源名称成功部署到特定的 Azure 订阅(服务连接器)。
我需要对管道进行参数化,以便它可以使用多个服务连接器部署到多个不同的环境(指 Azure 订阅)。每个环境都有不同的 Azure 资源命名约定。
有没有办法从 XML 或 JSON 文件读取管道变量的值?这样,我可以为每个环境拥有多个配置文件,并将它们存储为我的存储库的一部分。
这是多环境部署管道配置的正确方法吗?
azure azure-devops azure-pipelines-tasks azure-pipelines-yaml
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 DevOps 中开发一个 yaml 管道,它使用同一项目下其他存储库中的模板。
这些模板非常简单。
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