Azure Pipelines - логирование команд из SQL скрипта - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь зарегистрировать некоторые сообщения из сценария T SQL, запущенного через Azure Pipelines, например, перед созданием таблицы мы проверяем, существует ли уже таблица, и если да, мы просто печатаем сообщение и пропускаем создание таблицы. ..

есть хорошие статьи, объясняющие, как получить доступ к Azure командам ведения журнала конвейеров из BASH или PowerShell, например, эта статья: https://docs.microsoft.com/en-us/azure/devops/pipelines/scripts/logging-commands?view=azure-devops&tabs=bash

но как выводить сообщения в журналы конвейера из самого оператора T SQL?

Я попробую с помощью RAISERROR (например, RAISERROR('Table [dbo].[ReportHistory] already exists!', 0, 1) WITH NOWAIT;), надеюсь, работает лучше, чем команда PRINT, у кого-нибудь была подобная проблема и как он разрешить это?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы можете использовать Azure Команды протоколирования конвейеров вместе с командами PRINT и RAISERROR.

Синтаксис команд протоколирования ##vso[task..] - это зарезервированные ключевые слова в Azure DevOps piplines. Когда ##vso[task..] обнаруживается в потоке вывода задач, конвейер Azure DevOps будет выполнять команды ведения журнала.

Так что вы можете выводить сообщения в журналы конвейера из оператора T SQL с помощью команд ведения журнала. с PRINT или RAISERROR. См. Пример ниже:

PRINT N'##vso[task.logissue type=warning]Table already exists.';

RAISERROR('##vso[task.logissue type=warning]Table [dbo].[ReportHistory] already exists!',0,1);

См. Ниже выходные сообщения в журнале конвейера :

enter image description here

1 голос
/ 17 июня 2020

Вы можете запускать свои скрипты через PowerShell Invoke-Sqlcmd с ключом -Verbose. Вот небольшой пример для задачи PowerShell:

$server = "$(servername)"
$dbname = "$(dbname)"
$u = "$(username)"
$p = "$(password)"
$filename = "testfile.sql"

$filecontent = "RAISERROR('Table [dbo].[ReportHistory] already exists!', 0, 1) WITH NOWAIT;`r`nGO`r`n"

Set-Content -Path $filename -Value $filecontent

Write-Host '##[command] Executing file... ', $filename    

#Execution of SQL packet 
try 
{
    Invoke-Sqlcmd -InputFile "$filename" -ServerInstance $server -Database $dbname -Username "$u" -Password "$p" -QueryTimeout 36000 -Verbose 
} 
catch 
{ 
    Write-Host "##[error]" $Error[0] 
    Write-Host "##[error]----------\n"
} 

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...