65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Linux 从 CodeProject 自动化部署 ASP.NET Core 到 Azure App Service

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2016 年 11 月 8 日

CPOL

13分钟阅读

viewsIcon

12893

在这篇文章中,我将向您展示如何创建一个小型脚本,通过本地 Git 部署来自动化将 ASP.NET Core 应用程序部署到 Microsoft Azure。

引言和背景

在 Microsoft Windows 等操作系统上,并使用 Visual Studio 等优秀工具,将 Web 应用程序项目上传和发布到 Microsoft Azure 非常容易,但对于 Linux 等其他平台呢?Microsoft 最近发布了开源的 PowerShell 项目,这是一个非常棒的工具,可以用于那些理解并能使用 PowerShell 的开发人员。但如果您没有这样的人才,您就需要使用传统工具,有时这些工具需要您手动进行更改。在这篇文章中,我将介绍使用 Git 仓库进行项目管理的团队,以及如何自动化发布他们的项目,每次成功构建后都能发布。在 Linux 上,我们可以创建小型脚本在后台运行,就像 PowerShell 或 Windows 命令提示符终端的批处理文件一样。运行这些脚本需要 Git 程序,实际上我将要展示的是执行相同的命令,但以一种方式,其中大多数仓库信息已经构建好,提交消息已更新,内容已发布到 Azure App Service。本指南的目的是让整个过程像 A、B、C 一样容易理解。我将使用一个实际应用程序向您展示如何操作以及在哪里操作,而不是同时泛泛地谈论许多事情。

在继续之前,您需要对 Git 系统的工作原理有非常初步的了解,因为下面的文章中有一些内容可能有点技术性,因此您必须了解 Git 系统的工作方式,以便控制文件的版本。

2color-lightbg2x

图 1:Git logo。

其次,您需要了解如何使用“dotnet”脚本来创建、构建和运行 .NET Core 应用程序。如果您不了解 .NET Core,我将引用我自己的几篇对新手友好的文章,您可以阅读以了解更多信息。

最后,您需要拥有一个活跃的 Azure 帐户以及一个有效的订阅。如果您没有,可以免费获得一个帐户,并附带 200 美元的积分来试用 Azure 的所有服务!一旦满足了这些条件,您就可以继续使用本文进行有用的操作了。

创建应用程序 — 全部内容

这部分内容已经分享和教授过很多次了。我前几天写了一篇关于同一概念的文章,并希望您参考这篇文章来学习如何在 .NET Core 中使用 Web 模板创建新应用程序。在 Linux 上创建和托管 ASP.NET Core 应用程序 — 无需第三方,阅读这篇文章可以全面了解在 Linux 环境中构建和运行应用程序的概念。我将从这一步开始,因为您必须了解创建自己应用程序的方法。

将 Web 应用程序部署到 Azure

现在是主要部分,本文完全侧重于将应用程序部署到 Microsoft Azure,而不是开发应用程序。有些部分,我将修改某些内容,但这仅仅是为了告诉您通过执行一个简单的命令来实现自动化重新部署有多么容易。虽然不是必需的,但您需要对自动化工具有非常初步的了解。您可以从任何软件工程指南中轻松获得有关这些工具的教程。

使用 Git 进行部署

Microsoft Azure 使用许多方法和途径将应用程序部署到云端,例如使用 Visual Studio 部署应用程序并将配置留给工具本身。但是,由于 Linux 环境没有 Visual Studio,因此大多数任务都交给了源代码控制工具(Visual Studio Code 也使用相同的 Git 程序将代码上传到仓库)。我将向您展示如何创建一个最小化的脚本或程序,来为您管理所有这些任务 — 自动化程序。

在 Linux 上,通常情况下,Git 会预装在大多数 Linux 发行版中,例如 Ubuntu 等。但是,如果不可用,您可以通过以下方式轻松安装:

$ sudo apt-get install git

或使用类似的命令,例如使用 yum 等。这将为您的环境安装和设置 Git。一旦安装了 Git,您就需要进行一些设置。Git 需要姓名和电子邮件地址来通知谁对系统进行了更改。因此,我们需要执行以下命令,

$ git config --global user.name "Eminem"
$ git config --global user.email "email@domain.com"

您应该填写您拥有的姓名和地址值 — 我使用了 Eminem 和一个随机电子邮件地址。要检查您的个人配置是否正确,您可以执行以下命令进行测试,

$ git config --list

这些是您在使用 Git 进行任何目的之前必须完成的必要配置。

注意:您还需要在 Microsoft Azure 上创建一个新的 Web 应用程序服务(Azure App Service),以便您可以将应用程序部署到某个地方。由于我不想深入探讨开发和本次会议的开始部分,我想让大家去观看我的一个视频,该视频提供了Microsoft Azure App Service 的概述(您可能需要将音量调高一些)。

一旦您有了这些,您就可以继续进行并实际设置仓库来部署应用程序。我在创建新服务时使用了以下信息,所以如果您看到一个名字,您应该知道它来自哪里。

screenshot-6477

图 2:创建新的 App Service。

screenshot-6478

图 3:在 Microsoft Azure 中查看 App Service 的信息。

创建完成后,您可以使用提供的链接从浏览器访问该 Web 服务。首次访问时,没有任何更新,将显示以下页面。

screenshot-6479

图 4:App Service 的初始页面。

它显示您可以通过许多服务(如 FTP、Git 等)从许多来源部署 Web 应用程序。我将向您展示如何使用 Git 来完成此操作… 我还想在这里向您展示一些其他内容,

  1. 我将向您展示如何使用 Git 来完成此操作。
  2. 我还将向您展示如何测试构建的完整性 — 构建是否成功。
  3. 我还将向您展示 Git 是否会考虑将更改提交并推送到服务器。

因此,这些是我为自动化工具准备的一些测试,在当前情况下对我们非常有帮助。在线教程中并没有提供这些内容,它们只是简单直接地告诉您如何操作,但并没有说明是否值得这样做。

设置本地仓库

在机器端,首先要做的是为 Git 部署设置一个本地仓库。即使您已经创建了一个项目,您仍然可以为该项目创建一个仓库,然后将其用作应用程序内容的来源。因此,为此,以下命令将起作用,

# If you have created a project, remove these lines. 
$ dotnet new -t web
$ dotnet restore

# The following creates a local repository
$ git init

这将为我们创建项目,并在 .git 目录下设置仓库。在我的机器上,这是结果,

screenshot-6480

图 5:使用 .NET Core 创建新项目。

目前不可见,但是有一个默认创建的特殊文件 .gitignore,其中包含对 Git 系统非常有用的忽略规则。但是,稍后我们将随着进展进行研究。

添加远程仓库

现在我们可以在自己的本地计算机上设置一些远程仓库,以便将来发布应用程序时,不必每次都输入仓库的 URL。相反,我们可以只调用该仓库的别名并将内容部署到那里。这有助于通知系统它需要将更改推送到哪些位置。为此,首先我们需要设置我们的在线仓库以允许从 Microsoft Azure 进行本地 Git 部署,之后我们才能确保我们可以将代码发送到在线仓库。为此,请转到“部署选项”→“部署源”→“本地 Git 仓库”。

screenshot-6487

图 6:Microsoft Azure 中的部署选项。

您可以看到还有其他选项可用,请根据需要选择。我选择了第三个选项,以便我们可以随时将源代码从本地计算机发布到服务器,而无需任何第三方供应商。您需要设置凭据,以便在尝试发布应用程序时,只有您一个人负责将更改推送到服务器,而不是其他人。

screenshot-6488

图 7:设置部署帐户的凭据。

设置好这些之后,我们就可以继续设置本地 Git 程序,以便它能够将源代码从我们的本地环境一直部署到 Microsoft Azure。请继续关注。为此,我们需要执行以下命令,

$ git remote add repoinazure https://<user>@<servicename>.scm.azurewebsites.net:443/<servicename>.git

请注意上一条命令中的一些内容,这里有趣的是,仓库的 URL 和 Git 进程的资源文件始终包含您的应用程序服务名称。您需要更新它;其次,您需要更新 URL 中的用户名以及您在凭据中使用的用户名(我使用了“afzaal”)。完成此操作后,我们可以继续并将应用程序的第一个版本推送到 Azure,看看 Azure 会如何表现。

以下命令负责这些操作,

$ git add .
$ git commit -m "Some random commit message here..."
$ git push repoinazure master

在前面的命令中,第一个命令负责将文件添加到本地仓库的跟踪中,以跟踪需要跟踪的文件。第二个命令只是提交更改,最后将更改推送到“repoinazure”,当然,那是我们将发布应用程序的仓库。

screenshot-6489

图 8:部署前终端要求输入密码。

它会要求输入密码,然后继续压缩对象,通过 Git 协议进行部署。

screenshot-6490

图 9:终端显示进度。

以下是第一次部署期间正在进行的进程的屏幕截图。下次以及以后的部署会快得多,并且非常简单。

screenshot-6491

图 10:终端显示部署期间 Azure 上正在进行的进程。

但是,我们还将创建一个 shell 脚本来为我们自动化部署。完成后,终端将在屏幕上显示以下结果,我们就知道 Azure 已准备就绪。

screenshot-6492

图 11:应用程序已部署到 Azure。

让我们导航到网站,看看一切是否如我们计划的那样。

screenshot-6493

图 12:应用程序上传到 Azure 后的主页。

搞定!我们终于将应用程序部署到了 Azure。现在我们需要部署更改,所以在这里我将提交我的建议、想法和技巧。

开发和重新部署

让我们向此 Web 应用程序添加一个简单的控制器,然后使用我们将创建的脚本快速部署它。在本节中,我将向您展示一个简单的 ASP.NET Core Web API,它将用于查看更新何时在服务器上实时发布。所以,我开始向 Web 应用程序的源代码添加一个新的控制器文件,然后修改它以返回一些包含一些数据的对象。

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication.Controllers {

    [RouteAttribute("api/people")]
    public class PersonApiController : Controller {
        private List<Person> _people { get; set; } = new List<Person> { 
             new Person { ID = 1, Name = "Afzaal Ahmad Zeeshan" },
             new Person { ID = 2, Name = "Bruce Wayne" },
             new Person { ID = 3, Name = "Marshall Bruce Mathers III" } 
        };
        public List<Person> GetPeople() {
            return _people;
        }

        // Rest of the stuff here...
    }

    public class Person {
        public int ID { get; set; }
        public string Name { get; set; }
    }
}

我只是添加了一个简单的 HTTP GET 处理程序,以向您展示使用本地仓库的 Git 部署来更新实时应用程序是多么轻松简单。

现在给孩子们表演魔术以下脚本将处理我们的大部分任务,并在我们继续部署应用程序之前负责这些任务。

if [ $# == 0 ] 
    then 
    echo "Usage: automate.sh <git-remote-repository>"
    exit 1
fi

# Variables
commit_message="Deployment commit on $(date "+%B %dth, %Y at %H:%M %p")."

# Run the test
dotnet build

if [ $? == 0 ]
    then
        # Successful attempt.
        # Update the git.
        git add -A

        echo "Using commit message, \"$commit_message\"."
        git commit -m "$commit_message"
 
        # Check if anything was commited, or whether there were no changes.
        if [ $? == 0 ]
            then 
                # Files need to be updated
                # Update the azure's repository.
                echo "Connecting to server for git push..."
                git push $1 master
                exit 0
        else 
            echo "No changes to be pushed to server. Terminating."
            exit 1
        fi
        exit
    else 
        # There must have been an issue in the execution.
        echo "There were errors in building process, fix them and re-try."
        exit 1
fi

这将检查我们是否正在传递远程仓库,它还会构建项目,然后只有在构建成功后才会继续。因此,基本上,这在处理基于终端的环境,尤其是 Linux,以及使用 Git 协议进行部署时非常有用。我建议将其保存为本地仓库中的一个文件,然后从终端作为程序执行。您也可以从我的 GitHub 仓库获取该文件。

screenshot-6533

图 13:“autorun.sh”文件在文件中可用。

完成后,只需将其设置为可执行文件,然后最终执行脚本进行部署。它将遍历每一步,最终部署应用程序,它需要密码。我没有创建脚本来接受密码。

screenshot-6536

图 14:我的脚本正在工作并将应用程序部署到 Azure。

所以,让我们现在运行系统。完成后,它将显示您可以访问 Web 应用程序,因为它已成功部署。浏览器可以证实这一点,

screenshot-6539

图 15:部署结果。

要查看更多信息,我们可以转到 Azure 查看部署如何影响我们当前的源代码。

screenshot-6538

图 16:Azure 上显示的部署。

清楚地可以看到,现在我们的最新部署版本被显示为活动的部署,而前一个已被删除并设置为不活动。我们可以更深入地研究它们并根据需要更改其状态,但我不会这样做。请记住:下次您想发布应用程序时,只需使用我提供的脚本。

最后的寄语

Microsoft Azure 提供了非常简单的应用程序部署方式,除了 Git 之外,还有许多其他方法可以将应用程序部署到服务器。OneDrive、GitHub 和其他云存储服务可以轻松用于部署应用程序。

然而,我的主要关注点是展示如何在脚本化环境中使用 Git 将应用程序部署到 Azure,并跟踪每次提交何时被推送到服务器。正如您在此帖中所见,提交在云端进行跟踪,您可以更改和选择您感兴趣的提交,并将它们设置为活动的提交 — 例如在删除文件等情况下。

在脚本中,我将 `dotnet test` 命令留给您添加,大多数时候我不运行模块测试,因此我没有演示它,但您可以检查并将其添加到脚本中,在部署应用程序之前运行测试。这将帮助您确保应用程序处于生产就绪状态。

© . All rights reserved.