我正在尝试使用由 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 上动态创建或设置一个变量,并使用我想在此处标记的值。
我真的很感激对此的任何想法。
我们遇到的情况是,我们的工作项被包含在许多构建中,并且没有足够的文档,我似乎无法弄清楚原因。想知道这里是否有人能对此有所启发。
示例场景是
我发现的唯一其他线索是与构建链接的提交有关。在这里我可以看到我得到以下内容
构建1
我已经看到了这个,但是两个答案都没有真正回答在函数调用中使用命名参数的问题
这是针对 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 23或MyFunction(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) 希望有人能指出这一点,真的很烦人。
\n我试图在 Powershell 7.1.3 中使用 Markdig 查找 MarkdownDocument 中的所有链接
\n它是为 .NET 设计的,具有一组继承类,用于表示各种类型的 Markdown 文档。我正在使用一个简单的辅助 PS 包装器,它有助于使用通用方法,但我不认为这是一个原因。
\n让我用一个简单的重现向您展示
\ninstall-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\nRun Code Online (Sandbox Code Playgroud)\n好的,所以这包含一个链接
\n> $links.Count\n1\nRun Code Online (Sandbox Code Playgroud)\n并且元素是我们期望的类型
\n> $links[0].GetType()\nIsPublic IsSerial Name BaseType\n-------- -------- ---- --------\nTrue False LinkInline Markdig.Syntax.Inlines.ContainerInline\nRun Code Online (Sandbox Code Playgroud)\n我可以看到有一个带有 Get-Member 的 IsImage 属性
\n> Get-Member -InputObject $links[0]\n TypeName: …Run Code Online (Sandbox Code Playgroud)