2017-08-05 101 views
1

我目前已经使用EF部署了一个ASP.NET Core Web应用程序,该应用程序正在部署到使用Web部署的GearHost(此处由用户推荐的非Azure云平台)直接从Visual Studio发布配置文件。我希望通过VSTS设置CI/CD,以便发布能力不局限于一台机器。将VSTS部署到非Azure云平台

到目前为止,我已经建立了构建阶段,因为.NET Core模板是真正需要的。这是部署的一部分,让我陷入了困境 - 我可以找到与.NET Core特别相关的所有模板(实际上是文章)都集中在Azure或IIS部署上,这两者都不适用于此,实际上Azure使用deploy专门为其创建的任务。

如果相关,GearHost提供可能用于手动复制的FTP凭证。或者,我有什么方法可以使用VS2017发布配置文件来创建发布定义,包括appsettings.json变换和EF迁移?

+0

在VSTS构建过程中似乎存在FTP上载任务。你尝试过吗? –

+0

这很可能是我需要的,我只是看看它。虽然乍一看,这似乎只是把整个构建工件并将其转储到服务器上,我没有看到任何方式可以将appsettings.json替换(用于数据库连接字符串)或EF迁移,或者实际上是什么远程目录应该使用。 – Telvee32

回答

1

有很多方法可以将应用程序部署到GearHost服务器,例如FTP,发布配置文件。

因此,您可以使用FTP Upload task将发布的文件(例如,使用文件系统发布方法创建发布配置文件)上载到GearHost服务器。

您也可以download the publish profile with Web Deploy method and import to VS,然后使用此发布配置文件部署应用程序。 (MSBuild的参数:/p:DeployOnBuild=true /p:PublishProfile=[publish profile file name]

关于appsettings.json转换,你不需要转换appsettings.json文件,在.NET核心项目可以从appsettings.[environment].json文件中每检索值的ASPNETCORE_ENVIRONMENT系统环境中的值变量。 Working with multiple environments

关于EF迁移,您可以在发布配置文件中配置它,并使用该发布配置文件发布/部署应用程序。

更新:

步骤调用GearHost cloudsite:

  1. 登录GearHost
  2. 点击API标签>创建一个新的API密钥
  3. 使用调用-RestMethod

简单代码:

$url="https://api.gearhost.com/v1/cloudsites/[could site id]/stop" 
$APIID="[step 2]" 
$result=Invoke-RestMethod -Method POST -Uri $url -Headers @{Authorization=("bearer {0}" -f $APIID)} -ContentType "application/json" 
+0

您也可以通过代码在应用程序启动时通过环境变量切换EF迁移。 – Flex

+0

我曾考虑过为环境定义appsettings.json文件,但我担心它们会在源代码管理下结束,因为它在公共GitHub存储库上,因连接字符串密码而不是真正需要的。也许类似于旧的替换令牌方法会起作用吗?像[这](http://colinsalmcorner.com/post/managing-config-for-net-core-web-app-deployments-with-tokenizer-and-replacetokens-tasks)? 至于EF迁移@Flex - 如果需要EF迁移,这是一个环境变量,我可以打开/关闭吗? – Telvee32

+0

@ Telvee32旧的替换令牌方式应该适用于您的方案。关于EF迁移,是的,只需检查当前的环境,如env.IsEnvironment(xxx),然后调用EF迁移(context.Database.Migrate()) –