【问题标题】:Allow VSTS to update test database允许 VSTS 更新测试数据库
【发布时间】:2017-04-14 09:38:46
【问题描述】:

为了运行我的验收测试,我需要在 SQL Azure 上运行的数据库上定义一个已知的良好状态。我的测试在本地运行良好,并设置了连接字符串来更新我在 Azure PaaS 上的 SQL 实例。测试将在使用 VSTS 部署数据库后运行。为了让部署过程运行我的验收测试,我需要运行 Visual Studio 团队系统测试的过程才能访问数据库。 VSTS 显然在美国东部 Azure 区域运行。鉴于我可能需要将数百个 IP 地址列入白名单,是否有更安全的方法来执行此操作,获取部署过程的 IP 地址,然后在部署过程中允许该 IP 地址访问数据库?

【问题讨论】:

  • 开启Allow Scripts to Access OAuth Token后的结果是什么?

标签: azure-pipelines azure-pipelines-release-pipeline


【解决方案1】:

您可以通过调用New-AzureRmSqlServerFirewallRuleRemove-AzureRmSqlServerFirewallRule powershell command来添加和删除防火墙规则。

在构建/发布期间请参阅下面的这些线程:Deploy Dacpac packages via power shell script to Azure SQL Server

首先,您需要添加防火墙规则才能连接到 Azure SQL 服务器。

1.编辑您的构建定义

2.选择选项选项卡并选中允许脚本访问 OAuth 令牌

3.添加 Azure PowerShell 步骤(参数:-RestAddress https://[account].vsdtl.visualstudio.com/DefaultCollection/_apis/vslabs/ipaddress -Token $(System.AccessToken) -RG [资源组] -Server [服务器名称] -ruleName $(Build.BuildNumber)

代码:

param (
    [string]$RestAddress,
    [string]$Token,
    [string]$RG,
    [string]$Server
    )
$basicAuth = ("{0}:{1}" -f 'test',$Token)
$basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth = [System.Convert]::ToBase64String($basicAuth)
$headers = @{Authorization=("Basic {0}" -f $basicAuth)}
$result = Invoke-RestMethod -Uri $RestAddress -headers $headers -Method Get
Write-Host $result.value
New-AzureRmSqlServerFirewallRule -ResourceGroupName $RG -ServerName $Server -FirewallRuleName "UnitTestRule" -StartIpAddress "$($result.value)" -EndIpAddress "$($result.value)"  

更新:

允许脚本访问 OAuth 令牌以进行发布:

  1. 编辑发布定义
  2. 单击在代理上运行
  3. 选中允许脚本访问 OAuth 令牌选项

【讨论】:

  • 嗨,我需要在我的部署中运行它。我已经按照你说的做了,但它失败了,“The term 'System.AccessToken' is not识别为cmdlet、函数、脚本文件或可运行程序的名称”。我想是因为我在构建而不是发布时检查了“允许脚本访问 OAuth 令牌”。无论如何要在发布时这样做吗?我想我需要 sql server 存在才能授予防火墙访问权限?
  • @johnstaveley 1.编辑发布定义 2.单击在代理上运行 3.检查允许脚本访问 OAuth 令牌选项我更新了我的答案。
  • 我遇到了一个问题,但是 Azure 对你可以运行的 powershell 脚本的长度提供了如此可悲的限制,导致调试出现问题
  • 我认为您需要修改脚本以包含为防火墙规则设置的唯一名称。这样部署就变得幂等了。如果您重新部署规则“UnitTestName”,它会失败
  • @johnstaveley 是的,它应该是一个唯一的名称,这只是一个示例,您可以使用构建编号,也可以在构建结束时删除规则。另一方面,powershell脚本长度的可悲限制的详细错误消息是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2020-09-08
  • 2020-03-22
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多