目录
设置项目
创建构建管道
使用TypeScript创建Azure Function
这个怎么运作
发布管道
下一步
下载源文件 - 8.1 KB
云原生开发不仅仅涉及在云中运行代码。正如我们在本系列的第一部分中讨论的那样,具有持续集成和持续部署(CI/CD)的DevOps也是云原生的一部分,尤其是在运行微服务时。
在本文中,我们将专注于CI/CD而不是编写代码。事实上,我们将在编写任何代码之前设置我们的Azure DevOps环境。然后我们将能够在短短几分钟内使用TypeScript设置一个新的Function应用程序,之后我们的代码将在每次推送到我们的Git存储库后自动部署。
设置项目我们首先需要在Azure DevOps中创建一个Git存储库。此存储库是创建构建管道所必需的。在Azure DevOps中,创建一个新项目,它会自动创建一个我们可以使用的Git存储库,或者将一个新的Git存储库添加到现有项目之一。请务必通过添加README文件或(节点)gitignore文件来初始化存储库。之后,将存储库克隆到您的机器上。
接下来,我们将需要Azure中的Function应用。进入Azure门户,添加新资源,然后搜索“Function”。为了稍后快速清理,请将您的新功能应用程序放在一个新的资源组中,您可以在打开的刀片中创建该资源组。Function App的名称在Azure中必须是唯一的。
由于Function是无服务器的,因此您需要一个存储帐户来存储您的代码。使用专用存储帐户是一种很好的做法,因此请在Create Function App中创建一个新帐户。消费计划是无服务器计划。请注意,您可以在常规托管计划上运行您的Function,但这会限制您的扩展选项。您可以选择Linux或Windows作为您的操作系统,但我们在本示例中选择了Linux。接下来,禁用Application Insights。
接下来,单击创建并等待您的Function应用程序被供应。
请注意,虽然这是创建Function应用程序的最简单方法,但它可能并不总是最佳选择,因为它仍然需要手动工作。
创建构建管道现在,回到Azure DevOps。我们将在此处创建管道以构建、测试和部署我们的项目。转到管道并单击新建管道。我们将使用Azure Repos Git选项,但请注意,您也可以使用其他Git源,例如GitHub,它会引导您完成授权过程,但其他方面的工作方式完全相同。
选择Git存储库后,选择一个管道模板。您将找到一些适用于ASP.NET Core(和.NET Framework)、Node.js、Android和Ant的模板。单击“显示更多”时,您会发现C/C++、Go、Python、PHP等更多模板。
我们正在寻找的是Node.js Function App to Linux on Azure。单击它会提示您输入Azure订阅和Function应用程序。因此,选择您的订阅和我们刚刚创建的Function App。
之后,您将获得一个YAML脚本,该脚本描述了将代码部署到Azure Function所需的步骤。我们现在不必更改它,因为它可以使用默认的Node.js Azure Function模板开箱即用。稍后我将详细介绍一些细节。首先,让我们通过将一些代码部署到Azure来验证它是否有效。
使用TypeScript创建Azure Function使用TypeScript创建Azure Function的最简单方法是使用Visual Studio Code。安装Azure Functions扩展,然后转到新添加的Azure页面。
在那里,单击右上角的创建新项目。
选择一个文件夹:您在设置此项目时克隆的存储库。
之后,选择您的语言:TypeScript。
选择HTTP触发器,为其命名(或保留默认的HttpTrigger1),然后按Enter。
对于授权级别,选择Function。
最后,选择在当前窗口中打开您的项目。这可能会提示你安装一些你应该接受的其他Azure Functions扩展。
一旦这一切都完成了,一个新的功能就搭建好了。通过按F5或从“运行”菜单中选择“开始调试”来检查它是否运行。你会看到终端中发生了一些事情,最后你会看到:
[Function name]: [GET,POST] http://localhost:[port]/api/[Function name]
在浏览器中打开链接,您应该看到“此HTTP触发的Function执行成功。在查询字符串或请求正文中传递名称以获得个性化响应。”
因此,在URL末尾添加类似“?name=Bill”的内容,您现在应该会看到“Hello, Bill。此HTTP触发的Function已成功执行”。这意味着一切正常。
现在,是时候提交代码并将其推送回Azure DevOps并观看奇迹发生了!转到您的构建管道,您应该会看到几个绿色检查,表明一切顺利。若要检查您的代码是否实际正确运行,请转到Azure门户并找到您的Function应用。单击Function并选择您的Function。在这里,单击Code + Test然后单击Get function URL并复制URL(它有一个代码,这是我们添加的Function授权,因此不是任何人都可以调用您的Function)。结果应该与您在本地运行时的结果相同。
恭喜,您刚刚自动构建并部署了您的TypeScript Azure Function!
这个怎么运作那我们刚刚做了什么?
首先,当我们在Azure DevOps中创建管道时,我们创建了一个推送到我们的Git存储库的YAML文件。这个YAML文件描述了构建、测试和部署我们的代码的步骤。Azure DevOps可以读取和执行它。例如,以下命令告诉Azure DevOps在将某些内容推送到我们的主分支时开始执行:
trigger:
– main
重要部分在以下部分:
steps:
- task: NodeTool@0
inputs:
versionSpec: '10.x'
displayName: 'Install Node.js'
- script: |
if [ -f extensions.csproj ]
then
dotnet build extensions.csproj --runtime ubuntu.16.04-x64 --output ./bin
fi
displayName: 'Build extensions'
- script: |
npm install
npm run build --if-present
npm run test --if-present
displayName: 'Prepare binaries'
在这段代码中,我们定义了一些要运行的步骤。第一个任务是使用NodeTool任务安装Node.js。在Azure DevOps中,转到任务上方的设置以获取有关编写YAML脚本的一些视觉帮助。
之后,我们运行两个Shell脚本。如有必要,第一个运行dotnet build
命令。第二个运行npm install
并运行我们的package.json文件中的构建和测试脚本。同时,默认的Node.js TypeScript Function模板使用来自npm的TypeScript包搭建了一个项目,并构建了一个将我们的TypeScript转换为JavaScript的脚本。
为了简洁起见,这里省略了下一个任务,它将根文件夹放在工件暂存文件夹中的ZIP文件中。之后,工件暂存文件夹作为名为“drop”的工件发布。后续流程可以重用这些工件。
接下来是部署阶段。我们只有一个构建环境,但我们希望最终将我们的功能部署到开发、测试、验收和生产 (DTAP)。因此,为此,我们使用发布管道。您可以完全删除-stage: Deploy
代码,但在此之前,请查看AzureFunctionApp@1
任务设置。当我们构建发布管道时,我们将使用完全相同的步骤。
转到Azure DevOps中的发布。不幸的是,发布管道不适用于YAML脚本,因此我们必须单击此处。
首先,创建一个新的发布管道。当提示输入模板时,选择:将Function应用部署到Azure Functions。
将您的管道重命名为“TypeScript Function release”之类的名称。
接下来,将“Stage 1”重命名为“Development”。
单击添加工件,然后从您的项目中选择Function App构建。通过工件上的闪电按钮启用持续部署。
接下来,转到您的任务。在开发部署过程中,选择一个Azure订阅,将应用类型设置为Linux上的Function应用。
对于您的应用服务名称,设置$(AppServiceName)
。 “AppServiceName”是我们可以为每个环境设置的变量,因此我们可以在设置时为我们的测试环境指定不同的名称。
在Run on agent下,将Agent Specification设置为ubuntu-20.04。部署Azure Function App实际上与我们在YAML脚本中的任务相同,如AzureFunctionApp@1
。
接下来,转到变量并添加“AppServiceName”。对于value,输入应用服务的名称并将其设置为Development作用域。
保存,然后运行您的管道。如果一切顺利,您的Azure Function URL仍然有效。
现在可以克隆Development阶段并将克隆重命名为“Test”。然后,您可以在Test作用域内为您的变量指定另一个名称。然后,您的开发和测试版本将使用相同的工件,由相同的构建创建,但会将您的代码部署到另一个Azure Function应用程序。但是,我们暂时不会克隆到新环境。首先,我们将向管道添加一些额外的步骤,如下一篇文章中所述。
下一步使用TypeScript创建和部署Node.js Function应用程序很容易,只需几分钟即可完成。默认模板实际上提供了良好的基础。
在本系列的下一部分中,我们为Function App添加后端,并将DTAP添加到我们的发布管道,将我们的Function App变成微服务。
https://www.codeproject.com/Articles/5298225/First-Cloud-Native-Steps-Automated-Build-Test-and