内联 yaml 管道脚本单独工作,但不能一起工作
Inline yaml pipeline scripts work separately, but not together
以下两个内联 yaml 管道 powershell 脚本:
- pwsh: (get-content -path $(versionHeader)) | foreach-object {$_ -replace "2.0.0.0", '$(major).$(minor).$(patch).0'} | set-content -path $(versionHeader)
displayName: 'Update build number in header file'
- pwsh: (get-content -path $(versionHeader)) | foreach-object {$_ -replace "20200101000000", (get-date -f 'yyyyMMddhhmmss')} | set-content -path $(versionHeader)
displayName: 'Update date in header file'
是为了走这两条线
[assembly: MyApp.Net.Attributes.AssemblyVersion("2.0.0.0")]
[assembly: MyApp.Net.Attributes.BuildDateAttribute("20200101000000")]
并将它们变成这两行(即在引号中放入新值)
[assembly: MyApp.Net.Attributes.AssemblyVersion("2.0.185.0")]
[assembly: MyApp.Net.Attributes.BuildDateAttribute("20200724013502")]
(替换值不同)
这两个脚本本身都可以正常工作。但是当我尝试使用 both 脚本时,一个接一个地,第二个值搞砸了。
[assembly: MyApp.Net.Attributes.AssemblyVersion("2.0.209.0")] // correct
[assembly: MyApp.Net.Attributes.BuildDateAttribute("202.0.209.000000")] // ?????
很明显,它们以某种方式相互干扰,但我不知道如何干扰。有人可以告诉我我做错了什么吗?
问题出在 powershell 的 -replace
- 它解释通配符,并且碰巧 20200101000000
匹配 2.0.0.0
:
PS> "20200101000000" -replace "2.0.0.0", "zzzzzz"
20zzzzzz00000
以下两个内联 yaml 管道 powershell 脚本:
- pwsh: (get-content -path $(versionHeader)) | foreach-object {$_ -replace "2.0.0.0", '$(major).$(minor).$(patch).0'} | set-content -path $(versionHeader)
displayName: 'Update build number in header file'
- pwsh: (get-content -path $(versionHeader)) | foreach-object {$_ -replace "20200101000000", (get-date -f 'yyyyMMddhhmmss')} | set-content -path $(versionHeader)
displayName: 'Update date in header file'
是为了走这两条线
[assembly: MyApp.Net.Attributes.AssemblyVersion("2.0.0.0")]
[assembly: MyApp.Net.Attributes.BuildDateAttribute("20200101000000")]
并将它们变成这两行(即在引号中放入新值)
[assembly: MyApp.Net.Attributes.AssemblyVersion("2.0.185.0")]
[assembly: MyApp.Net.Attributes.BuildDateAttribute("20200724013502")]
(替换值不同)
这两个脚本本身都可以正常工作。但是当我尝试使用 both 脚本时,一个接一个地,第二个值搞砸了。
[assembly: MyApp.Net.Attributes.AssemblyVersion("2.0.209.0")] // correct
[assembly: MyApp.Net.Attributes.BuildDateAttribute("202.0.209.000000")] // ?????
很明显,它们以某种方式相互干扰,但我不知道如何干扰。有人可以告诉我我做错了什么吗?
问题出在 powershell 的 -replace
- 它解释通配符,并且碰巧 20200101000000
匹配 2.0.0.0
:
PS> "20200101000000" -replace "2.0.0.0", "zzzzzz"
20zzzzzz00000