我们有一个带有 Web 角色和辅助角色的 Azure 云服务。我们想在 Visual Studio Team Services 中设置持续交付,在源代码签入时自动将构建推送到 Azure。(质量保证环境)。源代码在 Github。最好不要将机密签入到 Github,因此我们只签入 .csdef 文件,而不是 .cscfg 文件。
在 VSTS 中创建构建定义的最佳方法是什么,它将从其他位置获取 .cscfg 文件并创建云服务包?在哪里存储 .cscfg 文件以及如何配置构建?
我们有一个带有 Web 角色和辅助角色的 Azure 云服务。我们想在 Visual Studio Team Services 中设置持续交付,在源代码签入时自动将构建推送到 Azure。(质量保证环境)。源代码在 Github。最好不要将机密签入到 Github,因此我们只签入 .csdef 文件,而不是 .cscfg 文件。
在 VSTS 中创建构建定义的最佳方法是什么,它将从其他位置获取 .cscfg 文件并创建云服务包?在哪里存储 .cscfg 文件以及如何配置构建?
解决方案:最终使用自定义 PowerShell 脚本将.cscfg
文件中的配置值替换为 VSTS 变量。配置 PowerShell 脚本根据发布管理管道中定义的环境运行。注意:定义为机密的变量必须作为参数传递给 PowerShell 脚本,因为 PowerShell 脚本无法使用以下方法访问这些参数$Env:
我们使用Replace tokens
VSTS 中可用的任务
您还可以指定字符串替换的前缀和后缀。
然后在您的 中ServiceConfiguration.Cloud.cscfg
,您将使用定义的前缀和后缀来指示要替换的字符串。的值将取自Variables
您在 VSTS 中定义的值。然后,您将为此设置的变量名称放在前缀和后缀之间。
ServiceConfiguration.Cloud.cscfg
将被Password
变量替换的文件示例。
<Setting name="SqlPassword" value="#{Password}#" />
这可用于转换/替换任何配置文件中的任何字符串。需要注意的一点是,在某些配置文件中,架构会验证特定设置的值。
例如云服务中带有ServiceConfiguration
' 的Certificate
设置。该值必须是有效的证书指纹(即任何数字 0-9 和/或字母 AF,小写和大写)。如果该值不满足架构要求,则服务配置架构定义了这一点并且构建将失败。
为了解决这个问题,我们在 Release 中有另一个任务来替换证书。其前缀/后缀可能分别类似于abc
和def
。变量的名称将是001
. 不幸的是,它没有描述性,因为它必须是有效的证书指纹。
<Certificate name="MainSSL" thumbprint="abc001def" thumbprintAlgorithm="sha1" />