如何使用YAML为NestJS应用程序建立构建和发布管道到Azure

问题描述 投票:0回答:1

我在理解和获取将NestJS应用程序部署到Azure DevOps(ADO)的构建/发布管道设置方面遇到麻烦。

我正在部署到Azure中托管的Linux Web App。

据我了解,如果我使用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)'

问题是构建过程完成后,在dist中看不到/home/site/wwwroot/ProjectName文件夹。有人可以帮我解决我的失踪吗?

另外,还有关于Azure DevOps的附带问题,$(Build.SourcesDirectory)$(Build.ArtifactStagingDirectory)指的是什么,以及如何以及在哪里设置这些环境变量?

node.js azure-devops azure-pipelines nestjs azure-pipelines-release-pipeline
1个回答
0
投票

将您的应用程序部署到Azure中托管的应用程序。您需要使用Azure App Service Deploy taskAzure Web App task

Azure devops是用于将您的应用程序构建并部署到服务器(例如Azure上的Linux Web App)的工具,它不是用于托管您的应用程序。

$(Build.ArtifactStagingDirectory)是指运行管道的代理计算机的文件夹。 (在运行管道时,它会选择pool中定义的代理来运行管道任务)

到代理计算机中文件夹的映射如下图所示。检查predefined variables以获取更多信息。

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订阅。检查here了解详细步骤。

然后将Azure App Service Deploy task / Azure Web App task添加到管道的末尾。参见以下示例:

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

您可以检查here了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.