在 VSTS Build 中为 Azure Bot Service/Azure Functions 解决方案设置构建管道
Setting up Build Pipeline for Azure Bot Service/Azure Functions solution in VSTS Build
我有一个 Azure 机器人服务解决方案,它在我的 VSTS Git 存储库中。
我在 visual studio 中使用 Task Runner 在本地机器上编译、运行 和调试代码。
同样,我想在我的 VSTS 构建管道中构建和编译代码,就像我们如何使用 Visual Studio 模板构建 .Net 应用程序
我对具有 C# 脚本文件的 Bot 服务项目非常陌生。
我看过 msdn 文档都提到了持续集成,它会直接 link 到我的 Git repo 分支。每当我提交代码时,它都会自动推送到我的 Azure Bot 服务,在这里我想确保我提交的代码应该在推送到 Azure Bot 服务之前进行编译。为此,我想设置一个构建管道。
任何人都知道如何为这种具有 C# 脚本文件的项目设置构建管道吗?
更新:
在我的本地 PC 上,我安装了 Azure Functions CLI 工具,以及 visual studio 的 Command Task Runner 扩展。我按照下面的 link 启用本地调试
enter link description here
Task 运行ner 运行ning debughost.cmd 文件在我的 Bot Service 代码中,它包含以下代码
@echo off
set size=0
call func settings list -data > %temp%\settings-list
call :filesize %temp%\settings-list
if NOT %size% == 0 goto show
@echo ----------------------------------------------------------------------
@echo To fetch your bot service settings run the following command:
@echo func azure functionapp fetch-app-settings [YOUR_BOT_SERVICE_NAME]
@echo func azure functionapp fetch-app-settings AthenaDevbvpn6xsu2tz6i
@echo ----------------------------------------------------------------------
goto start
:show
type %temp%\settings-list
erase %temp%\settings-list
:start
@func host start -p 3978
goto :eof
:filesize
set size=%~z1
exit /b 0
任务运行的输出是
对于Azure Bot Service,在VSTS中设置与你的仓库master分支的持续集成,对于VSTS中的仓库,你可以创建一个新的分支,比如Dev,然后与Dev分支一起工作并合并到master。之后代码将更新为azure。
简单步骤:
- 在 VSTS 中将持续集成设置为您的存储库(master 分支)
- 在 VSTS 中转到存储库的代码页
- Select 分支机构
- 点击新建分支(例如 dev)
- 将开发分支克隆到本地并使用它(例如修改)
- 将更改推送到远程 Dev 分支
- 创建构建定义
- 在“选项”选项卡中启用“允许脚本访问 OAuth 令牌”选项。
- 根据您在本地的构建方式添加构建应用程序的步骤(例如gulp)
- 添加命令行步骤
- 添加命令行步骤
- 添加命令行步骤
目前没有任何开箱即用的任务来编译 CSX 文件。以下是我可以为您的情况考虑的解决方法,但并不完美:
- Deploy your own build agent and then configure it by following the steps in the link you provided: Debugging C# bots built using the Azure Bot Service on Windows.
- 创建一个powershell脚本来调用Azure Function CLI来像"debughost.cmd"那样编译csx文件,并检查编译过程中是否有任何错误。
- 将 powershell 脚本上传到源代码管理中。
- 在构建定义中添加 powershell 脚本任务以调用您创建的 powershell 脚本。
- 保存构建定义并将其排队。
这是我创建的 powershell 脚本供您参考:
##Run Azure Func command to compile csx file
$compile = Start-Process 'func' -passthru -WorkingDirectory '.' -ArgumentList 'host start -p 3739' -RedirectStandardOutput 'output.txt'
##You need to set the sleep time base on the build time of your project
Start-Sleep -s 20
Stop-Process $compile -Force
Stop-Process -Name 'Func'
##Get the output from Func and check if there is error in the output
$boutput = Get-Content 'output.txt'
Write-Host 'Azure Function CLI Log:'
Write-Host '*****************************************************************************************************************************'
$boutput
Write-Host '*****************************************************************************************************************************'
$reg = "Function.compilation.error"
foreach($line in $boutput){
if($line -match $reg)
{
##Fail the task if function compilation error exist
Write-Host '##vso[task.logissue type=error]Error occur during function compilation'
Exit 1
}
}
Write-Host 'Function compilation success!'
如果编译失败你会得到这样的结果:
我有一个 Azure 机器人服务解决方案,它在我的 VSTS Git 存储库中。
我在 visual studio 中使用 Task Runner 在本地机器上编译、运行 和调试代码。
同样,我想在我的 VSTS 构建管道中构建和编译代码,就像我们如何使用 Visual Studio 模板构建 .Net 应用程序
我对具有 C# 脚本文件的 Bot 服务项目非常陌生。
我看过 msdn 文档都提到了持续集成,它会直接 link 到我的 Git repo 分支。每当我提交代码时,它都会自动推送到我的 Azure Bot 服务,在这里我想确保我提交的代码应该在推送到 Azure Bot 服务之前进行编译。为此,我想设置一个构建管道。
任何人都知道如何为这种具有 C# 脚本文件的项目设置构建管道吗?
更新:
在我的本地 PC 上,我安装了 Azure Functions CLI 工具,以及 visual studio 的 Command Task Runner 扩展。我按照下面的 link 启用本地调试 enter link description here
Task 运行ner 运行ning debughost.cmd 文件在我的 Bot Service 代码中,它包含以下代码
@echo off
set size=0
call func settings list -data > %temp%\settings-list
call :filesize %temp%\settings-list
if NOT %size% == 0 goto show
@echo ----------------------------------------------------------------------
@echo To fetch your bot service settings run the following command:
@echo func azure functionapp fetch-app-settings [YOUR_BOT_SERVICE_NAME]
@echo func azure functionapp fetch-app-settings AthenaDevbvpn6xsu2tz6i
@echo ----------------------------------------------------------------------
goto start
:show
type %temp%\settings-list
erase %temp%\settings-list
:start
@func host start -p 3978
goto :eof
:filesize
set size=%~z1
exit /b 0
任务运行的输出是
对于Azure Bot Service,在VSTS中设置与你的仓库master分支的持续集成,对于VSTS中的仓库,你可以创建一个新的分支,比如Dev,然后与Dev分支一起工作并合并到master。之后代码将更新为azure。
简单步骤:
- 在 VSTS 中将持续集成设置为您的存储库(master 分支)
- 在 VSTS 中转到存储库的代码页
- Select 分支机构
- 点击新建分支(例如 dev)
- 将开发分支克隆到本地并使用它(例如修改)
- 将更改推送到远程 Dev 分支
- 创建构建定义
- 在“选项”选项卡中启用“允许脚本访问 OAuth 令牌”选项。
- 根据您在本地的构建方式添加构建应用程序的步骤(例如gulp)
- 添加命令行步骤
- 添加命令行步骤
- 添加命令行步骤
目前没有任何开箱即用的任务来编译 CSX 文件。以下是我可以为您的情况考虑的解决方法,但并不完美:
- Deploy your own build agent and then configure it by following the steps in the link you provided: Debugging C# bots built using the Azure Bot Service on Windows.
- 创建一个powershell脚本来调用Azure Function CLI来像"debughost.cmd"那样编译csx文件,并检查编译过程中是否有任何错误。
- 将 powershell 脚本上传到源代码管理中。
- 在构建定义中添加 powershell 脚本任务以调用您创建的 powershell 脚本。
- 保存构建定义并将其排队。
这是我创建的 powershell 脚本供您参考:
##Run Azure Func command to compile csx file
$compile = Start-Process 'func' -passthru -WorkingDirectory '.' -ArgumentList 'host start -p 3739' -RedirectStandardOutput 'output.txt'
##You need to set the sleep time base on the build time of your project
Start-Sleep -s 20
Stop-Process $compile -Force
Stop-Process -Name 'Func'
##Get the output from Func and check if there is error in the output
$boutput = Get-Content 'output.txt'
Write-Host 'Azure Function CLI Log:'
Write-Host '*****************************************************************************************************************************'
$boutput
Write-Host '*****************************************************************************************************************************'
$reg = "Function.compilation.error"
foreach($line in $boutput){
if($line -match $reg)
{
##Fail the task if function compilation error exist
Write-Host '##vso[task.logissue type=error]Error occur during function compilation'
Exit 1
}
}
Write-Host 'Function compilation success!'
如果编译失败你会得到这样的结果: