如何在部署到azure网站时在sql azure db上运行sql脚本

时间:2016-07-18 16:48:12

标签: azure azure-sql-database azure-web-sites azure-deployment

我有一个预先存在的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实际执行这些脚本。具体遵循以下步骤:

  1. 使用连接字符串
  2. 连接到sql azure db
  3. 在指定的文件夹中查找sql​​脚本并:
  4. 按特定顺序运行sql脚本(它们以数字开头,例如:015script.sql,016script.sql)
  5. 如果出现故障,会输出某种错误。

2 个答案:

答案 0 :(得分:1)

一般来说,您可以利用node.js脚本并将其定义到package.json中的deploy.cmd部分,并将自定义npm脚本配置到.deployment文件中,然后部署任务将调用自定义脚本。

请尝试以下步骤:

  1. deploy.cmd命令azure-cli
  2. 创建文件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 });
  3. 在您的应用程序中创建一个node.js脚本,该脚本可以处理SQL操作,例如: package.json
  4. 修改mssql,添加 { "engines": { "node": "5.9.1" }, "dependencies": { "mssql": "^3.3.0" }, "devDependencies": {}, "scripts": { "customscript": "node connection.js" }, } 模块并配置自定义脚本: deploy.cmd
  5. 修改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>
  6. 然后通过Git将您的应用程序部署到Azure,它将在部署任务期间运行自定义npm脚本,并将查询您的SQL。
  7. 如有任何疑问,请随时告诉我。

答案 1 :(得分:0)

好的,事实证明你可以直接在deploy.cmd中使用SqlCmd来做到这一点。以下是步骤(source):

  1. 在您的计算机上安装npm
  2. 运行以下命令npm install azure-cli -g
  3. for mvc4 web application run azure site deploymentscript --aspWAP mvc4\Mvc4WebApplication\Mvc4WebApplication.csproj -s Mvc4\Mvc4WebApplication.sln
  4. 这将创建.deployment和deploy.cmd文件。将它们添加到存储库的根目录。
  5. 我无法在下面找到一个好的来源,而且我在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中实际测试所有这些。