diff options
Diffstat (limited to 'lib/tasks/gitlab/backup.rake')
-rw-r--r-- | lib/tasks/gitlab/backup.rake | 109 |
1 files changed, 86 insertions, 23 deletions
diff --git a/lib/tasks/gitlab/backup.rake b/lib/tasks/gitlab/backup.rake index cc10d73f76a..0bca63a64f5 100644 --- a/lib/tasks/gitlab/backup.rake +++ b/lib/tasks/gitlab/backup.rake @@ -9,14 +9,9 @@ namespace :gitlab do task create: :gitlab_environment do warn_user_is_not_gitlab - Rake::Task['gitlab:backup:db:create'].invoke - Rake::Task['gitlab:backup:repo:create'].invoke - Rake::Task['gitlab:backup:uploads:create'].invoke - Rake::Task['gitlab:backup:builds:create'].invoke - Rake::Task['gitlab:backup:artifacts:create'].invoke - Rake::Task['gitlab:backup:pages:create'].invoke - Rake::Task['gitlab:backup:lfs:create'].invoke - Rake::Task['gitlab:backup:registry:create'].invoke + %w(db repo uploads builds artifacts pages lfs terraform_state registry packages).each do |type| + Rake::Task["gitlab:backup:#{type}:create"].invoke + end backup = Backup::Manager.new(progress) backup.write_info @@ -83,7 +78,9 @@ namespace :gitlab do Rake::Task['gitlab:backup:artifacts:restore'].invoke unless backup.skipped?('artifacts') Rake::Task['gitlab:backup:pages:restore'].invoke unless backup.skipped?('pages') Rake::Task['gitlab:backup:lfs:restore'].invoke unless backup.skipped?('lfs') + Rake::Task['gitlab:backup:terraform_state:restore'].invoke unless backup.skipped?('terraform_state') Rake::Task['gitlab:backup:registry:restore'].invoke unless backup.skipped?('registry') + Rake::Task['gitlab:backup:packages:restore'].invoke unless backup.skipped?('packages') Rake::Task['gitlab:shell:setup'].invoke Rake::Task['cache:clear'].invoke @@ -133,8 +130,12 @@ namespace :gitlab do if ENV["SKIP"] && ENV["SKIP"].include?("db") puts_time "[SKIPPED]".color(:cyan) else - Backup::Database.new(progress).dump - puts_time "done".color(:green) + begin + Backup::Database.new(progress).dump + puts_time "done".color(:green) + rescue Backup::DatabaseBackupError => e + progress.puts "#{e.message}" + end end end @@ -166,8 +167,12 @@ namespace :gitlab do if ENV["SKIP"] && ENV["SKIP"].include?("builds") puts_time "[SKIPPED]".color(:cyan) else - Backup::Builds.new(progress).dump - puts_time "done".color(:green) + begin + Backup::Builds.new(progress).dump + puts_time "done".color(:green) + rescue Backup::FileBackupError => e + progress.puts "#{e.message}" + end end end @@ -185,8 +190,12 @@ namespace :gitlab do if ENV["SKIP"] && ENV["SKIP"].include?("uploads") puts_time "[SKIPPED]".color(:cyan) else - Backup::Uploads.new(progress).dump - puts_time "done".color(:green) + begin + Backup::Uploads.new(progress).dump + puts_time "done".color(:green) + rescue Backup::FileBackupError => e + progress.puts "#{e.message}" + end end end @@ -204,8 +213,12 @@ namespace :gitlab do if ENV["SKIP"] && ENV["SKIP"].include?("artifacts") puts_time "[SKIPPED]".color(:cyan) else - Backup::Artifacts.new(progress).dump - puts_time "done".color(:green) + begin + Backup::Artifacts.new(progress).dump + puts_time "done".color(:green) + rescue Backup::FileBackupError => e + progress.puts "#{e.message}" + end end end @@ -223,8 +236,12 @@ namespace :gitlab do if ENV["SKIP"] && ENV["SKIP"].include?("pages") puts_time "[SKIPPED]".color(:cyan) else - Backup::Pages.new(progress).dump - puts_time "done".color(:green) + begin + Backup::Pages.new(progress).dump + puts_time "done".color(:green) + rescue Backup::FileBackupError => e + progress.puts "#{e.message}" + end end end @@ -242,8 +259,12 @@ namespace :gitlab do if ENV["SKIP"] && ENV["SKIP"].include?("lfs") puts_time "[SKIPPED]".color(:cyan) else - Backup::Lfs.new(progress).dump - puts_time "done".color(:green) + begin + Backup::Lfs.new(progress).dump + puts_time "done".color(:green) + rescue Backup::FileBackupError => e + progress.puts "#{e.message}" + end end end @@ -254,6 +275,25 @@ namespace :gitlab do end end + namespace :terraform_state do + task create: :gitlab_environment do + puts_time "Dumping terraform states ... ".color(:blue) + + if ENV["SKIP"] && ENV["SKIP"].include?("terraform_state") + puts_time "[SKIPPED]".color(:cyan) + else + Backup::TerraformState.new(progress).dump + puts_time "done".color(:green) + end + end + + task restore: :gitlab_environment do + puts_time "Restoring terraform states ... ".color(:blue) + Backup::TerraformState.new(progress).restore + puts_time "done".color(:green) + end + end + namespace :registry do task create: :gitlab_environment do puts_time "Dumping container registry images ... ".color(:blue) @@ -262,8 +302,12 @@ namespace :gitlab do if ENV["SKIP"] && ENV["SKIP"].include?("registry") puts_time "[SKIPPED]".color(:cyan) else - Backup::Registry.new(progress).dump - puts_time "done".color(:green) + begin + Backup::Registry.new(progress).dump + puts_time "done".color(:green) + rescue Backup::FileBackupError => e + progress.puts "#{e.message}" + end end else puts_time "[DISABLED]".color(:cyan) @@ -282,6 +326,25 @@ namespace :gitlab do end end + namespace :packages do + task create: :gitlab_environment do + puts_time "Dumping packages ... ".color(:blue) + + if ENV['SKIP'] && ENV['SKIP'].include?('packages') + puts_time "[SKIPPED]".color(:cyan) + else + Backup::Packages.new(progress).dump + puts_time "done".color(:green) + end + end + + task restore: :gitlab_environment do + puts_time "Restoring packages ...".color(:blue) + Backup::Packages.new(progress).restore + puts_time "done".color(:green) + end + end + def puts_time(msg) progress.puts "#{Time.now} -- #{msg}" Gitlab::BackupLogger.info(message: "#{Rainbow.uncolor(msg)}") @@ -302,7 +365,7 @@ namespace :gitlab do if Feature.enabled?(:gitaly_backup, default_enabled: :yaml) max_concurrency = ENV['GITLAB_BACKUP_MAX_CONCURRENCY'].presence max_storage_concurrency = ENV['GITLAB_BACKUP_MAX_STORAGE_CONCURRENCY'].presence - Backup::GitalyBackup.new(progress, parallel: max_concurrency, parallel_storage: max_storage_concurrency) + Backup::GitalyBackup.new(progress, max_parallelism: max_concurrency, storage_parallelism: max_storage_concurrency) else Backup::GitalyRpcBackup.new(progress) end |