问题标签 [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.
azure-devops - Azure DevOps Pipelines:Newman 是自托管代理 (Windows) 上 Postman 的 cli 伴侣
我在 YAML 管道中使用任务“Newman the cli Companion for Postman”(链接)来运行 Postman 集合以进行测试和预热。
我使用如下任务:
在托管代理上这样做可以正常工作,但是在使用自托管代理时,我得到:
我在代理上安装了 newman 和 newman-reporter-html,并且能够在登录代理时运行它。
我该如何解决这个问题?
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
.
我怀疑有几件事之一是原因,但我不确定是哪一个:
- 我使用不正确的语法来检索
SOURCE_REVISION_ID
调用中的参数值dotnet build
。 - 我误解了 Dockerfile 和 Dockerfile 之间的区别
ARG
,ENV
需要将我的 build 参数的值复制到一个变量中以备后用。如果是这种情况,我不明白为什么。 - 实际上它工作正常,但是我的代码没有
AssemblyInformationalVersion
正确地从程序集中提取(尽管我从 Scott 的帖子中复制和粘贴了代码!)
请帮助阻止我秃头!
azure-devops - AzDevOps 队列恢复默认权限
本地 AzDevOps Server 2019,版本 Dev17.M153.5。我限制了对每个集合中每个项目的代理队列的默认访问权限 - 删除了默认集(发布管理员/构建管理员/项目管理员),添加了一些其他行(服务器管理员)。
现在,时不时地,我看不到任何模式,这三个权限会自动返回。在不同的项目中,通过没有人为操作(已告知所有有权执行此操作的人),具有管理员角色的这三行将重新出现在默认代理队列 ACL 上。
这是 AzDevOps 中的已知行为吗?有什么办法可以退出?
编辑:这就是它的样子。前三行不属于。
编辑:根据建议,我会尝试使用活动日志来追踪它。我去其他地方对默认队列安全性进行了虚拟更改。有一条带有 command 的日志记录SecurityRoleAssignments.SetRoleAssignments
。然后,我过滤了权限已恢复的集合上的活动日志,并搜索了相同的命令。没有实例。日志在 7/14 左右结束,这可能在事件发生之前。
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中的建议检查了“将工作授权范围限制为当前项目”选项,但它已被禁用。所以不确定还需要什么其他设置。
azure-devops - 注册到环境时标记资源
我有一个包含多个阶段的管道,用于部署虚拟机组。并向天蓝色管道环境注册一个。
然后我想在部署作业中定位那个注册的虚拟机。
我在按名称定位该资源时遇到问题,因为该资源在排队时环境中不存在,因此我什至无法在运行之前禁用该阶段。
所以我的下一个选择是按标签定位。但是我在注册脚本中没有看到在注册时定义标签的选项。
因此,我的管道流程在各个阶段之间有一个手动步骤,以进入环境并标记资源。然后我可以触发管道的部署阶段,它继续正常。
所以我的问题是:
有什么方法可以在排队时禁用资源评估,或者以编程方式在环境中标记资源?
谢谢
azure-devops - 无法有条件地将脚本添加到 Azure Devops Yaml 管道
我正在尝试在 Microsoft 托管和自托管(容器化)构建代理上运行的管道中使用容器作业模板。
ContainerJob 模板在运行时运行良好,Microsoft Hosted
但在自托管代理中失败cannot run container inside a containerized build agent
。错误是有道理的。
我想如果可以有条件地添加/删除以下部分,那么相同的容器作业模板在两个代理中都可以使用。
但是条件始终为真,并且始终container
添加部分并且始终在自托管代理中失败。我认为模板内不允许随意表达表达式。
我可以将此模板分成 2 个模板并将它们加载到各自的构建代理中,但这是最后的手段。非常感谢动态创建/更改模板的任何帮助。
git - 分支触发 YAML 管道时使用哪个 YAML 文件?
我有一个在“SomeBranch”更新时触发的 YAML 文件
现在,我更新了“SomeBranch”中的 YAML 文件中的属性,并将其推送到存储在 Azure Devops 上的存储库中。我的问题是触发 Azures 管道时将使用哪个版本的 YAML 文件?它是在 master 分支中找到的旧 YAML 文件还是在“SomeBranch”中更新的新文件?
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 停机来解决这个问题,或者将测试隔离在不受自动部署等影响的环境中。但是根据我们所拥有的,以及我们可以用来改进它的时间,我们希望知道是否有办法让管道实例更加了解彼此......
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
),但无济于事。
然后我将构建脚本从:
到
这感觉像是倒退了一步,然而,所有的测试都通过了,没有错误消息,所以这是值得高兴的。但是....这是“完美”的解决方案吗?