Как убрать старые развернутые версии на хостинге Firebase?

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

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


person Pier    schedule 20.08.2016    source источник
comment
Вот ответ по состоянию на март 2019 года: stackoverflow.com/a/47213789/1271706   -  person Dylan Watson    schedule 23.10.2019


Ответы (8)


Вы правы. Вам нужно будет удалить старые развернутые версии одну за другой с помощью консоли Firebase Hosting.

Другого способа сделать это нет, поэтому я предлагаю вам отправить запрос функции, чтобы разрешить удаление нескольких развернутых версий в консоли Firebase Hosting.

Обновление:

Вы можете проголосовать здесь (избегайте спама +1, используйте реакции) https://github.com/firebase/firebase-tools/issues/215#issuecomment-314211730 для одной из альтернатив, предложенных командой (пакетное удаление, сохранение только X версий, сохранение версий с датой публикации ‹Y)

person looptheloop88    schedule 20.08.2016
comment
Я заполнил запрос на добавление функции, но сомневаюсь, что он будет реализован. Ну что ж. - person Pier; 20.08.2016
comment
Ой, агония - в моем случае их у меня 218 штук! (щелкните меню, щелкните удалить, щелкните удалить ... щелкните меню, щелкните удалить, щелкните удалить ... повторите 218 раз ...) - person Venryx; 12.05.2017
comment
@Pier Пожалуйста, дайте ссылку на созданный вами запрос функции, чтобы мы могли его отслеживать. Спасибо! Изменить: я вижу, что запросы функций на firebase не являются общедоступными. Это вроде ... не очень хорошо. - person Levi; 22.05.2017
comment
@Levi Также сообщалось о репозитории firebase-tools. Всем: вы можете проголосовать здесь (избегайте спама +1, используйте реакции) github.com/firebase/firebase-tools/issues/ для одной из альтернатив, предложенных командой (пакетное удаление, сохранение только X версий, сохранение версий с датой публикации‹ Y) - person nathan; 10.11.2017

ОБНОВЛЕНИЕ март / 2019

Теперь есть подходящее решение: «Настройки истории версий», которое позволяет сохранить последние X-версии.

https://support.google.com/firebase/answer/9242086?hl=en


ОБНОВЛЕНИЕ Февраль / 2019

Подтверждено сотрудником Google @ github.com/firebase/firebase-tools/issues/ ...

Над этим активно работают. ????

????????????


Прежде чем продолжить чтение:

Вы можете проголосовать здесь (избегайте спама +1, используйте реакции) https://github.com/firebase/firebase-tools/issues/215#issuecomment-314211730 для одной из альтернатив, предложенных командой.


Итак, с помощью инструментов Chrome Dev я нашел способ удалить несколько версий. Имейте в виду, что для работы требуется немного (будьте осторожны, поскольку удаленные версии не могут быть восстановлены, и вы не получите никаких предупреждений, как при использовании пользовательского интерфейса).

Шаг 1. Получение списка версий.

  1. Откройте Chrome Dev Tools (если вы не знаете, каковы шансы, вам следует дождаться подходящего решения от команды Firebase).
  2. Откройте консоль Firebase и перейдите на вкладку «Хостинг».
  3. Перейдите на вкладку «Сеть» на CDT и используйте фильтр Websockets.
  4. Выберите запрос с именем .ws?v=5&ns=firebase
  5. Откройте вкладку "Рамки".
  6. Теперь наступает утомительная часть: выберите кадры с наибольшим значением «длины». (В зависимости от ваших данных это может быть 2–n кадров. В моем случае 3 кадра длиной 14–16 тыс.)
  7. Вставьте по порядку данные каждого кадра (которые будут формировать действительный объект JSON).
  8. Извлечение данных: есть несколько способов сделать это. Я выбрал простой JS на консоли CDT.
    var jsonString = '...';
    var json = JSON.parse(jsonString);
    var ids = Object.keys(json.d.b.d);

Шаг 2. Выполнение запросов

Почти готово: P

Теперь, когда у вас есть идентификаторы, выполните следующие запросы:

УДАЛИТЬ https://firebasehosting.clients6.google.com/v1beta1/sites/PROJECT_NAME/versions/-VERSION_ID?key=KEY

Я использовал Sublime (для создания строк запроса) + Paw.

«KEY» можно скопировать из любого запроса CDT. Он не соответствует ключу веб-API Firebase

=> Перед выполнением запросов: обратите внимание на версию, которую вы не хотите удалять из таблицы, предоставленной Firebase. (Каждая версия, указанная на веб-сайте, имеет последние 6 цифр идентификатора под вашим адресом электронной почты)

(Скриншоты не были предоставлены, так как все они потребовали бы размытия и небольшой работы)

person nathan    schedule 10.11.2017
comment
Я добрался до последнего шага, за исключением того, что я хотел использовать инструменты в браузере для отправки запросов DELETE. Кажется, это правильно: fetch(`https://firebasehosting.clients6.google.com/v1beta1/sites/${projectID}/versions/${versionID}?key=${key}`, {method: "DELETE", credentials: 'include'}); Однако при запуске он сообщает, что в запросе отсутствуют необходимые учетные данные для аутентификации. Это странно, потому что на вкладке «Сеть» запросы отображаются как идентичные. (кроме крошечных вариаций двух файлов cookie, которые кажутся не связанными) - person Venryx; 16.01.2018
comment
@Venryx, ты понял? - person Joshua Kifer; 19.02.2018
comment
Нет простите. В итоге я использовал решение @ AAverin, указанное выше, которое отлично работает. - person Venryx; 20.02.2018
comment
Потрясающие. Теперь это должен быть ответ. - person Dylan Watson; 23.10.2019

Этот сценарий еще не очень надежен, поэтому используйте его на свой страх и риск. Попробую обновить позже, но пока у меня работает. Просто какой-нибудь javascript, чтобы нажимать на кнопки, чтобы удалять развернутые элементы один за другим.

var deleteDeployment = function(it) {
    it.click()
    setTimeout(function() {
        $('.md-dialog-container .delete-dialog button.md-raised:contains("Delete")').click()
    }, 300)
}
$('.h5g-hist-status-deployed').map((i, a) => $(a).parent()).map((i, a) => $(a).find('md-menu button:contains(Delete)')).each((i, it) => {
    setTimeout(function() {
        deleteDeployment(it)
    }, (i + 1) * 2000)
})
person AAverin    schedule 01.01.2018
comment
Это очистило 3 ГБ старых развертываний за пять минут. Спасибо! - person eat-sleep-code; 24.01.2019
comment
Прохладный! ты облегчаешь мне жизнь. - person Mihae Kheel; 26.02.2019

В Firebase наконец появилось решение.

Теперь можно установить лимит сохраняемых версий.

https://firebase.google.com/docs/hosting/deploying#set_limit_for_retended_versions

РЕДАКТИРОВАТЬ: предыдущая ссылка устарела. Вот новая ссылка, которая работает:

https://firebase.google.com/docs/hosting/usage-quotas-pricing#control-storage-usage

person Pier    schedule 15.03.2019

Это может быть немного хрупким из-за того, что селекторы полагаются на текущую структуру DOM и классы на панели инструментов хостинга, но у меня это работает!

ПРИМЕЧАНИЕ. Этот сценарий (если выполняется из консоли) или букмарклет щелкнет и подтвердит удаление во всех строках в текущем представлении. Я совершенно уверен, что даже если вы нажмете «Удалить» в текущем развертывании, оно не удалится.

Функция для запуска в консоли:

let deleteAllHistory = () => {
  let deleteBtns = document.querySelectorAll('.table-row-actions button.md-icon-button');

  const deleteBtn = (pointer) => {
        deleteBtns[pointer].click();

        setTimeout(() => {
          document.querySelector('.md-open-menu-container.md-clickable md-menu-item:last-child button').click();

          setTimeout(() => {
            document.querySelector('.fb-dialog-actions .md-raised').click();

            if(pointer < deleteBtns.length - 1) {
              deleteBtn(pointer + 1);
            }
          }, 500);
        }, 500);
  };

  deleteBtn(0);
};

Букмарклет:

javascript:(function()%7Bvar%20deleteBtns%3Ddocument.querySelectorAll('.table-row-actions%20button.md-icon-button')%2CdeleteBtn%3Dfunction(a)%7BdeleteBtns%5Ba%5D.click()%2CsetTimeout(function()%7Bdocument.querySelector('.md-open-menu-container.md-clickable%20md-menu-item%3Alast-child%20button').click()%2CsetTimeout(function()%7Bdocument.querySelector('.fb-dialog-actions%20.md-raised').click()%2Ca%3CdeleteBtns.length-1%26%26deleteBtn(a%2B1)%7D%2C500)%7D%2C500)%7D%3BdeleteBtn(0)%7D)()
person Ben Feely    schedule 04.03.2018
comment
будьте осторожны, это приведет к удалению домена: | - person KhaledMohamedP; 08.04.2018

Вариант Натана отличный, но у меня есть быстрый и грязный метод с использованием AutoHotkey. Удаление занимает около секунды на каждую версию, поэтому вы можете выбить страницу за 10 секунд.

#a::
    Click
    MouseGetPos, xpos, ypos
    MouseMove, xpos, ypos + 30
    Sleep 300
    Click
    Sleep 400
    Click 1456, 816
    MouseMove, xpos, ypos + 82
return
#s::
    Click
    MouseGetPos, xpos, ypos
    MouseMove, xpos, ypos - 820
return

Вероятно, вам придется изменить точные значения пикселей для вашего экрана, но это отлично работает на моем 1920x1080.

Win + a - это удалить и перейти к следующей записи, Win + s - перейти на следующую страницу. Наведите указатель мыши на первое трехточечное меню и сделайте это!

person Alan Grainger    schedule 21.12.2017

В верхней части таблицы журнала выпусков щелкните панель инструментов и выберите «Настройки журнала версий». Установите желаемое значение и нажмите «Сохранить». Это автоматически удалит старые развертывания.

person emmbee    schedule 09.03.2020

Я не знаю, может ли это помочь вам или нет, но я могу удалить старые развертывания из меню «хостинг» следующим образом: Удалить или откатить старое развертывание

person Đỗ Văn Cường    schedule 29.06.2017
comment
Вы должны поместить здесь соответствующий код / ​​инструкции, чтобы в будущем неработающие ссылки не сделали ваш ответ бесполезным. - person Benoît Latinier; 29.06.2017
comment
Да, но это нужно делать вручную. По одному. Вы хоть вопрос читали? - person Pier; 29.06.2017