在 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 和指向正确项目路径的值。