我想定义部署作业(通过模板),但是运行我的 azure 管道时,显示以下错误:
job-deploy.yml@templates:预期映射结束
我的问题出在哪里?
以下模板称为:
job-deploy.yml@templates: Expected mapping end
deployment azure-devops azure-pipelines azure-yaml-pipelines
我可能有一些昂贵的任务/测试,并且未经审查的 PR 可能需要额外的更改。
我不想为每次提交或微小更改运行这些昂贵的任务,但只有在此类更改经过审查和批准后才运行。
这些任务不仅运行成本昂贵,而且还可能有一些运行配额。迁移到 CI 构建是不可取的,因为这意味着破坏应用程序的代码可能会进入 master,并且需要额外的 PR 来修复。
目前可以在 Azure DevOps 中实现吗?如何?
我们遇到了一个问题,即用于本地部署的相同脚本在远程服务器上出现意外行为。经过大量调试,我们发现这是因为我们的 Azure Pipeline 中的下载步骤:
steps:
- download: current
Run Code Online (Sandbox Code Playgroud)
不会覆盖目标目录,即之前运行留下的任何文件将保留在那里,并可能导致意外的副作用。有没有办法告诉 Azure 管道在下载工件之前清理目标目录并删除其中的所有内容?
是否可以在模板 YAML 中包含参数及其值,并在准备运行管道时让主 YAML 读取列表并将它们显示在下拉列表中?
与“变量重用”的 MS 示例非常相似,如下所示。
# File: vars.yml
variables:
favoriteVeggie: 'brussels sprouts'
Run Code Online (Sandbox Code Playgroud)
# File: azure-pipelines.yml
variables:
- template: vars.yml # Template reference
steps:
- script: echo My favorite vegetable is ${{ variables.favoriteVeggie }}.
Run Code Online (Sandbox Code Playgroud)
我有一个大约 50 个值的列表,这些值每周都在增长。当运维人员运行我的管道时,我希望他们从下拉列表中选择一个值。
这可以简单地通过在管道 YAML 文件中指定参数块来实现azure-pipeline.yml:
parameters:
- name: subscription
displayName: Subscription Name
type: string
default: sub A
values:
- sub A
- sub B
- sub C
- sub D
Run Code Online (Sandbox Code Playgroud)
这给了我 UI 中的下拉菜单:
在上面的示例中,只有 4 个值,但是,我们有超过 50 …
这似乎name是一个特殊的魔法变量,以某种方式用于我的输出目录。(这种行为有记录在任何地方吗?)
我正在尝试设置它。
鉴于编写 Azure pipeline yml 非常困难,我不太可能把它写对。在没有任何形式的调试的情况下,我想添加一个打印语句,以便我可以看到该值。
如何?
${{ if eq(variables['Build.SourceBranchName'], 'master') }}:
buildConfiguration: 'Release'
tag: ''
${{ if ne(variables['Build.SourceBranchName'], 'master') }}:
buildConfiguration: 'Debug'
tag: ${{ format('-{0}', variables['Build.SourceBranchName']) }}
# How do you do string concatenation in yml? Do I need to do `format` like above?
name: $(Build.BuildId)$(tag)
steps:
- script: echo "name is $(name)"
Run Code Online (Sandbox Code Playgroud)
但输出是
Generating script.
Script contents:
echo "name is $(name)"
...
name is $(name)"
Run Code Online (Sandbox Code Playgroud)
有可能使这项工作成功吗?如何?
我有以下管道结构:
Job A --> Generate build files
Parallel:
Job B --> Uses the build files
Job C --> Uses the build files
Job D --> Publishes the build files
Job E --> Release
On finish, I want to delete the build files completely
Run Code Online (Sandbox Code Playgroud)
我不相信使用工件(因为上传/下载所花费的时间),但我似乎需要使用它才能跨作业使用文件
在管道结束时,我实际上不需要保留构建文件(又名工件),那么我如何在管道完成时简单地删除它们呢?
我正在使用azure-pipelines.yml。
azure-devops azure-pipelines azure-pipelines-tasks azure-pipelines-yaml
我有一个天蓝色的管道并使用参数运行,其中有多个选项,如下所示:
选择测试执行
如果我选择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 容器注册表任务失败。当尝试从本地系统拉取或推送时,没有问题,但当尝试使用 Azure Devops 管道执行此操作时,则会失败。Docker 登录成功,但当我想从 ACR 中提取镜像时失败,结果如下:
**Error response from daemon: Head "***/a2/abcd/manifest/latest": unauthorized: Invalid clientid or client secret.
##[error]Bash exited with code '1'.
##[debug]Processed: ##vso[task.issue type=error;]Bash exited with code '1'.
Run Code Online (Sandbox Code Playgroud)
我检查了 Az Devops 中的所有服务连接,它们看起来都配置正确。还检查了关联的服务主体是否具有AcrPull权限AcrPush,所有这些都已到位。只是不明白出了什么问题。
我的 Yaml 看起来像这样:
trigger: none
schedules:
- cron: "0 0 0 * *"
displayName: **** *
branches:
include:
- abcd
always: true
pool:
vmImage: 'ubuntu-latest'
variables:
- name: acrname
value: *****.azurecr.io
stages:
- stage: abcd
displayName: …Run Code Online (Sandbox Code Playgroud) 在我的一个项目中,我启用了 ImplicitUsings (C# 10) 功能。该项目是一个多目标 .NET 4.8 Framework 和 .NET 6 的 Sdk 项目。截至昨天,我的构建在 Azure DevOps 上开始失败,并出现以下错误:
错误 CS0104:“Guid”是“System.Guid”和“System.Guid”之间的不明确引用
即使是先前已知良好的提交(前天)的构建现在也失败了。管道没有改变。检查代理的图像会产生相同的版本 (20220207.1)。该问题不会在最新的 Visual Studio 2022 (17.1) 上本地重现。
该问题出现在包含 的文件中using System,例如 EF Core 迁移文件。我可能可以通过删除这些“未使用的”使用来解决问题,但是每当创建新的迁移时,问题就会再次出现。生成的 usings( obj\Debug\net48\Project.GlobalUsings.g.cs) 声明以下 using global using global::System;。在其他文件中使用Guid不会产生此错误。
更新。传奇还在继续。现在,我在引用其他 .NET Standard 2 项目的 .NET 6 项目上也遇到构建失败问题。该错误存在于生成的源文件(DragonFruit)中,其中包含行using System.Threading.Tasks. 在本地构建良好,但在 Azure DevOps 上失败并出现以下错误:
D:\ a \ 1 \ s \ XXX \ obj \ Debug \ net6.0 \ XXX.g.cs(8,31):错误CS0104:“任务<>”是“System.Threading.Tasks”之间的不明确引用。任务”和“System.Threading.Tasks.Task”[D:\a\1\s\Source\XXX.csproj]
是什么可以改变这些使用现在导致构建失败的情况?如何在不手动更新迁移的情况下解决此警告?
我可以点击某个按钮让 Visual Studio 了解删除远程分支不再存在吗?
场景是这样的:我有一个 Azure DevOps git 分支,我已将其推送到主服务器并在几台不同的计算机上进行处理。最终,(合并到 master 后)我删除了它,两者都使用下拉窗口中的 Visual Studio 界面进行本地远程删除。
为了确保远程删除有效,我转到 Asure Web 界面进行存储库并检查。树枝显然已经不见了;我的删除成功了。
但是,当我转到曾经在分支上工作的另一台计算机并查看远程分支列表时,已删除的分支仍然显示。即使我再次获取并查看它仍然存在。即使我删除了本地副本。Visual Studio 似乎没有收到远程分支已消失的通知。
因此,为了清理第二台机器上的远程分支列表,我必须再次远程删除它。或者我可以制作一个干净的仓库锥体,然后它也消失了。
我可以发出其他一些按钮/菜单命令来解决这个问题吗?
azure-pipelines ×10
azure-devops ×7
acr ×1
azure ×1
c# ×1
deployment ×1
docker ×1
git ×1
pull-request ×1
yaml ×1