我有一个预先存在的sql-azure数据库和一个azure-website设置,它会在每次bitbucket推送时自动部署。现在,我希望在每个版本的db中更改每个部署时,按特定顺序运行我在特定文件夹中的一些.sql脚本。我将如何在Azure中执行此操作?
我已阅读本指南:https://github.com/projectkudu/kudu/wiki/Custom-Deployment-Script,我了解运行deploy.cmd
命令时需要修改的azure-cli
文件。只是想知道在那里为sql更改添加什么。我已经有sql azure db的连接字符串,其中包含我可以使用的用户名和密码。只需要知道如何针对sql azure db实际执行这些脚本。具体遵循以下步骤:
答案 0 :(得分:1)
一般来说,您可以利用node.js脚本并将其定义到package.json
中的deploy.cmd
部分,并将自定义npm脚本配置到.deployment
文件中,然后部署任务将调用自定义脚本。
请尝试以下步骤:
deploy.cmd
命令azure-cli
azure site deploymentscript --node --sitePath nodejs
和
var sql = require('mssql');
var config = {
user: '<user>',
password: '<pwd>',
server: '<database_server>.database.windows.net', // You can use 'localhost\\instance' to connect to named instance
database: '<databasename>',
options: {
encrypt: true // Use this if you're on Windows Azure
}
}
var connection = new sql.Connection(config, function(err) {
var request = new sql.Request(connection); // or: var request = connection.request();
request.query("insert into dbo.todoitem (text) values ('test string')", function(err, recordset) {
// ... error checks
console.log(err);
console.dir(recordset);
process.exit();
});
});
connection.on('error', function(err) {
// ... error handler
});
package.json
mssql
,添加
{
"engines": {
"node": "5.9.1"
},
"dependencies": {
"mssql": "^3.3.0"
},
"devDependencies": {},
"scripts": {
"customscript": "node connection.js"
},
}
模块并配置自定义脚本:
deploy.cmd
npm run customscript
以添加在Azure部署任务期间调用deploy.cmd
命令的步骤,在原始
:: 3. Install npm packages
IF EXIST "%DEPLOYMENT_TARGET%\package.json" (
pushd "%DEPLOYMENT_TARGET%"
call :ExecuteCmd !NPM_CMD! install --production
IF !ERRORLEVEL! NEQ 0 goto error
popd
)
文件中,您可以找到安装node.js模块的句子:
echo npm customscript
call :ExecuteCmd !NPM_CMD! run customscript
<nav class="navbar navbar-inverse navbar-fixed-top" id="my-navbar">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="https://www.hemsleyfraser.co.uk/" class="navbar-brand">Hemsley Fraser</a>
</div>
<div class="collapse navbar-collapse" id="navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="home.html">Topics</a></li>
<li><a href="">About</a></li>
<li><a href="">Contact Us</a></li>
</ul>
</div>
</div>
如有任何疑问,请随时告诉我。
答案 1 :(得分:0)
好的,事实证明你可以直接在deploy.cmd中使用SqlCmd来做到这一点。以下是步骤(source):
npm install azure-cli -g
azure site deploymentscript --aspWAP mvc4\Mvc4WebApplication\Mvc4WebApplication.csproj -s Mvc4\Mvc4WebApplication.sln
我无法在下面找到一个好的来源,而且我在Kudu cmd工具上测试时很幸运:
修改Deployment
部分下的deploy.cmd部分,添加如下内容:
set dbName=mydb
set sqlRunner=sqlcmd
set dbServer=tcp:myorg.database.windows.net,1433
set currentdir=%cd%
set username=myusername
set password=mypassword
for %%F IN ("%currentdir%\DBScripts\05.Changes\*.sql") do (
@echo %%F
%sqlRunner% -S "%dbServer%" -U %username% -P %password% -d %dbName% -i "%%F" -b
if ERRORLEVEL 1 GOTO ERROR
)
此处的密钥是sqlcmd
的可用性。这就是我想要的。你可以从Kudu Cmd Tool中实际测试所有这些。