bb873b1e3b
EE uses single quotes for the changed line, whereas CE was using double quotes. This commit ensures both repositories use the same kind of quotes.
249 lines
7.7 KiB
Ruby
249 lines
7.7 KiB
Ruby
require 'active_record/fixtures'
|
|
|
|
namespace :gitlab do
|
|
namespace :backup do
|
|
# Create backup of GitLab system
|
|
desc "GitLab | Create a backup of the GitLab system"
|
|
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
|
|
|
|
backup = Backup::Manager.new(progress)
|
|
backup.pack
|
|
backup.cleanup
|
|
backup.remove_old
|
|
end
|
|
|
|
# Restore backup of GitLab system
|
|
desc 'GitLab | Restore a previously created backup'
|
|
task restore: :gitlab_environment do
|
|
warn_user_is_not_gitlab
|
|
|
|
backup = Backup::Manager.new(progress)
|
|
backup.unpack
|
|
|
|
unless backup.skipped?('db')
|
|
begin
|
|
unless ENV['force'] == 'yes'
|
|
warning = <<-MSG.strip_heredoc
|
|
Before restoring the database, we will remove all existing
|
|
tables to avoid future upgrade problems. Be aware that if you have
|
|
custom tables in the GitLab database these tables and all data will be
|
|
removed.
|
|
MSG
|
|
puts warning.color(:red)
|
|
ask_to_continue
|
|
puts 'Removing all tables. Press `Ctrl-C` within 5 seconds to abort'.color(:yellow)
|
|
sleep(5)
|
|
end
|
|
|
|
# Drop all tables Load the schema to ensure we don't have any newer tables
|
|
# hanging out from a failed upgrade
|
|
puts_time 'Cleaning the database ... '.color(:blue)
|
|
Rake::Task['gitlab:db:drop_tables'].invoke
|
|
puts_time 'done'.color(:green)
|
|
Rake::Task['gitlab:backup:db:restore'].invoke
|
|
rescue Gitlab::TaskAbortedByUserError
|
|
puts "Quitting...".color(:red)
|
|
exit 1
|
|
end
|
|
end
|
|
|
|
Rake::Task['gitlab:backup:repo:restore'].invoke unless backup.skipped?('repositories')
|
|
Rake::Task['gitlab:backup:uploads:restore'].invoke unless backup.skipped?('uploads')
|
|
Rake::Task['gitlab:backup:builds:restore'].invoke unless backup.skipped?('builds')
|
|
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:registry:restore'].invoke unless backup.skipped?('registry')
|
|
Rake::Task['gitlab:shell:setup'].invoke
|
|
Rake::Task['cache:clear'].invoke
|
|
|
|
backup.cleanup
|
|
end
|
|
|
|
namespace :repo do
|
|
task create: :gitlab_environment do
|
|
puts_time "Dumping repositories ...".color(:blue)
|
|
|
|
if ENV["SKIP"] && ENV["SKIP"].include?("repositories")
|
|
puts_time "[SKIPPED]".color(:cyan)
|
|
else
|
|
Backup::Repository.new(progress).dump
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
task restore: :gitlab_environment do
|
|
puts_time "Restoring repositories ...".color(:blue)
|
|
Backup::Repository.new(progress).restore
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
namespace :db do
|
|
task create: :gitlab_environment do
|
|
puts_time "Dumping database ... ".color(:blue)
|
|
|
|
if ENV["SKIP"] && ENV["SKIP"].include?("db")
|
|
puts_time "[SKIPPED]".color(:cyan)
|
|
else
|
|
Backup::Database.new(progress).dump
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
task restore: :gitlab_environment do
|
|
puts_time "Restoring database ... ".color(:blue)
|
|
Backup::Database.new(progress).restore
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
namespace :builds do
|
|
task create: :gitlab_environment do
|
|
puts_time "Dumping builds ... ".color(:blue)
|
|
|
|
if ENV["SKIP"] && ENV["SKIP"].include?("builds")
|
|
puts_time "[SKIPPED]".color(:cyan)
|
|
else
|
|
Backup::Builds.new(progress).dump
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
task restore: :gitlab_environment do
|
|
puts_time "Restoring builds ... ".color(:blue)
|
|
Backup::Builds.new(progress).restore
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
namespace :uploads do
|
|
task create: :gitlab_environment do
|
|
puts_time "Dumping uploads ... ".color(:blue)
|
|
|
|
if ENV["SKIP"] && ENV["SKIP"].include?("uploads")
|
|
puts_time "[SKIPPED]".color(:cyan)
|
|
else
|
|
Backup::Uploads.new(progress).dump
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
task restore: :gitlab_environment do
|
|
puts_time "Restoring uploads ... ".color(:blue)
|
|
Backup::Uploads.new(progress).restore
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
namespace :artifacts do
|
|
task create: :gitlab_environment do
|
|
puts_time "Dumping artifacts ... ".color(:blue)
|
|
|
|
if ENV["SKIP"] && ENV["SKIP"].include?("artifacts")
|
|
puts_time "[SKIPPED]".color(:cyan)
|
|
else
|
|
Backup::Artifacts.new(progress).dump
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
task restore: :gitlab_environment do
|
|
puts_time "Restoring artifacts ... ".color(:blue)
|
|
Backup::Artifacts.new(progress).restore
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
namespace :pages do
|
|
task create: :gitlab_environment do
|
|
puts_time "Dumping pages ... ".color(:blue)
|
|
|
|
if ENV["SKIP"] && ENV["SKIP"].include?("pages")
|
|
puts_time "[SKIPPED]".color(:cyan)
|
|
else
|
|
Backup::Pages.new(progress).dump
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
task restore: :gitlab_environment do
|
|
puts_time "Restoring pages ... ".color(:blue)
|
|
Backup::Pages.new(progress).restore
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
namespace :lfs do
|
|
task create: :gitlab_environment do
|
|
puts_time "Dumping lfs objects ... ".color(:blue)
|
|
|
|
if ENV["SKIP"] && ENV["SKIP"].include?("lfs")
|
|
puts_time "[SKIPPED]".color(:cyan)
|
|
else
|
|
Backup::Lfs.new(progress).dump
|
|
puts_time "done".color(:green)
|
|
end
|
|
end
|
|
|
|
task restore: :gitlab_environment do
|
|
puts_time "Restoring lfs objects ... ".color(:blue)
|
|
Backup::Lfs.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)
|
|
|
|
if Gitlab.config.registry.enabled
|
|
if ENV["SKIP"] && ENV["SKIP"].include?("registry")
|
|
puts_time "[SKIPPED]".color(:cyan)
|
|
else
|
|
Backup::Registry.new(progress).dump
|
|
puts_time "done".color(:green)
|
|
end
|
|
else
|
|
puts_time "[DISABLED]".color(:cyan)
|
|
end
|
|
end
|
|
|
|
task restore: :gitlab_environment do
|
|
puts_time "Restoring container registry images ... ".color(:blue)
|
|
|
|
if Gitlab.config.registry.enabled
|
|
Backup::Registry.new(progress).restore
|
|
puts_time "done".color(:green)
|
|
else
|
|
puts_time "[DISABLED]".color(:cyan)
|
|
end
|
|
end
|
|
end
|
|
|
|
def puts_time(msg)
|
|
progress.puts "#{Time.now} -- #{msg}"
|
|
end
|
|
|
|
def progress
|
|
if ENV['CRON']
|
|
# We need an object we can say 'puts' and 'print' to; let's use a
|
|
# StringIO.
|
|
require 'stringio'
|
|
StringIO.new
|
|
else
|
|
$stdout
|
|
end
|
|
end
|
|
end # namespace end: backup
|
|
end # namespace end: gitlab
|