Да, вы можете архивировать указанную папку c в архив zip, 7z или tar. Тогда вы можете опубликовать sh только архив как артефакт из конвейера. Вот пример архивирования содержимого dist
, node_modules
и package.json
в zip-файл и последующей публикации его в качестве артефакта.
Важный бит здесь replaceExistingArchive: false
в задачах архивирования, это добавит каждую папку / файл в архив. Единственное исключение - если вы архивируете в сжатый файл TAR, они всегда полностью заменяются. ( Источник )
Также задача Артефакт просто публикует файлы, чтобы они были недоступны вне конвейера, но не сжимает их в архив.
steps:
- task: ArchiveFiles@2
displayName: 'Archive Dist Folder'
inputs:
rootFolderOrFile: 'dist'
includeRootFolder: false
archiveFile: '$(Build.ArtifactStagingDirectory)/archive.zip'
replaceExistingArchive: false
- task: ArchiveFiles@2
displayName: 'Archive node_modules Folder'
inputs:
rootFolderOrFile: 'node_modules'
includeRootFolder: false
archiveFile: '$(Build.ArtifactStagingDirectory)/archive.zip'
replaceExistingArchive: false
- task: ArchiveFiles@2
displayName: 'Archive package.json File'
inputs:
rootFolderOrFile: 'package.json'
includeRootFolder: false
archiveFile: '$(Build.ArtifactStagingDirectory)/archive.zip'
replaceExistingArchive: false
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/archive.zip'
ArtifactName: 'drop'
publishLocation: 'Container'
Я хотел обновить этот ответ, чтобы включить мое окончательное решение, которое работало с 17.04.2020. Помните, что в облачном пространстве все постоянно меняется, но на данный момент это полное решение.
- Вот мои шаги сборки конвейера:
steps:
- task: NodeTool@0
inputs:
versionSpec: '12.x'
displayName: 'Install Node.js'
- script: |
npm install -g @angular/cli
npm install
npm run build:ssr
displayName: 'npm install and build'
- task: ArchiveFiles@2
displayName: 'Archive dist Folder'
inputs:
rootFolderOrFile: 'dist'
includeRootFolder: true
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/archive.zip'
replaceExistingArchive: false
- task: ArchiveFiles@2
displayName: 'Archive node_modules Folder'
inputs:
rootFolderOrFile: 'node_modules'
includeRootFolder: true
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/archive.zip'
replaceExistingArchive: false
- task: ArchiveFiles@2
displayName: 'Archive package.json File'
inputs:
rootFolderOrFile: 'package.json'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/archive.zip'
replaceExistingArchive: false
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/archive.zip'
ArtifactName: 'drop'
publishLocation: 'Container'
Вот мой шаг развертывания в части Releases конвейера при использовании задачи
Deploy Azure App Service
.
steps:
- task: AzureRmWebAppDeployment@4
displayName: 'Deploy Azure App Service'
inputs:
azureSubscription: '$(Parameters.ConnectedServiceName)'
appType: '$(Parameters.WebAppKind)'
WebAppName: '$(Parameters.WebAppName)'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/**/*.zip'
RuntimeStack: 'NODE|12-lts'
StartupCommand: '$(Parameters.StartupCommand)'
По какой-то причине yaml говорит, что у меня много неопределенных системных переменных, но это не так, потому что A. это работает и B. Я полагаю, что это из вашей подписки и из серверная система.
Наконец, убедитесь, что вы создали правильную команду запуска PM2 для вашего сервера express или универсальной реализации сервера приложений angular. Это можно найти на портале azure npm run serve:ssr
Не забудьте использовать npm run для Linux серверов, поскольку Microsoft Windows использует запуск узла