在 visual studio 2017 预览版中使用 github 和 azure 函数项目进行持续部署
Continuous deployment with github and azure function project in visual studio 2017 preview
我正在尝试将 ci/cd 从 github 设置为 azure 函数
我在 git "https://github.com/AmitayStrijevski/AppFunctionTest".
中创建了一个 Azure 函数项目
我通过 visual studio 发布了一次,效果很好。
然后我将它连接到此处描述的 git 集线器 ci/cd
“https://docs.microsoft.com/en-us/azure/azure-functions/functions-continuous-deployment#continuous-deployment-requirements”。
当推送到 git 时,我可以看到它需要我的代码 "deploy" 但是当我查看函数时,我的新代码不存在并且日志显示以下消息
"Found solution 'D:\home\site\repository\HeyArnold\HeyArnold.sln' with no deployable projects. Deploying files instead."
我在这上面花了一天多的时间,非常感谢在这个问题上的帮助
在使用空网站并设置与 Azure 门户生成的相同文件夹结构时,我能够使用 github 部署
这仍然没有解决我的问题,因为我想使用 Azure 函数项目,但我认为值得一提
查看 <functionappname>.scm.azurewebsites.net/dev
以查看实际部署到 wwwroot
文件夹的文件。
我查看了您的 github 项目并注意到了一些事情:如果您正在使用 .cs
文件,您应该创建一个 precompiled function,您可以直接从VS部署。
但是,如果您改为使用 .csx
文件并希望能够从功能门户编辑代码,那么您拥有的结构是正确的 - 只需删除解决方案和 csproj 文件,我相信他们混淆了部署基础设施
我使用的是 VSTS 而不是 GitHub,但您可能仍然会发现这个 link here 有用。
在 VS2017 预览版中使用 Azure Functions 的工具扩展,以及本期中描述的构建步骤,我已经能够让这个 CI 管道与 Azure Functions 项目一起使用。 Josh Carlisle 在他的 blog.
上详细介绍了完成此操作的步骤和 运行
在咨询了 Microsoft 支持后,我收到了两个需要放在 .sln 文件夹中的文件,然后 git 部署就可以工作了
注意换行
:: 1.恢复nuget包
:: 2. 构建和发布
使用您的解决方案和项目实际名称
.部署
[config]
command = deploy.cmd
deployment.cmd
@if "%SCM_TRACE_LEVEL%" NEQ "4" @echo off
:: ----------------------
:: KUDU 部署脚本
:: 版本:1.0.15
:: ----------------------
::先决条件
:: --------------
:: 验证 node.js 已安装
其中节点 2>nul >nul
如果 %ERRORLEVEL% NEQ 0 (
echo 缺少 node.js 可执行文件,请安装 node.js,如果已安装,请确保可以从当前环境访问它。
转到错误
)
:: 设置
:: -----
设置本地启用延迟扩展
SET ARTIFACTS=%~dp0%..\artifacts
如果未定义 DEPLOYMENT_SOURCE (
SET DEPLOYMENT_SOURCE=%~dp0%.
)
如果未定义 DEPLOYMENT_TARGET (
SET DEPLOYMENT_TARGET=%ARTIFACTS%\wwwroot
)
如果未定义 NEXT_MANIFEST_PATH (
SET NEXT_MANIFEST_PATH=%ARTIFACTS%\清单
如果未定义 PREVIOUS_MANIFEST_PATH (
SET PREVIOUS_MANIFEST_PATH=%ARTIFACTS%\清单
)
)
如果未定义 KUDU_SYNC_CMD (
:: 安装 kudu 同步
echo 安装 Kudu Sync
调用 npm install kudusync -g --silent
如果!错误级别! NEQ 0 转到错误
:: 在本地 运行 "kuduSync" 也可以
SET KUDU_SYNC_CMD=%appdata%\npm\kuduSync.cmd
)
:::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::
:: 部署
:: ----------
echo 使用自定义脚本处理函数应用程序部署。
:: 1. 恢复 nuget 包
调用 :ExecuteCmd nuget.exe 恢复 "%DEPLOYMENT_SOURCE%\FunctionAppVS2017_3Preview.sln" -MSBuildPath "D:\Program Files (x86)\MSBuild-15.3-preview\MSBuild.0\Bin"
如果!错误级别! NEQ 0 转到错误
:: 2. 构建并发布
调用:ExecuteCmd "D:\Program Files (x86)\MSBuild-15.3-preview\MSBuild.0\Bin\MSBuild.exe" "%DEPLOYMENT_SOURCE%FunctionApp1\FunctionApp1.csproj" /p:DeployOnBuild=true /p:configuration=Release /p:publishurl="%DEPLOYMENT_TEMP%" %SCM_BUILD_ARGS%
如果!错误级别! NEQ 0 转到错误
:: 3.KuduSync
IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
调用:ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_TEMP%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd"
如果!错误级别! NEQ 0 转到错误
)
:::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::
转到结束
:: 执行错误时回显的命令例程
:执行命令
设置本地
设置 CMD=%*
调用 %CMD%
如果 "%ERRORLEVEL%" NEQ "0" 回显失败 exitCode=%ERRORLEVEL%, command=%CMD%
退出 /b %ERRORLEVEL%
:错误
结束本地
echo 网站部署期间发生错误。
调用:exitSetErrorLevel
调用:exitFromFunction 2>nul
:exitSetErrorLevel
退出 /b 1
:exitFromFunction
()
:结束
结束本地
echo 成功完成。
您可以 add a .deployment
-file 到存储库的 根目录 并将 Azure 和 Kudu 指向正确的项目路径:
[config]
project = src/PathToYourProject
或者您可以 add a Application settings in the Azure Portal 使用键 PROJECT
和指向正确项目路径的值。
我正在尝试将 ci/cd 从 github 设置为 azure 函数 我在 git "https://github.com/AmitayStrijevski/AppFunctionTest".
中创建了一个 Azure 函数项目我通过 visual studio 发布了一次,效果很好。
然后我将它连接到此处描述的 git 集线器 ci/cd “https://docs.microsoft.com/en-us/azure/azure-functions/functions-continuous-deployment#continuous-deployment-requirements”。
当推送到 git 时,我可以看到它需要我的代码 "deploy" 但是当我查看函数时,我的新代码不存在并且日志显示以下消息
"Found solution 'D:\home\site\repository\HeyArnold\HeyArnold.sln' with no deployable projects. Deploying files instead."
我在这上面花了一天多的时间,非常感谢在这个问题上的帮助
在使用空网站并设置与 Azure 门户生成的相同文件夹结构时,我能够使用 github 部署 这仍然没有解决我的问题,因为我想使用 Azure 函数项目,但我认为值得一提
查看 <functionappname>.scm.azurewebsites.net/dev
以查看实际部署到 wwwroot
文件夹的文件。
我查看了您的 github 项目并注意到了一些事情:如果您正在使用 .cs
文件,您应该创建一个 precompiled function,您可以直接从VS部署。
但是,如果您改为使用 .csx
文件并希望能够从功能门户编辑代码,那么您拥有的结构是正确的 - 只需删除解决方案和 csproj 文件,我相信他们混淆了部署基础设施
我使用的是 VSTS 而不是 GitHub,但您可能仍然会发现这个 link here 有用。
在 VS2017 预览版中使用 Azure Functions 的工具扩展,以及本期中描述的构建步骤,我已经能够让这个 CI 管道与 Azure Functions 项目一起使用。 Josh Carlisle 在他的 blog.
上详细介绍了完成此操作的步骤和 运行在咨询了 Microsoft 支持后,我收到了两个需要放在 .sln 文件夹中的文件,然后 git 部署就可以工作了
注意换行 :: 1.恢复nuget包 :: 2. 构建和发布 使用您的解决方案和项目实际名称
.部署
[config] command = deploy.cmd
deployment.cmd
@if "%SCM_TRACE_LEVEL%" NEQ "4" @echo off
:: ---------------------- :: KUDU 部署脚本 :: 版本:1.0.15 :: ----------------------
::先决条件 :: --------------
:: 验证 node.js 已安装 其中节点 2>nul >nul 如果 %ERRORLEVEL% NEQ 0 ( echo 缺少 node.js 可执行文件,请安装 node.js,如果已安装,请确保可以从当前环境访问它。 转到错误 )
:: 设置 :: -----
设置本地启用延迟扩展
SET ARTIFACTS=%~dp0%..\artifacts
如果未定义 DEPLOYMENT_SOURCE ( SET DEPLOYMENT_SOURCE=%~dp0%. )
如果未定义 DEPLOYMENT_TARGET ( SET DEPLOYMENT_TARGET=%ARTIFACTS%\wwwroot )
如果未定义 NEXT_MANIFEST_PATH ( SET NEXT_MANIFEST_PATH=%ARTIFACTS%\清单
如果未定义 PREVIOUS_MANIFEST_PATH ( SET PREVIOUS_MANIFEST_PATH=%ARTIFACTS%\清单 ) )
如果未定义 KUDU_SYNC_CMD ( :: 安装 kudu 同步 echo 安装 Kudu Sync 调用 npm install kudusync -g --silent 如果!错误级别! NEQ 0 转到错误
:: 在本地 运行 "kuduSync" 也可以 SET KUDU_SYNC_CMD=%appdata%\npm\kuduSync.cmd )
:::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::: :: 部署 :: ---------- echo 使用自定义脚本处理函数应用程序部署。
:: 1. 恢复 nuget 包 调用 :ExecuteCmd nuget.exe 恢复 "%DEPLOYMENT_SOURCE%\FunctionAppVS2017_3Preview.sln" -MSBuildPath "D:\Program Files (x86)\MSBuild-15.3-preview\MSBuild.0\Bin" 如果!错误级别! NEQ 0 转到错误
:: 2. 构建并发布 调用:ExecuteCmd "D:\Program Files (x86)\MSBuild-15.3-preview\MSBuild.0\Bin\MSBuild.exe" "%DEPLOYMENT_SOURCE%FunctionApp1\FunctionApp1.csproj" /p:DeployOnBuild=true /p:configuration=Release /p:publishurl="%DEPLOYMENT_TEMP%" %SCM_BUILD_ARGS% 如果!错误级别! NEQ 0 转到错误
:: 3.KuduSync IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" ( 调用:ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_TEMP%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd" 如果!错误级别! NEQ 0 转到错误 )
:::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::: 转到结束
:: 执行错误时回显的命令例程 :执行命令 设置本地 设置 CMD=%* 调用 %CMD% 如果 "%ERRORLEVEL%" NEQ "0" 回显失败 exitCode=%ERRORLEVEL%, command=%CMD% 退出 /b %ERRORLEVEL%
:错误 结束本地 echo 网站部署期间发生错误。 调用:exitSetErrorLevel 调用:exitFromFunction 2>nul
:exitSetErrorLevel 退出 /b 1
:exitFromFunction ()
:结束 结束本地 echo 成功完成。
您可以 add a .deployment
-file 到存储库的 根目录 并将 Azure 和 Kudu 指向正确的项目路径:
[config]
project = src/PathToYourProject
或者您可以 add a Application settings in the Azure Portal 使用键 PROJECT
和指向正确项目路径的值。