如何使用 git 部署的 Windows Azure 网站呈现内部版本号/哈希?
How can you render a build number / hash with a git-deployed Windows Azure Website?
我在 azure 上有一个网站,我通过 git (kudu) 部署了它。我希望能够在页脚中显示当前部署的 git 哈希 - 这可能吗?
我想我正在寻找的是在 git 拉取之后但在编译之前连接到 kudu 以编辑 CS 文件的某种方法 - 这在 WAWS 上可行吗?
找到方法:您可以按照 https://github.com/projectkudu/kudu/wiki/Deployment-hooks
中的说明连接到 kudu
为了将 git 哈希值放入我添加的文件中
git rev-parse --short HEAD > "%DEPLOYMENT_TARGET%\version.txt"
到 cmd 文件的 post 部署区域。如果我想对 CS 文件做一些事情,我可以在编译之前这样做,很明显 azure cli 生成的部署脚本正在尝试做什么。
使用自定义部署脚本的方法可能行得通。请参阅 here 上的一些相关讨论。在部署期间,Kudu 创建一个包含提交 ID 的 %home%\site\deployments\active
文件,因此您可以在运行时读取它。
在我们的解决方案 (ASP.NET MVC) 中,我们添加了一个始终作为第一个项目构建的附加项目。该项目引用了 nuget 包 'GitSharp',它是一个托管的 .NET Git 客户端库。附加项目的输出是一个命令行工具,我们称之为 VersionNumberGenerator.exe.
在这个附加项目的 post-build 事件中,我们执行 VersionNumberGenerator.exe。这会生成一个文件 AssemblyInfoShared.cs,其中还包含 class 的源代码,其中包含 Git 提交 ID 作为常量。我们使用 'GitSharp' 以编程方式获取提交 ID。这是一个片段:
// Use relative path to .gitignore for the following statement
using (var repo = new Repository(".\..\..\..")) {
shortHead = repo.Head.CurrentCommit.ShortHash;
// shortHead now contains the git commit id
}
然后所有其他项目通过 link 引用文件 AssemblyInfoShared.cs 以避免重复。因此,这些其他项目中的每一个都可以在需要的地方显示 Git 提交 ID,包括一个文件 _Layout.cshtml,它可以在页脚中显示提交 ID。
此解决方案结合 Kudu 的自定义部署脚本适用于 Azure 网站。它也可能适用于其他使用 Kudu 的场景。重要的是首先构建附加项目,这样它也会执行 post-构建步骤。在本地构建解决方案就足够了。
我们在很多项目中都使用了这种方法。 https://app.storkk.com
提供了一个示例
补充说明:
- 撰写本文时 GitSharp 已经有一段时间没有进行维护了。但是,目前它似乎工作得很好。
- 您可能需要考虑将 AssemblyInfoShared.cs 从版本控制中排除,因为它将在每次构建期间重新生成。
- 您可能需要在解决方案中手动设置依赖关系,以确保项目按正确的顺序构建。
我在 azure 上有一个网站,我通过 git (kudu) 部署了它。我希望能够在页脚中显示当前部署的 git 哈希 - 这可能吗?
我想我正在寻找的是在 git 拉取之后但在编译之前连接到 kudu 以编辑 CS 文件的某种方法 - 这在 WAWS 上可行吗?
找到方法:您可以按照 https://github.com/projectkudu/kudu/wiki/Deployment-hooks
中的说明连接到 kudu为了将 git 哈希值放入我添加的文件中
git rev-parse --short HEAD > "%DEPLOYMENT_TARGET%\version.txt"
到 cmd 文件的 post 部署区域。如果我想对 CS 文件做一些事情,我可以在编译之前这样做,很明显 azure cli 生成的部署脚本正在尝试做什么。
使用自定义部署脚本的方法可能行得通。请参阅 here 上的一些相关讨论。在部署期间,Kudu 创建一个包含提交 ID 的 %home%\site\deployments\active
文件,因此您可以在运行时读取它。
在我们的解决方案 (ASP.NET MVC) 中,我们添加了一个始终作为第一个项目构建的附加项目。该项目引用了 nuget 包 'GitSharp',它是一个托管的 .NET Git 客户端库。附加项目的输出是一个命令行工具,我们称之为 VersionNumberGenerator.exe.
在这个附加项目的 post-build 事件中,我们执行 VersionNumberGenerator.exe。这会生成一个文件 AssemblyInfoShared.cs,其中还包含 class 的源代码,其中包含 Git 提交 ID 作为常量。我们使用 'GitSharp' 以编程方式获取提交 ID。这是一个片段:
// Use relative path to .gitignore for the following statement
using (var repo = new Repository(".\..\..\..")) {
shortHead = repo.Head.CurrentCommit.ShortHash;
// shortHead now contains the git commit id
}
然后所有其他项目通过 link 引用文件 AssemblyInfoShared.cs 以避免重复。因此,这些其他项目中的每一个都可以在需要的地方显示 Git 提交 ID,包括一个文件 _Layout.cshtml,它可以在页脚中显示提交 ID。
此解决方案结合 Kudu 的自定义部署脚本适用于 Azure 网站。它也可能适用于其他使用 Kudu 的场景。重要的是首先构建附加项目,这样它也会执行 post-构建步骤。在本地构建解决方案就足够了。
我们在很多项目中都使用了这种方法。 https://app.storkk.com
提供了一个示例补充说明:
- 撰写本文时 GitSharp 已经有一段时间没有进行维护了。但是,目前它似乎工作得很好。
- 您可能需要考虑将 AssemblyInfoShared.cs 从版本控制中排除,因为它将在每次构建期间重新生成。
- 您可能需要在解决方案中手动设置依赖关系,以确保项目按正确的顺序构建。