【问题标题】:adding and using an MDF in a DevOps Pipeline unit test在 DevOps Pipeline 单元测试中添加和使用 MDF
【发布时间】:2020-11-09 16:48:58
【问题描述】:

我想使用.MDF SQL Server 数据库文件,在通过 DevOps 管道部署时,我在 Visual Studio 测试期间对其执行单元测试。

我将.MDF.LDF 文件添加到单元测试项目中,并且可以在本地执行。我已使用列出文件夹内容的 PowerShell 脚本确认文件已正确部署到管道。我还通过确保所有内容都是大写来确认区分大小写。

将 Visual Studio 测试步骤添加到现有工作管道时,我最初在测试初始化​​期间尝试保存到数据库时收到此错误:

Microsoft.Data.SqlClient.SqlException:无法更新数据库“D:\A\1\S\APPCORETESTS\BIN\RELEASE\NETCOREAPP3.1\MYTESTDATABASE.MDF”,因为数据库是只读的

我在测试初始化​​期间添加了以下调用:

ALTER DATABASE [MYTESTDATABASE.MDF] SET READ_WRITE

现在出现以下错误:

无法打开物理文件“D:\a\1\s\AppCoreTests\bin\Release\netcoreapp3.1\MYTESTDATABASE.mdf”。操作系统错误5:“5(拒绝访问。)”

无法打开物理文件“D:\a\1\s\AppCoreTests\bin\Release\netcoreapp3.1\myTestDatabase_log.ldf”。操作系统错误 5:“5(拒绝访问。)”。

我可以使用以下连接字符串(来自配置,因此两个反斜杠“\”)打开到 .MDF 文件的连接:

"Server=(LocalDB)\\MSSQLLocalDB;AttachDbFileName='|DataDirectory|\\MYTESTDATABASE.MDF'"

并且我能够运行一个返回多个数据库的查询,包括我的(以及 tempdb、master 等):

select name from sys.databases

如果此错误发生在本地,我将为 .MDF / .LDF 所在的文件夹设置文件夹权限,但不知道这在 DevOps 管道中是否可行,或者是否是正确的方法来解决这个问题。

【问题讨论】:

    标签: azure-devops mdf


    【解决方案1】:

    您使用的是哪个代理,托管代理还是自托管代理?

    Azure DevOps Pipeline 通过服务账户访问文件,我们应该检查服务账户的权限并确保它有足够的权限。

    如果您使用托管代理,它通过此帐户test Build Service(Org name)访问文件,我们需要打开项目设置->存储库->选择repo并检查服务帐户test Build Service ({Org name})权限,并检查管道- >设置

    如果您使用自托管代理并访问本地文件,则应检查文件权限。步骤:选择local->Properties->Security,服务账号名应该是Administrators(Agent service name\Administrators)或者Users(Agent service name\Users)。

    顺便说一句,我们可以将代理服务帐户更改为您的所有者帐户。

    步骤:在代理机器上打开服务,搜索代理服务账号,查看下图,将账号名和密码改成你的,就会使用这个账号进行操作。

    【讨论】:

    • 我正在使用托管代理。我可以通过 Settings->[repo]->Permissions 看到“test Build Service ({Org name})”用户,但没有看到任何特定于我需要的权限:|完成拉取请求时绕过策略|何时绕过策略推送|贡献|参与拉取请求|创建分支|创建标签|删除存储库|编辑策略|强制推送|管理注释|管理权限|读取|删除其他锁|重命名​​存储库
    猜你喜欢
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2020-08-30
    • 2021-06-09
    相关资源
    最近更新 更多