ASP.NET核心以其跨平台的兼容性和优雅的结构而闻名,是微软为构建现代网络应用而创建的一个开源框架。有了它,开发团队可以建立任何规模和复杂性的单体网络应用程序和RESTful API。由于CircleCI改进了基础设施和对Windows平台和技术的支持,为ASP.NET Core应用程序设置自动化部署流程变得更加容易。
本文将指导您完成ASP.NET Core应用程序的自动化部署到Heroku。
先决条件
这是你从本教程中获得最大收益所需的项目列表。
- 在你的电脑上安装.Net Core运行时
- 一个GitHub账户
- 一个CircleCI账户
- 一个Heroku账户
- 使用ASP.NET Core框架构建应用程序的基本知识
克隆和运行演示的ASP.NET Core项目
首先,你将从GitHub克隆一个用ASP.NET Core MVC构建的简单应用程序。要做到这一点,请输入这个命令。
git clone https://github.com/yemiwebby/dotnet-heroku-starter.git dotnet-heroku-demo-app
这将把启动程序下载到你的开发文件夹(或你运行该命令的地方)中一个名为dotnet-heroku-demo-app 的文件夹。
接下来,进入新克隆的应用程序并运行该应用程序。
// Move into the project folder
cd dotnet-heroku-demo-app
// run the application
dotnet watch run
你可能会得到一个关于框架版本兼容性的错误。

出现这个错误是因为默认情况下,.NET框架应用程序是在其构建的版本上运行的。该演示应用程序是用ASP.NET Core版本3.1 。如果你运行的是不同的版本,就会出现上述错误。通过运行这个命令,检查当前安装在你电脑上的版本。
dotnet --version
如果输出的是版本3.1 以外的版本,你可以通过编辑应用程序根部内的demoDotnet.csproj 文件来修复它。像这样更新它。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp5.0</TargetFramework>
</PropertyGroup>
</Project>
用前面显示的版本取代5.0 ,从你的终端。如果你有一个类似于a.b.c 的版本,你只需要在配置中添加a.b 。完成后,用dotnet watch run 再次运行该项目。
通过导航到http://localhost:5000 ,打开默认主页。

这里没有什么事情发生。对ASP.NET Core应用程序的默认主页上的内容做了一个小小的修改。
现在,按CTRL + C ,停止应用程序的运行。
在Heroku上创建应用程序
你需要做的下一件事是在Heroku上创建一个新的应用程序。这个新的应用程序将承载并运行我们的ASP.NET Core应用程序。转到Heroku仪表板开始。点击新建,然后点击新建应用程序。在表格中填写你的应用程序的名称和你的地区。

然后,点击创建应用程序按钮。你将被重定向到你新创建的应用程序的部署视图。
添加ASP.NET Core构建包
正如Heroku Buildpacks页面上所详述的,buildpacks扩展了Heroku的构建系统,以支持你选择的任何编程语言。Buildpacks还可以使二进制包在运行时可用。
为了使这个项目在Heroku上成功运行,你需要添加一个构建包。要做到这一点,单击 "设置"选项卡。在buildpacks部分,点击Add buildpack按钮。
这就会出现一个表格,你可以选择一个官方支持的构建包,或者为你的构建包提供一个URL。目前,Heroku没有官方支持的ASP.NET Core构建包。这没关系,你可以提供.NET Core构建包的URL来代替。将https://github.com/heroku-softtrends/heroku-buildpack-dotnetcore.git ,然后点击保存更改。

我们需要的最后一件事是一个API密钥。你将使用这个密钥和应用程序的名称来连接你的CircleCI管道和Heroku。要获得你的API密钥,打开账户设置页面。

滚动到API密钥部分。

点击 "揭示"按钮,复制API密钥。把它保存在你以后能容易找到的地方。
添加CircleCI配置文件
接下来,我们需要添加CircleCI的管道配置。对于这个项目,管道将包括安装项目的依赖性和编译生产的应用程序的步骤。
在你项目的根部,创建一个名为.circleci 的文件夹。在该文件夹中,创建一个名为config.yml 的文件。在新创建的文件中,添加这个配置。
version: 2.1
orbs:
heroku: circleci/heroku@1.2.6
windows: circleci/windows@2.4.1
jobs:
build:
description: Build application with Release configuration
executor:
name: windows/default
steps:
- checkout
- restore_cache:
keys:
- dotnet-packages-v1-{{ checksum "demoDotnet.csproj" }}
- run:
name: "Install project dependencies"
command: dotnet.exe restore
- run:
name: "Build Application according to some given configuration"
command: dotnet.exe build --configuration Release
workflows:
heroku_deploy:
jobs:
- heroku/deploy-via-git
这个配置拉入了Heroku orbcircleci/heroku ,它自动让我们访问一组强大的Heroku作业和命令。其中一个作业是heroku/deploy-via-git ,它将你的应用程序从GitHub repo直接部署到你的Heroku账户。它还会拉入Windows orb,为你提供构建Windows项目的工具,如通用Windows平台(UWP)应用程序、.NET可执行文件或Windows特定项目(如.NET框架)。
该配置指定了一个名为build 的工作。它使用windows/default 执行器,安装项目所需的所有依赖项,然后构建项目。
接下来,我们需要在GitHub上建立一个仓库,并将项目链接到CircleCI。
接下来,登录你的CircleCI账户。如果你用GitHub账户注册,你所有的仓库都会在项目的仪表板上出现。
点击为你的dotnet-heroku-demo-app 项目设置项目。

你会被提示写一个新的配置文件或使用你项目中的现有配置文件。选择现有的选项。输入你的代码在GitHub上存放的分支名称,然后点击设置项目按钮。

你的第一个工作流程将开始运行,但它会失败。

这个部署过程失败是因为我们没有提供我们的Heroku API密钥。我们现在可以解决这个问题。点击项目设置按钮,然后点击环境变量。添加这两个新变量。
HEROKU_APP_NAME是Heroku中的应用名称 ( )dotnet-core-heroku-demo-appHEROKU_API_KEY是你从账户设置页面获取的Heroku API密钥。
选择 "重新运行工作流"(Rerun Workflow from Failed),重新运行Heroku部署。这一次,你的工作流将成功运行。

为了确认你的工作流是成功的,你可以在浏览器中打开你新部署的应用程序。你的应用程序的URL应该是这样的格式https://<HEROKU_APP_NAME>.herokuapp.com/

结语
在本教程中,我向您展示了如何将ASP.NET Core应用程序部署到Heroku平台上,而不需要费力。CircleCI基础设施可以很容易地使用现有的工具来快速处理部署,让你和你的团队有宝贵的时间来专注于开发你的应用程序。