Благодарю Jono Job за помощь в достижении этого решения.
В итоге я сделал следующее:
В своем конвейере сборки я добавил следующие две строки перед сборкой клиента
- sed -i -e "s/{{build-number}}/${CI_COMMIT_SHORT_SHA}/g" ./src/environments/environment.prod.ts
- echo $CI_COMMIT_SHORT_SHA > ./src/assets/build.txt
Первая строка помещает хеш коммита в скомпилированный пакет javascript, вторая создает текстовый файл с хэшем коммита в качестве содержимого.
Затем я настраиваю службу Angular, которая использует сервис Angular.http-клиент для опроса текстового файла, который содержит хеш коммита.Он проверяет, отличается ли хеш в текстовом файле от хеша, загруженного из комплекта javascript.
Теория здесь заключается в том, что комплект Javascript можно кэшировать, но запрос http для получения build.txtфайла не будет.Позвольте мне проверить разницу между хешами сборки, хранящимися в них.
Если служба обнаружит разницу в сборках, она выдаст пользователю уведомление об обновлении, которое после нажатия обновит страницу.
Обновление выполняется с помощью window.location.reload(true)
.TypeScript говорит мне, что параметр устарел, хотя он все еще работает.
Вот суть вышеупомянутой службы Angular: https://gist.github.com/alshdavid/032ea535f222646dc74420e20b28faa1
В моем APM я вижу, что в течение пары часовНажав обновление, каждый клиент был обновлен до последней версии.
Так что, вероятно, работает.