如何使用YAML在Azure上设置NestJS应用程序的构建和发布流程

3

我在理解和设置基于 Azure DevOps(ADO)的构建/发布流程以部署 NestJS 应用程序方面遇到了困难。

我要部署到 Azure 托管的 Linux Web 应用程序中。

据我所知,如果我在本地使用类似 npm run start 的命令运行应用程序,它会在我的根项目目录下创建一个 dist 文件夹。

因此,在编写用于构建和部署的 YAML 文件时,我的思路是:

  1. 运行 NPM 更新。
  2. 运行 npm run build 来构建应用程序并生成 dist 文件夹。
  3. 将应用程序的内容(或仅 dist 文件夹?)复制到目标文件夹 (/home/site/wwwroot) 中
  4. 运行 npm run start:prod 来启动服务器。

以下是迄今为止的 YAML:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:

- task: UseNode@1
  inputs:
    version: '14.x'
    checkLatest: true

- task: Npm@0
  displayName: Run NPM Update for NestJS
  inputs:
    cwd: '$(Build.SourcesDirectory)/ProjectName'
    command: update

- task: Npm@0
  displayName: Build NestJS
  inputs:
    cwd: '$(Build.SourcesDirectory)/ProjectName'
    command: run
    arguments: "build"

- task: CopyFiles@2
  inputs:
    Contents: 'dist/**'
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

问题是在构建过程完成后,我没有在 /home/site/wwwroot/ProjectName 中看到 dist 文件夹。有人能帮我找出我缺少的东西吗?
另外,关于Azure DevOps的一个新手问题,什么是 $(Build.SourcesDirectory) 和 $(Build.ArtifactStagingDirectory),这些环境变量是如何设置的,它们指的是什么地方?
1个回答

3
要将您的应用程序部署到托管在Azure上的服务器上,您需要使用Azure App Service Deploy taskAzure Web App task
Azure DevOps是构建和部署应用程序到服务器(例如Azure上的Linux Web应用程序)的工具,而不是用于托管应用程序的工具。 $(Build.ArtifactStagingDirectory)指的是运行您的管道的代理机器的文件夹。 (当运行管道时,它会选择在pool中定义的代理来运行管道任务)
代理机器中文件夹的映射如下所示。有关更多信息,请查看预定义变量

enter image description here

$(Agent.BuildDirectory) 被映射为 c:\agent_work\1

$(Build.ArtifactStagingDirectory) 被映射为 c:\agent_work\1\a

$(Build.BinariesDirectory) 被映射为 c:\agent_work\1\b

$(Build.SourcesDirectory) 被映射为 c:\agent_work\1\s

那么回到问题,如何将 NestJS 应用程序部署到 Azure?

首先需要在 Azure DevOps 中创建一个服务连接以连接到您的 Azure 订阅。请参考 此处 获取详细步骤。

然后将 Azure App Service Deploy 任务/Azure Web App 任务 添加到管道末尾。以下是示例:

- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: 'SubscriptionServiceConnectionName'
    appType: 'webAppLinux'
    WebAppName: 'MyWebAppName'
    Package: '$(Build.ArtifactStagingDirectory)/dist/'
    StartupCommand: 'npm run start:prod'

你可以在这里查看更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接