我正在尝试从AWS CodeDeploy执行的脚本运行sqlpackage.exe
。
sqlpackage
命令从本地CMD提示中运行良好,当登录为管理员时,但在作为编码eploy管道的一部分时不运行。
发生以下错误:
An unexpected failure occurred: DacInstance with the specified instance_id does not exist..
Unhandled Exception: System.Data.SqlClient.SqlException: DacInstance with the specified instance_id does not exist.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
看来无法与数据库建立连接。
CodeDeploy以在Local System
帐户下运行的Windows服务运行,在我的命令提示符下,该作品在Administrator
帐户下运行。这是唯一的区别,所以我认为这必须是权限问题。
似乎需要由具有sysadmin
特权的用户安装DACPAC。我尝试(作为测试)将SQL Server用户NT AUTHORITYSYSTEM
设置为DBCreator
的角色。
然后,部署失败了以下错误。
The database settings cannot be modified. You must be a SysAdmin to apply these settings.
The database settings cannot be modified. You must be a SysAdmin to apply these settings.
An error occurred while the batch was being executed.
Updating database (Failed)
我不确定如何进行。我猜想使NT AUTHORITYSYSTEM
成为SysAdmin
是个坏主意!
编码EPLOY主机代理服务以当地系统用户运行,该服务应具有NT Authority System和Indualin Administrators特权。这就是编码eploy代理执行您的脚本的方式:
powershell.exe -ExecutionPolicy Bypass -File <absolute_path_to_your_script_here>
,如果将其放在部署软件包中的文件夹中,则可以尝试将可执行文件与appspec.yml文件一起放在根上。话虽这么说,我们似乎已经使用了较旧版本的主机代理商来解决这个问题,该版本应在2017年3月发布的最新版本中解决。