我在理解和获取将NestJS应用程序部署到Azure DevOps(ADO)的构建/发布管道设置方面遇到麻烦。
我正在部署到Azure中托管的Linux Web App。
据我了解,如果我使用npm run start
之类的东西在本地运行该应用程序,它将在我的根项目目录下创建一个dist
文件夹。
因此,在为构建和部署编写YAML时。我的思考过程是:
npm run build
生成应用程序并生成dist
文件夹。/home/site/wwwroot
)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)
指的是什么,以及如何以及在哪里设置这些环境变量?
将您的应用程序部署到Azure中托管的应用程序。您需要使用Azure App Service Deploy task或Azure Web App task。
Azure devops是用于将您的应用程序构建并部署到服务器(例如Azure上的Linux Web App)的工具,它不是用于托管您的应用程序。
$(Build.ArtifactStagingDirectory)
是指运行管道的代理计算机的文件夹。 (在运行管道时,它会选择pool
中定义的代理来运行管道任务)
到代理计算机中文件夹的映射如下图所示。检查predefined variables以获取更多信息。
$(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了解更多信息。