我正在使用Gitlab管道构建和发布我的应用程序。我们在AssemblyInfo.Version.cs文件中指定我们的版本:
[assembly: AssemblyVersion("1.0.1")]
[assembly: AssemblyFileVersion("1.0.1")]
[assembly: AssemblyInformationalVersion("1.0.1")]
字符串
我正在寻找一种方法来将Gitlab pipeline ID附加到这个版本字符串的末尾。因此,发布后,生成的DLL的版本将变为:
1.0.1.7226532
型
如果可能的话,这应该只使用msbuild命令行工具来完成,所以没有导入目标文件或任何东西。
我已经从Gitlab中找到了环境变量,在那里我可以读取管道ID:
CI_PIPELINE_IID
型
现在我只需要使用msbuild将其附加到现有的版本号。
1条答案
按热度按时间c9qzyr3d1#
我不太确定
msbuild
,但因为它只是一个文件,所以你可以使用sed
来执行搜索和替换。假设示例中的版本来自管道可以使用变量的东西(例如git标签,每次版本更改时更新的CI变量等),您可以在
AssemblyInfo.Version.cs
文件中搜索该值,并替换它:字符串
sed
命令:-i
标志表示就地编辑文件。注意:在BSD系统上,-i
与little differently工作1.参数开头的
s
告诉sed
我们要做一个 * 替换 ,然后将参数之间的字符串设置为/
(如果有冲突,可以将其更改为其他字符)。1.我们搜索第一个参数
${CI_COMMIT_TAG}
1.并将其替换为
${CI_COMMIT_TAG}.${CI_PIPELINE_ID}
1.最后的
/g
表示替换文件中搜索字符串的所有示例,而不仅仅是第一个示例1.最后,我们提供要搜索/替换的文件
顺便说一下,我建议不要使用
$CI_PIPELINE_IID
变量,因为它是项目特定的ID,而不是$CI_PIPELINE_ID
,它是示例范围的管道ID。在GitLab中的某些项目中,你希望使用IID
版本,例如合并请求,问题等,因为IID是UI中显示的内容。例如,对于问题,它既有示例范围的ISSUE_ID
,也有项目特定的ISSUE_IID
。由于IID
显示在UI中,因此用户可以快速地将这两个对象可视化地Map在一起。然而,GitLab对管道的做法恰恰相反:示例范围的
CI_PIPELINE_ID
显示在UI中, 而不是 * 项目特定的CI_PIPELINE_IID
。在您的用例中使用
$CI_PIPELINE_IID
可能会导致一些混乱,因为您可能会查看AssemblyInfo.Version.cs
文件,看到ID,但在管道列表中找不到它。