小编Bre*_*ett的帖子

在完成时从 Azure Devops Build Pipeline 设置 Git 标签

我正在尝试使用由 GitVersion 在成功构建结束时的 GIT 提交确定的当前版本号设置标签。感觉我不能成为第一个这样做的人,但我正在努力寻找有用的东西。

Azure Devops Pipeline 在成功时获取源以“标记源”中有一项功能。我已经设置了它并设置为由我拥有的代理任务之一设置的变量(GitVersion)

标签来源

我可以在调试日志中看到这个变量是由我添加到管道的 GitVersion 组件设置的。

2019-12-06T20:54:20.2390794Z ##[debug]Processed: ##vso[task.setvariable variable=GitVersion.MajorMinorPatch;]2.98.0
Run Code Online (Sandbox Code Playgroud)

但是,如果我就这样保留它,我会得到一个创建为“v$(GitVersion.MajorMinorPatch)”的标记,这意味着在创建标记时该变量不再存在。

标签格式帮助工具提示说

“标签格式可以是用户定义或预定义变量的组合,其范围为“全部”。例如:'$(Build.DefinitionName) $(Build.DefinitionVersion) $(Build.BuildId) $(Build .BuildNumber) $(My.Variable)'"

所以我猜问题是在管道期间创建的这个变量没有 All 的范围。

然后我尝试向“GitVersion.MajorMinorPatch”的管道添加一个管道变量,希望这是在正确的范围内,并希望当“task.setvariable”命令运行时,这会将这个变量值设置得更高范围变量。

在此处输入图片说明

但是在这种情况下,我只是创建了一个标签“v”。

所以我有点卡住了。不知何故,我需要能够在范围 ALL 上动态创建或设置一个变量,并使用我想在此处标记的值。

我真的很感激对此的任何想法。

gitversion azure-devops azure-pipelines

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

为什么工作项链接到同一构建管道中的多个构建?

我们遇到的情况是,我们的工作项被包含在许多构建中,并且没有足够的文档,我似乎无法弄清楚原因。想知道这里是否有人能对此有所启发。

示例场景是

  • 我们运行“发布流”分支策略(就像微软描述的 Azure DevOps 所做的那样)
  • Bug 30368 链接到一个功能分支,并通过 PR 2991 回到 master 并提交 cb9120d0。
  • 为此,PR 和分支的所有适当链接都已到位,因此 PR 和主提交都正确显示了工作项的链接
  • 我们创建了 master 的发布分支,30368 包含在 v2.97.0 构建管道中,并通过“集成到构建”(正确)链接到该构建
  • 构建 1 已创建
  • 然后,我们在发布测试期间在 v2.97.0 中遇到了一个错误(与错误 20368 无关),因此我们将修复后的主提交挑选到了发布分支中(根据发布流程指南)。
  • 我想知道这个 Cherry Pick 是我稍后描述的问题的原因
  • 当然,该工作项并未包含在 v2.97.0 的第二个版本中,仅包含具有相关修复的工作项
  • 构建 2 已创建
  • 所以到目前为止一切都很好。v2.97.0 版本是从 Build 2 部署的,所有链接都是正确的
  • 现在我们从 master 分支发布 v2.98 版本,并且发布管道进行另一个构建。
    • 构建 3
  • 由于某种原因,它确定 30368 也应该链接到此版本,并向 v2.98 版本添加“集成版本”?

我发现的唯一其他线索是与构建链接的提交有关。在这里我可以看到我得到以下内容

  • 构建1

    • 来自 e0faff8f (master 2019-12-02 提交版本 2.97 是从 分支出来的)
    • 到 db225f14(来自 PR 于 2019 年 11 月 …

azure-devops azure-pipelines

5
推荐指数
0
解决办法
819
查看次数

如何在 PowerShell 中将“命名”参数定义为 [ref](这次是真的)

我已经看到了这个,但是两个答案都没有真正回答在函数调用中使用命名参数的问题

这是针对 Powershell 7 的。没有工作流程。这次真的是命名参数了!这里的标准文档也没有涵盖。开始认为这是不可能的。

这是可行的,但它需要带有位置参数的括号,而不是命名参数

Function MyFunction ([ref][string]$MyRefParam) {
    $MyRefParam.Value = "newValue";
}
$myLocal = "oldValue"
Write-Host $myLocal  # Outputs: oldValue
MyFunction ([ref]$myLocal);
Write-Host $myLocal # Outputs: newValue
Run Code Online (Sandbox Code Playgroud)

当然,我们都知道调用 Powershell 函数的最佳方式是使用命名参数MyFunction -Arg1 23而不是位置参数MyFunction 23MyFunction(23)。这些不会通过我们的 Pull 请求!

但这不起作用

Function MyFunction ([ref][string]$MyRefParam) {
    $MyRefParam.Value = "newValue";
}
$myLocal = "oldValue"
Write-Host $myLocal  # Outputs: oldValue
MyFunction -MyRefParam ([ref]$myLocal) # Outputs Cannot process argument transformation on parameter 'MyRefParam'. Reference type …
Run Code Online (Sandbox Code Playgroud)

powershell

4
推荐指数
1
解决办法
600
查看次数

Format-List -force * 不显示 .net 对象的所有成员,即使 Get-Member 确实显示了它

希望有人能指出这一点,真的很烦人。

\n

我试图在 Powershell 7.1.3 中使用 Markdig 查找 MarkdownDocument 中的所有链接

\n

它是为 .NET 设计的,具有一组继承类,用于表示各种类型的 Markdown 文档。我正在使用一个简单的辅助 PS 包装器,它有助于使用通用方法,但我不认为这是一个原因。

\n

让我用一个简单的重现向您展示

\n
install-module psmarkdig # provides the Get-MdElement helper\n$doc = [Markdig.Parsers.MarkdownParser]::Parse('# blah`n`nHello [this is a link](linkpath.md)')\n$links = @(Get-MdElement $doc 'Markdig.Syntax.Inlines.LinkInline') # force even a single match to be an array\n
Run Code Online (Sandbox Code Playgroud)\n

好的,所以这包含一个链接

\n
> $links.Count\n1\n
Run Code Online (Sandbox Code Playgroud)\n

并且元素是我们期望的类型

\n
> $links[0].GetType()\nIsPublic IsSerial Name                                     BaseType\n-------- -------- ----                                     --------\nTrue     False    LinkInline                               Markdig.Syntax.Inlines.ContainerInline\n
Run Code Online (Sandbox Code Playgroud)\n

我可以看到有一个带有 Get-Member 的 IsImage 属性

\n
> Get-Member -InputObject $links[0]\n   TypeName: …
Run Code Online (Sandbox Code Playgroud)

powershell

3
推荐指数
1
解决办法
100
查看次数