Как протестировать новую версию расширения Azure DevOps, прежде чем публиковать ее для всех - PullRequest
4 голосов
/ 07 мая 2019

Я использую Azure DevOps (не TFS on-prem), и мое расширение уже опубликовано как общедоступное, и многие используют его.Как я могу выпустить новую версию для себя (или определенных организаций), чтобы протестировать ее, прежде чем сделать ее общедоступной для всех?

Я знаю, что могу выполнить все задачи в своем расширении конвейера сборки / выпускадо v2, поэтому, если есть проблемы, это не сломается в системах моих пользователей сразу, пока они не перевернут задачу для использования v2.Тем не менее, я обычно хочу увеличивать версию задачи только тогда, когда в ней происходят серьезные изменения.Кроме того, это по-прежнему не решает проблему «Я не хочу, чтобы ЛЮБЫЕ пользователи использовали новую версию, пока я не проверил ее сначала», поскольку это может привести к проблемам для моих пользователей и их плохим оценкам / отзывам..

Первоначально я хотел перевернуть атрибут galleryFlags в файле vss-extension.json из «Public» в «Preview» и выдвинуть новую версию, но я не уверен, удалит ли это мое расширение.из магазина или, если он просто опубликует новую версию «Предварительный просмотр» и оставит существующую версию доступной на рынке.

Перед переходом на Azure DevOps я смог установить новые версии в расширении внаш предварительный экземпляр TFS из локального файла .vsix без необходимости публиковать их на рынке.Кажется, что работа в облаке не предлагает эту функцию, и Azure DevOps может устанавливать расширения только с рынка.

Я поставил новую проблему GitHub, чтобы обновить документацию MS додать некоторые инструкции или рекомендации по этому вопросу.Я также нашел этот аналогичный пост SO , и этот , и была рекомендация создать вторую учетную запись издателя и опубликовать то же расширение, что и private, и поделиться им с моей организацией.Это бы сработало, но, кажется, очень хакро, чтобы перед каждой публикацией каждый раз настраивать две отдельные учетные записи публикации и использовать идентификаторы расширений для тестирования новых версий расширений.

Я создал этот новый пост SO (вместопо просьбе Microsoft, чтобы прокомментировать это прямо сейчас.

1 Ответ

7 голосов
/ 07 мая 2019

При тестировании новой версии вашего расширения вам нужно использовать либо другой ExtensionID, либо другой PublisherID.И тестовое расширение должно быть помечено public: false.

. Есть несколько способов сделать этот процесс простым.Я лично использую Задачи расширения Azure DevOps по-разному.

Для моего собственного частного расширения у меня есть определение сборки, которое создает либо публичную, либо приватную версию.Раньше у меня было 2 отдельных определения сборки, но с доступным YAML я начал объединять это в одно определение.extensionTag добавляется к существующему extensionId.

steps:
- task: ms-devlabs.vsts-developer-tools-build-tasks.package-extension-build-task.PackageVSTSExtension@1
  displayName: 'Package Extension: $(Build.SourcesDirectory)'
  inputs:
    rootFolder: '$(Build.SourcesDirectory)'
    outputPath: '$(Build.BinariesDirectory)\vsix\jessehouwing.azure-pipelines-snyk-task.vsix'
    outputVariable: CreateExtension.OutputPath
    publisherId: jessehouwing
    extensionId: 'vsts-snyk'
    extensionVersion: '$(Build.BuildNumber)'
    updateTasksVersion: true
    updateTasksVersionType: patch
    extensionVisibility: public

- task: ms-devlabs.vsts-developer-tools-build-tasks.publish-extension-build-task.PublishExtension@1
  displayName: 'Publish Extension Private'
  inputs:
    connectedServiceName: 'Jesse Houwing'
    fileType: vsix
    vsixFile: '$(CreateExtension.OutputPath)'
    extensionTag: '-develop'
    extensionVisibility: private
  condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/master'))

- task: ms-devlabs.vsts-developer-tools-build-tasks.publish-extension-build-task.PublishExtension@1
  displayName: 'Publish Extension Public'
  inputs:
    connectedServiceName: 'Jesse Houwing'
    fileType: vsix
    vsixFile: '$(CreateExtension.OutputPath)'
    extensionVisibility: public
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))

Я использую условия для запуска публичной или приватной функции публикации.

Конечный результат выглядит так в моемиздатель:

enter image description here

В учетной записи ALM Rangers мы используем определение сборки, которое строит один vsix во время сборки, а затем мы используем двоичное продвижение для публикации vsix.с разными переопределениями.Вам не нужно использовать другого издателя в этом случае, но рейнджеры это делают.Причина этого заключается в том, что Рейнджерс раньше публиковал для издателя MsDevDiv, и Microsoft не хотела предоставлять каждому участнику доступ к этому издателю и всем его расширениям.Таким образом, отдельный издатель используется больше, чтобы отделить заботу о разработке расширения от предоставления поддержки, ответов на вопросы и ответов на отзывы.

enter image description here

Чтобы протестировать, я публикую расширение в другой организации DevOps Azure.Это связано с тем, что нельзя установить два расширения в одну и ту же организацию DevOps Azure, если оба расширения содержат одинаковые идентификаторы задач сборки.В моем случае я использую dev.azure.com/jessehouwing для сборки своих расширений и dev.azure.com/jessehouwing-dev для тестирования изменений перед тем, как сделать их общедоступными.

Для некоторых расширений я публикую второе частное расширение для ранних пользователей:

  • Идентификатор расширения: jessehouwing.snyk-develop для общего доступа jessehouwing-dev для тестирования.
  • Идентификатор расширения: jessehouwing.snyk-canary для общего доступа нескольким избранным пользователям для ранних пользователей.
  • Идентификатор расширения: jessehouwing.snyk для публичного использования.

У пары моих клиентов есть особый случай, когда они работают над пакетом расширений одновременно с несколькими разработчиками.Чтобы не предоставлять каждому разработчику отдельную организацию Azure DevOps и агенты сборки, они публикуют тестовое и общедоступное расширение в одной учетной записи.В этом случае:

  • Идентификатор расширения: publisher.extension частный для стандартного использования.
  • Идентификатор расширения: publisher.extension-branch, частный, предварительный просмотр для внутренней разработки и канареечных выпусков.Одновременно их может быть несколько.

Для этого у каждой задачи сборки должен быть уникальный идентификатор задачи для задач сборки в расширении.Задачи расширения DevOps Azure имеют специальную функцию для создания уникальных идентификаторов на основе publisher, extension-id, taskname.Эта функция подробно описана в этих заметках о выпуске .

Я недавно представил на саммите MVP эти схемы использования. Презентация доступна здесь .

Если вы хотите запустить свои собственные сценарии, вы можете следовать следующему шаблону:

  • vss-extension.json - сохранить все общиесвойства расширения в этом файле.Не указывайте extensionid, ни galleryflags, ни public.
  • vss-extension-test.json - сохраняйте значения, уникальные для тестовой версии.К ним относятся: extensionid, galleryflags: preview, public: false.
  • vss-extension-release.json - хранить значения, уникальные для версии выпуска.К ним относятся: extensionid, galleryflags: public, public: true.

Затем вызовите:

// deploy test
tfx extension publish --manifest-globs vss-extension.json vss-extension-test.json
// deploy release
tfx extension publish --manifest-globs vss-extension.json vss-extension-release.json

Для публикации комбинированных манифестов.

Или используйтеманифест переопределения:

  • vss-extension.json - сохранить все данные для публичного расширения
  • vss-extension-override-test.json - сохранить файл json-patch со значениями, которые вы хотите переопределить.Снова: extensionid, galleryflags: preview, public.

Затем используйте

// deploy test
tfx extension publish --manifest-globs vss-extension.json --override-file vss-extension-override-test.json
// deploy release: 
tfx extension publish --manifest-globs vss-extension.json

Если вы катите свои собственные сценарии, , тогда вы можете использовать vsts-bump для автоматического увеличения версии ваших задач сборки .

...