управление версиями пакетов для приложения Angular не обновляется автоматически при загрузке в artifactory

У меня есть угловое приложение с базовым кодом Hello world. Когда я запускаю этот код на своем локальном компьютере, все кажется успешным для сборки npm и автоматического отображения версий в пользовательском интерфейсе страницы приветствия для каждого повышения версии автоматически без каких-либо изменений, вносимых в package.json каждый раз, когда я запускаю сборку.

Я внес изменения в репозитории Git в Azure DevOps, создал конвейер YAML и запустил задачи сборки в следующей последовательности: npm install npm run build Artifactory Npm - pack and publish (этот шаг - публикация файла .tgz в jfrog artifactory)

У меня проблема с обновлением файла .tgz на артефакте с автоматическим управлением версиями. Каждый раз, когда я запускаю конвейер сборки, мне приходится вручную загружать версию в файл package.json, а затем запускать конвейер для публикации пакета в artifactory, иначе я получаю ошибку 404 без изменения файла package.json.

Из-за этого я не могу привязать или отобразить номер версии из файла конфигурации в пользовательском интерфейсе страницы приветствия.

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


person divya29    schedule 01.02.2021    source источник
comment
Какую задачу вы используете в Azure DevOps для публикации пакета npm в Artifactory? Это задача Artifactory Npm? Кроме того, не могли бы вы объяснить, что вы имеете в виду под автоматическим управлением версиями? Какой механизм вы используете для автоматического повышения версии?   -  person Eyal Ben Moshe    schedule 01.02.2021
comment
@EyalBenMoshe. Я использую задачу Artifactory NPM - ›команду упаковки и публикации для загрузки в локальный репозиторий npm на artifactory.   -  person divya29    schedule 01.02.2021
comment
@EyalBenMoshe Кроме того, я просто пытаюсь построить через конвейер CI, используя NPM build и pack, опубликовать задачу, чтобы отправить пакет в artifactory. Мне просто нужно автоматически повышать версию пакета, когда я запускаю новую сборку, без ручного изменения версии в файле package.json каждый раз, когда я запускаю сборку.   -  person divya29    schedule 01.02.2021


Ответы (1)


Вы можете попробовать следующие обходные пути, чтобы автоматически поднять версию.

1. Использование команды npm version.

Вы можете добавить задачу сценария для запуска команды npm version для обновления версии пакета. А затем запустите git commands, чтобы вернуть обновленную версию в репозиторий Azure git. См. Пример ниже:

trigger: 
- master
pool:
  vmImage: 'windows-latest'

steps:

- checkout: self
  persistCredentials: true   #Leave the OAuth token in the Git config in order to run git push commands in following powershell task

- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- powershell: |
     git config --global user.email "[email protected]"
     git config --global user.name "Your Name"
     
     # increment the patch version by 1
     # create a version commit and tag 
     # use [skip ci] in the commit message to skip from triggering the ci pipeline.
     npm version patch -f -m "bump version [skip ci]"
     # push back to azure git repo
     git push origin HEAD:$(Build.SourceBranchName) -q
- task: Npm@1
  displayName: 'npm install'
  inputs:
    command: 'install'
  ....

В приведенном выше примере yaml pipeline. Вам нужно будет использовать шаг checkout: self и установить persistCredentials на true, чтобы запускать команды git в следующей задаче PowerShell. См. задача оформления заказа.

В задаче Poweshell. Команда npm version patch -f увеличит исправление версии на 1. См. версию npm документ

-m "...[skip ci]" предотвратит повторный запуск того же конвейера фиксацией. См. Пропуск CI для отдельных коммитов

  1. Использование выражения счетчика и задача Magic chunks

Если вы не хотите возвращать номер обновленной версии в репозиторий git. Вы можете использовать этот обходной путь.

Определите переменные версии в конвейере yaml, используя выражение счетчика. См. ниже:

variables:
  major: '1'
  minor: '0'
  patch: $[counter(variables['minor'], 1)] #this will get reset when minor gets bumped. The number after Counter is the seed number 
  app_version: '$(major).$(minor).$(patch)'

Затем вы можете использовать задачу Magic chunks для замены номера версии в файле package.json. Вы можете проверить пример в этой теме.

person Levi Lu-MSFT    schedule 02.02.2021
comment
Я пробовал описанный выше процесс, но все же он выдает ошибку без изменения версии, возможно, пакет в artifactory увеличен и не соответствует номеру версии package.json. - person divya29; 06.03.2021
comment
Каждый раз, когда я пытаюсь поднять версию, мне все равно приходится редактировать файл package.json, чтобы увеличить версию. - person divya29; 06.03.2021