将Gitlab管道ID附加到.Net管道中的版本

3htmauhk  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(164)

我正在使用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将其附加到现有的版本号。

c9qzyr3d

c9qzyr3d1#

我不太确定msbuild,但因为它只是一个文件,所以你可以使用sed来执行搜索和替换。
假设示例中的版本来自管道可以使用变量的东西(例如git标签,每次版本更改时更新的CI变量等),您可以在AssemblyInfo.Version.cs文件中搜索该值,并替换它:

# ...
  script:
    - sed -i "s/${CI_COMMIT_TAG}/${CI_COMMIT_TAG}.${CI_PIPELINE_ID}/g" AssemblyInfo.Version.cs

字符串
sed命令:

  1. -i标志表示就地编辑文件。注意:在BSD系统上,-ilittle 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,但在管道列表中找不到它。

相关问题