Как настроить конвейер сборки и выпуска для приложения Nest JS на Azure с помощью YAML - PullRequest
0 голосов
/ 28 мая 2020

Мне трудно понять и настроить конвейеры сборки / выпуска для развертывания приложения Nest JS в Azure DevOps (ADO).

Я развертываю в Linux веб-приложении, размещенном в Azure.

Насколько я понимаю, если я запускаю приложение локально, используя что-то вроде npm run start, оно создает папку dist в моем каталоге проекта root.

Итак, при написании 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), и как и где эти переменные среды установить?

1 Ответ

1 голос
/ 29 мая 2020

Чтобы развернуть ваше приложение на сервере Azure. Вам необходимо использовать Azure задачу развертывания службы приложений или Azure задачу веб-приложения .

Azure DevOps - это инструмент для создания и развертывания вашего приложения. к вашему серверу (например, веб-приложение Linux на Azure), оно не предназначено для размещения вашего приложения.

$(Build.ArtifactStagingDirectory) относится к папке на машине агента, которая запускает ваш конвейер. (Когда вы запускаете конвейер, он выбирает агент, определенный в pool, для выполнения задач конвейера)

Сопоставление с папками на машине агента показано, как показано на снимке экрана ниже. Проверьте предопределенные переменные для получения дополнительной информации.

enter image description here

$(Agent.BuildDirectory) is mapped to c:\agent_work\1

$(Build.ArtifactStagingDirectory) is mapped to c:\agent_work\1\a

$(Build.BinariesDirectory) is mapped to c:\agent_work\1\b

$(Build.SourcesDirectory) is mapped to c:\agent_work\1\s

So back to the question how to deploying a NestJS application to Azure?

First you need to create a service connection in Azure devops to connect to your azure subscription. Check здесь для подробных шагов.

Затем добавьте 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/'
    StartupCommand: 'npm run start:prod'

Вы можете проверить здесь для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...