【问题标题】:VSTS deploy to non-Azure cloud platformVSTS 部署到非 Azure 云平台
【发布时间】:2017-08-05 09:22:38
【问题描述】:

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

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

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

【问题讨论】:

  • VSTS构建过程中好像有FTP上传任务。你试过了吗?
  • 这很可能是我需要的,我只是看看它。虽然乍一看这似乎只是将整个构建工件转储到服务器上,但我没有看到任何方法可以合并 appsettings.json 替换(用于数据库连接字符串)或 EF 迁移,或者实际上是什么远程目录应该使用。

标签: c# asp.net-core azure-devops azure-pipelines-release-pipeline


【解决方案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 core 项目可以将appsettings.[environment].json 文件中的值检索到ASPNETCORE_ENVIRONMENT 系统环境的值多变的。 Working with multiple environments

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

更新:

调用GearHost cloudsite的步骤:

  1. 登录 GearHost
  2. 单击 API 选项卡>创建新的 API 密钥
  3. 使用 Invoke-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"

【讨论】:

  • 您还可以通过应用程序上的代码执行 EF 迁移,并通过环境变量切换。
  • 我曾考虑过为环境定义 appsettings.json 文件,但我担心它们最终会受到源代码控制,因为它位于公共 GitHub 存储库中,由于连接原因,它并不是真正可取的字符串密码。也许类似于旧的替换令牌方法的东西会起作用?像this 这样的东西?至于 EF 迁移 @Flex - 如果需要 EF 迁移,这会是我打开/关闭的环境变量吗?
  • @Telvee32 旧的替换令牌方式应该适用于您的场景。关于 EF 迁移,是的,只需检查当前环境,如 env.IsEnvironment(xxx),然后调用 EF 迁移 (context.Database.Migrate())
  • 好的,将 FTP 与链接文章结合使用似乎可以正常工作。现在的问题是,除非应用程序停止,否则我无法在文件传输之前清除远程目录,我必须手动执行此操作。如果应用程序没有停止,则 FTP 任务将挂起。如果每次部署都必须登录 GearHost 并手动停止应用程序(然后重新启动),那么这有点违背了自动部署的目的。你知道 GearHost 是否为此公开了任何 VSTS 可以利用的 API?
  • @Telvee32 有可以停止CloudSite的GearHost API:CloudSite Operations
猜你喜欢
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 2018-03-08
  • 2018-12-21
  • 2017-07-21
  • 1970-01-01
相关资源
最近更新 更多