Как развернуть реагирующее приложение в нескольких средах без нескольких сборок?

Я настраиваю конвейер CI/CD с помощью DevOps Azure для автоматического развертывания приложения React в нескольких средах. Как я понял, переменные окружения (REACT_APP_*) используются во время сборки npm. Как настроить этап сборки, не создавая шаг для каждой среды?

Я использую свежий проект ASP.Net Boilerplate с React-интерфейсом.

,

Вот что у меня на данный момент

Я скопировал задачу сборки в package.json, чтобы разрешить несколько сред

"scripts": {
  ...
  "build": "set REACT_APP_ENV=production && react-app-rewired build --scripts-version react-scripts-ts",
  "builduat": "set REACT_APP_ENV=uat && react-app-rewired build --scripts-version react-scripts-ts",
...
}

Затем в моем конвейере CI я продублировал задачу сборки

- script: yarn builduat
  displayName: '[UAT] Yarn build front-end'
  workingDirectory: $(WorkingDirectoryReact)

- script: yarn build
  displayName: '[PROD] Yarn build front-end'
  workingDirectory: $(WorkingDirectoryReact)

Я не хочу дублировать вещи для каждой среды, так что же является идеальным решением? Я действительно не хочу создавать решение во время CD (фаза развертывания)

2 ответа

Решение

Наконец-то я создал скрипт PowerShell, который заменит содержимое артефактов сборки.

Все подробности можно найти здесь: https://github.com/Thibaultce/react-azuredevops-buildonce-deploymany

Я не слишком осведомлен о реакции, но ваш подход описан как "построй один раз, разверни много", и это действительно важный аспект твоего процесса релиза.

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

Посмотрите на задачи публикации артефактов: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/publish-build-artifacts?view=azure-devops

Опубликуйте каждую из ваших сред для разделения артефактов, а затем подберите их в своем конвейере выпуска.

Другие вопросы по тегам