问题标签 [azure-devops-pipelines]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
210 浏览

azure-devops - Azure Pipelines 环境批准

我设置了 2 个环境,只保护了一个环境。

然而,管道运行希望我在它开始之前就批准。

我假设 Build 和 DevEnv 部署应该在无人值守的情况下进行,并且应该仅针对 QAEnv 停止。我错过了什么吗?

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
967 浏览

azure-devops - Azure DevOps Pipelines:Newman 是自托管代理 (Windows) 上 Postman 的 cli 伴侣

我在 YAML 管道中使用任务“Newman the cli Companion for Postman”(链接)来运行 Postman 集合以进行测试和预热。

我使用如下任务:

在托管代理上这样做可以正常工作,但是在使用自托管代理时,我得到:

我在代理上安装了 newman 和 newman-reporter-html,并且能够在登录代理时运行它。

我该如何解决这个问题?

0 投票
1 回答
160 浏览

git - 为什么 Azure Devops Pipelines Docker Build 不能正确地将我的提交版本标记到我的 dotnet 核心程序集中?

我找到了Scott Hanselman 的关于使用 dotnet 将 git commit hashes 添加到构建的教程。我尝试在我自己的项目中采用他的方法,该项目正在构建到 Azure Devops Pipelines 中的 Docker 映像中。不幸的是,git hash 永远不会进入程序集。

在我的 docker 文件中,我有:

调用dotnet build "Project.csproj"使用/p:SourceRevisionId=${SOURCE_REVISION_ID}Scott 帖子中描述的参数。

我在构建和推送 docker 代理的管道中有离散步骤,正如我在其他地方发现--build-arg的那样,在组合的 BuildAndPush 作业中没有传递给 Docker。我可以看到管道正在将正确的内容传递SOURCE_REVISION_ID给构建作业,例如--build-arg SOURCE_REVISION_ID=7397bf9c2650e6cd9452f5c40c6e1738fbb32532.

我怀疑有几件事之一是原因,但我不确定是哪一个:

  1. 我使用不正确的语法来检索SOURCE_REVISION_ID调用中的参数值dotnet build
  2. 我误解了 Dockerfile 和 Dockerfile 之间的区别ARGENV需要将我的 build 参数的值复制到一个变量中以备后用。如果是这种情况,我不明白为什么。
  3. 实际上它工作正常,但是我的代码没有AssemblyInformationalVersion正确地从程序集中提取(尽管我从 Scott 的帖子中复制和粘贴了代码!)

请帮助阻止我秃头!

0 投票
2 回答
146 浏览

azure-devops - AzDevOps 队列恢复默认权限

本地 AzDevOps Server 2019,版本 Dev17.M153.5。我限制了对每个集合中每个项目的代理队列的默认访问权限 - 删除了默认集(发布管理员/构建管理员/项目管理员),添加了一些其他行(服务器管理员)。

现在,时不时地,我看不到任何模式,这三个权限会自动返回。在不同的项目中,通过没有人为操作(已告知所有有权执行此操作的人),具有管理员角色的这三行将重新出现在默认代理队列 ACL 上。

这是 AzDevOps 中的已知行为吗?有什么办法可以退出?

编辑:这就是它的样子。前三行不属于。

默认队列 ACL

编辑:根据建议,我会尝试使用活动日志来追踪它。我去其他地方对默认队列安全性进行了虚拟更改。有一条带有 command 的日志记录SecurityRoleAssignments.SetRoleAssignments。然后,我过滤了权限已恢复的集合上的活动日志,并搜索了相同的命令。没有实例。日志在 7/14 左右结束,这可能在事件发生之前。

0 投票
1 回答
557 浏览

azure-devops - 如何在 Azure Devops 中从同一组织内的不同项目下载工件?

我在项目 A 中有一个 azure devops yaml 管道,试图在同一组织内的项目 B 中下载一个工件。它使用如下配置的 DownloadBuildArtifacts@0 任务:

其中“f0a63c0e-a678-44ea-92f4-490def403add”是项目 B 的项目 ID,38 是在项目 B 中生成工件的构建管道定义 ID。在项目 B 中的管道中执行时可以正常工作。但失败并出现错误下面当我尝试从项目 A 中的管道运行相同的任务时。

项目 A 似乎无权访问项目 B。我在哪里以及如何设置这些权限?

更新:我按照这篇文章https://github.com/MicrosoftDocs/azure-devops-docs/issues/6790中的建议检查了“将工作授权范围限制为当前项目”选项,但它已被禁用。所以不确定还需要什么其他设置。

0 投票
1 回答
524 浏览

azure-devops - 注册到环境时标记资源

我有一个包含多个阶段的管道,用于部署虚拟机组。并向天蓝色管道环境注册一个。

然后我想在部署作业中定位那个注册的虚拟机。

我在按名称定位该资源时遇到问题,因为该资源在排队时环境中不存在,因此我什至无法在运行之前禁用该阶段。

所以我的下一个选择是按标签定位。但是我在注册脚本中没有看到在注册时定义标签的选项。

因此,我的管道流程在各个阶段之间有一个手动步骤,以进入环境并标记资源。然后我可以触发管道的部署阶段,它继续正常。

所以我的问题是:

有什么方法可以在排队时禁用资源评估,或者以编程方式在环境中标记资源?

谢谢

0 投票
1 回答
447 浏览

azure-devops - 无法有条件地将脚本添加到 Azure Devops Yaml 管道

我正在尝试在 Microsoft 托管和自托管(容器化)构建代理上运行的管道中使用容器作业模板。

ContainerJob 模板在运行时运行良好,Microsoft Hosted但在自托管代理中失败cannot run container inside a containerized build agent。错误是有道理的。

我想如果可以有条件地添加/删除以下部分,那么相同的容器作业模板在两个代理中都可以使用。

但是条件始终为真,并且始终container添加部分并且始终在自托管代理中失败。我认为模板内不允许随意表达表达式。

我可以将此模板分成 2 个模板并将它们加载到各自的构建代理中,但这是最后的手段。非常感谢动态创建/更改模板的任何帮助。

0 投票
1 回答
38 浏览

git - 分支触发 YAML 管道时使用哪个 YAML 文件?

我有一个在“SomeBranch”更新时触发的 YAML 文件

现在,我更新了“SomeBranch”中的 YAML 文件中的属性,并将其推送到存储在 Azure Devops 上的存储库中。我的问题是触发 Azures 管道时将使用哪个版本的 YAML 文件?它是在 master 分支中找到的旧 YAML 文件还是在“SomeBranch”中更新的新文件?

0 投票
1 回答
271 浏览

azure-devops - Azure Devops 发布管道 - 在先前执行时排队新版本

我们的发布管道配置了多个阶段。对于合并到 master 的每个 pull request,都会自动创建一个新版本。我们有DEV => TST => REL => PRD.

现在,我们还使用这些阶段来执行自动化测试。所以在DEV之后有一个阶段来做一些基本的自动化测试(AT)。所以我们最终得到DEV => AT => TST => REL => PRD. AT 依赖于 DEV 才能正常运行。

我们发布管道的屏幕截图

我们的问题如下。当版本 X 正在执行 AT 并且同时合并拉取请求导致发布 X+1 部署到 DEV 时,这会导致版本 X 的 AT 失败。有没有办法让 Release X+1 在队列中等待,直到为 Release X 完成 AT?

我们也可以通过在部署期间避免 DEV 停机来解决这个问题,或者将测试隔离在不受自动部署等影响的环境中。但是根据我们所拥有的,以及我们可以用来改进它的时间,我们希望知道是否有办法让管道实例更加了解彼此......

0 投票
1 回答
493 浏览

c# - Azure DevOps:解决多个 .Net 框架时测试失败

[编辑:8 月 10 日]

我有一个生成 DLL 的项目(用于私有 NuGet 包)。该项目被编写为在以下框架中编译:

该解决方案还包含四个测试项目,每个项目都是用 .NetCore 3.1 编写的(使用上述项目中的 .Netstandard 2.1 dll)。

这些已经好几个月了,但当然,我没有测试我的 NuGet 包是否适用于使用 .NetStandard 2.0 框架的代码。

因此,我更新了测试项目以在以下框架中编译:

我立即将我的测试数量增加了两倍,并且在 Visual Studio 中它们都通过了(呸!)。嗯,几乎翻了三倍……每个项目都包含一些不适用于 .NetFramework 的测试,所以我使用条件编译来删除 .NetFramework 代码的这些测试。

一切都很好……

但是,当我将其推送到 Azure 时,测试步骤会失败。

构建脚本 (yaml) 包含以下命令:

(仅供参考,我们还连接到 SonarCloud 并报告代码覆盖率)

“头条”新闻似乎很有希望:

作业准备参数
使用 6 个队列时间变量
100% 测试通过

当我深入研究时,我看到每个测试项目的以下模式:

总测试:3650
通过:3650

总测试:3650
通过:3650

总测试:3652
通过:3652

所以,从上面我可以看出,这些数字对应于我的一个测试项目被执行了 3 次,一次用于 .Net 4.7.2,一次用于 .Net 4.8,一次用于 .Core 3.1。

对于其他每个测试项目,我看到了类似的三个执行组。

所以……每个测试都通过了。

但是,在每个测试项目的 .NetCore 版本执行之后(因此,已经执行了几个月的版本),我现在得到以下信息:

我不知道如何解释它,因此如何解决它。

我的猜测是代码分析报告正在接收 3 次覆盖率数据,这导致了一些问题。如果是这种情况,那么我不得不在 YAML 中说“使用 .NetCore 3.1 执行每个测试项目一次,就像我们一直在做的那样并收集代码覆盖率,然后再次执行它们,一次用于 .Net 4.7。 2,然后是没有代码覆盖的 4.8”。但我不确定如何在 yaml 中表达...


编辑 8 月 10 日 #1

为了回应 Kevin Lu 在下面的评论,我从细节中挖掘了这一点。

数据收集器“代码覆盖率”消息:无法初始化代码覆盖率数据收集器并出现错误:System.TypeLoadException:无法从程序集“Microsoft.TestPlatform.Utilities,版本 = 15.0.0.0 加载类型“Microsoft.VisualStudio.TestPlatform.Utilities.CodeCoverageRunSettingsProcessor” ,文化=中性,PublicKeyToken=b03f5f7f11d50a3a'。在 Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector.OnInitialize(XmlElement configurationElement,IDataCollectionSink dataSink,IDataCollectionLogger 记录器)的 Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollectorImpl.Initialize(XmlElement configurationElement)。数据收集器“代码覆盖率”消息:数据收集器“代码覆盖率”在类型加载、构造或初始化期间引发异常:System.TypeLoadException:无法从程序集“Microsoft.TestPlatform.Utilities,Version=15.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”加载类型“Microsoft.VisualStudio.TestPlatform.Utilities.CodeCoverageRunSettingsProcessor”。在 Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollectorImpl.Initialize(XmlElement configurationElement, IDataCollectionSink dataSink, IDataCollectionLogger logger) 在 Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector.OnInitialize(XmlElement configurationElement) 在 Microsoft.VisualStudio.TraceCollector.BaseDataCollector.Initialize(XmlElement configurationElement, IDataCollectionEvents 事件, IDataCollectionSink dataSink, IDataCollectionLogger 记录器, IDataCollectionAgentContext agentContext) 在 Microsoft.VisualStudio.TraceCollector.BaseDataCollector。


编辑 8 月 10 日 #2

我尝试添加不同的NuGet 包,看看我是否可以让它工作Microsoft.TestPlatform.ObjectModel,然后Microsoft.TestPlatform),但无济于事。

然后我将构建脚本从:

这感觉像是倒退了一步,然而,所有的测试都通过了,没有错误消息,所以这是值得高兴的。但是....这是“完美”的解决方案吗?