在visual studio 2017预览中使用github和azure功能项目进行持续部署

时间:2017-05-25 12:07:58

标签: azure visual-studio-2017 azure-functions

我正在尝试将ci / cd从github设置为azure函数 我在git" https://github.com/AmitayStrijevski/AppFunctionTest"。

中创建了一个Azure功能项目

我通过视觉工作室发布了一次,效果很好。

然后我把它连接到这里描述的github ci / cd " https://docs.microsoft.com/en-us/azure/azure-functions/functions-continuous-deployment#continuous-deployment-requirements"

当推送到git时,我可以看到它需要我的代码和"部署"但是当我查看这些函数时,我的新代码不在那里,日志显示以下消息

"找到解决方案' D:\ home \ site \ repository \ HeyArnold \ HeyArnold.sln'没有可部署的项目。改为部署文件。"

我在这上花了一天多的时间,我真的很感激这个问题的帮助

在使用空网站并设置由azure门户网站生成的相同文件夹结构时,我能够使用github部署 这仍然没有解决我的问题,因为我想使用Azure功能项目,但我认为值得一提

4 个答案:

答案 0 :(得分:2)

查看<functionappname>.scm.azurewebsites.net/dev以查看实际部署到wwwroot文件夹的文件。

我看了一下你的github项目,我注意到了一些事情:如果你使用.cs文件,你应该创建一个precompiled function,你可以直接从VS部署。

但是,如果您正在使用.csx文件并希望能够从函数门户编辑代码,那么您所拥有的结构是正确的 - 只需删除解决方案和csproj文件,因为我相信它们是混淆部署基础架构

答案 1 :(得分:2)

在咨询Microsoft支持后,我收到了两个需要放在.sln文件夹中的文件,然后git部署就可以了

请注意更换线条 :: 1.恢复nuget包 :: 2.构建和发布 使用您的解决方案和项目实际名称

  • .deployment

    [config] command = deploy.cmd

  • deployment.cmd

    @if&#34;%SCM_TRACE_LEVEL%&#34; NEQ&#34; 4&#34; @echo off

    :: ---------------------- :: KUDU部署脚本 ::版本:1.0.15 :: ----------------------

    ::先决条件 :: -------------

    ::验证已安装node.js. 其中节点2> nul&gt; nul IF%ERRORLEVEL%NEQ 0(   echo缺少node.js可执行文件,请安装node.js,如果已安装,请确保可以从当前环境到达。   转到错误 )

    ::设置 :: -----

    setlocal enabledelayedexpansion

    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%\ manifest

    如果没有定义PREVIOUS_MANIFEST_PATH(     SET PREVIOUS_MANIFEST_PATH =%ARTIFACTS%\ manifest   ) )

    如果没有定义KUDU_SYNC_CMD(   ::安装kudu同步   echo安装Kudu Sync   调用npm install kudusync -g --silent   如果!ERRORLEVEL! NEQ 0转到错误

    ::本地运行&#34; kuduSync&#34;也会有用   SET KUDU_SYNC_CMD =%appdata%\ npm \ kuduSync.cmd )

    ::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::: ::部署 :: ---------- echo handle功能使用自定义脚本进行应用程序部署。

    :: 1.恢复nuget包 call:ExecuteCmd nuget.exe restore&#34;%DEPLOYMENT_SOURCE%\ FunctionAppVS2017_3Preview.sln&#34; -MSBuildPath&#34; D:\ Program Files(x86)\ MSBuild-15.3-preview \ MSBuild \ 15.0 \ Bin&#34; 如果!ERRORLEVEL! NEQ 0转到错误

    :: 2.构建并发布 call:ExecuteCmd&#34; D:\ Program Files(x86)\ MSBuild-15.3-preview \ MSBuild \ 15.0 \ Bin \ MSBuild.exe&#34; &#34;%DEPLOYMENT_SOURCE%FunctionApp1 \ FunctionApp1.csproj&#34; / p:DeployOnBuild = true / p:configuration = Release / p:publishurl =&#34;%DEPLOYMENT_TEMP%&#34; %SCM_BUILD_ARGS% 如果!ERRORLEVEL! NEQ 0转到错误

    :: 3. KuduSync IF / I&#34;%IN_PLACE_DEPLOYMENT%&#34; NEQ&#34; 1&#34; (   call:ExecuteCmd&#34;%KUDU_SYNC_CMD%&#34; -v 50 -f&#34;%DEPLOYMENT_TEMP%&#34; -t&#34;%DEPLOYMENT_TARGET%&#34; -n&#34;%NEXT_MANIFEST_PATH%&#34; -p&#34;%PREVIOUS_MANIFEST_PATH%&#34; -i&#34; .git; .hg; .deployment; deploy.cmd&#34;   如果!ERRORLEVEL! NEQ 0转到错误 )

    ::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::: 转到最后

    ::执行错误时将回显的命令例程 :ExecuteCmd SETLOCAL 设置 CMD =%* 致电% CMD % 如果&#34;%ERRORLEVEL%&#34; NEQ&#34; 0&#34; echo失败exitCode =%ERRORLEVEL%,command =% CMD % 退出/ b%ERRORLEVEL%

    :错误 ENDLOCAL echo网站部署期间发生错误。 call:exitSetErrorLevel call:exitFromFunction 2&gt; nul

    :exitSetErrorLevel 退出/ b 1

    :exitFromFunction ()

    :端 ENDLOCAL echo成功完成。

答案 2 :(得分:0)

我使用的是VSTS而不是GitHub,但您仍然可以找到此链接here

在VS2017预览中使用Azure功能的工具扩展,以及本期中描述的构建步骤,我已经能够使用Azure功能项目获得此CI管道。 Josh Carlisle详细介绍了在blog上完成并运行的步骤。

答案 3 :(得分:0)

您可add a .deployment-file根目录,并将Azure和Kudu指向正确的项目路径:

import UIKit import MapKit import CoreLocation class ViewController: UIViewController { @IBOutlet weak var mapView: MKMapView! var location : ICDLocationModel? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. location = SCFileManager.readJsonFile(file: "location") as ICDLocationModel self.determineCurrentLocation() let latDelta: CLLocationDegrees = 0.05 let lonDelta: CLLocationDegrees = 0.05 let span = MKCoordinateSpan(latitudeDelta: latDelta, longitudeDelta: lonDelta) //create location print("Location : \(location) \n\n ") let mapCenter = CLLocationCoordinate2DMake(location!.latitude!, location!.longitude!) print("mapCenter : \(mapCenter) \n\n ") let region = MKCoordinateRegion(center: mapCenter, span: span) print("region : \(region) \n\n ") //set map view to specified locaiton self.mapView.setRegion(region, animated: true) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) } }

或者您可以add a Application settings in the Azure Portal使用键[config] project = src/PathToYourProject,并指向正确的项目路径。