87 lines
2.9 KiB
Ruby
87 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'logger'
|
|
|
|
namespace :gitlab do
|
|
namespace :pages do
|
|
desc "GitLab | Pages | Migrate legacy storage to zip format"
|
|
task migrate_legacy_storage: :gitlab_environment do
|
|
logger.info('Starting to migrate legacy pages storage to zip deployments')
|
|
|
|
result = ::Pages::MigrateFromLegacyStorageService.new(logger,
|
|
ignore_invalid_entries: ignore_invalid_entries,
|
|
mark_projects_as_not_deployed: mark_projects_as_not_deployed)
|
|
.execute_with_threads(threads: migration_threads, batch_size: batch_size)
|
|
|
|
logger.info("A total of #{result[:migrated] + result[:errored]} projects were processed.")
|
|
logger.info("- The #{result[:migrated]} projects migrated successfully")
|
|
logger.info("- The #{result[:errored]} projects failed to be migrated")
|
|
end
|
|
|
|
desc "GitLab | Pages | DANGER: Removes data which was migrated from legacy storage on zip storage. Can be used if some bugs in migration are discovered and migration needs to be restarted from scratch."
|
|
task clean_migrated_zip_storage: :gitlab_environment do
|
|
destroyed_deployments = 0
|
|
|
|
logger.info("Starting to delete migrated pages deployments")
|
|
|
|
::PagesDeployment.migrated_from_legacy_storage.each_batch(of: batch_size) do |batch|
|
|
destroyed_deployments += batch.count
|
|
|
|
# we need to destroy associated files, so can't use delete_all
|
|
batch.destroy_all # rubocop: disable Cop/DestroyAll
|
|
|
|
logger.info("#{destroyed_deployments} deployments were deleted")
|
|
end
|
|
end
|
|
|
|
def logger
|
|
@logger ||= Logger.new($stdout)
|
|
end
|
|
|
|
def migration_threads
|
|
ENV.fetch('PAGES_MIGRATION_THREADS', '3').to_i
|
|
end
|
|
|
|
def batch_size
|
|
ENV.fetch('PAGES_MIGRATION_BATCH_SIZE', '10').to_i
|
|
end
|
|
|
|
def ignore_invalid_entries
|
|
Gitlab::Utils.to_boolean(
|
|
ENV.fetch('PAGES_MIGRATION_IGNORE_INVALID_ENTRIES', 'false')
|
|
)
|
|
end
|
|
|
|
def mark_projects_as_not_deployed
|
|
Gitlab::Utils.to_boolean(
|
|
ENV.fetch('PAGES_MIGRATION_MARK_PROJECTS_AS_NOT_DEPLOYED', 'false')
|
|
)
|
|
end
|
|
|
|
namespace :deployments do
|
|
task migrate_to_object_storage: :gitlab_environment do
|
|
logger = Logger.new($stdout)
|
|
|
|
helper = Gitlab::LocalAndRemoteStorageMigration::PagesDeploymentMigrater.new(logger)
|
|
|
|
begin
|
|
helper.migrate_to_remote_storage
|
|
rescue StandardError => e
|
|
logger.error(e.message)
|
|
end
|
|
end
|
|
|
|
task migrate_to_local: :gitlab_environment do
|
|
logger = Logger.new($stdout)
|
|
|
|
helper = Gitlab::LocalAndRemoteStorageMigration::PagesDeploymentMigrater.new(logger)
|
|
|
|
begin
|
|
helper.migrate_to_local_storage
|
|
rescue StandardError => e
|
|
logger.error(e.message)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|