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