backup.rake 4.2 KB
Newer Older
1 2 3
require 'active_record/fixtures'

namespace :gitlab do
4
  namespace :backup do
N
Nihad Abbasov 已提交
5
    # Create backup of GitLab system
6
    desc "GitLab | Create a backup of the GitLab system"
7
    task create: :environment do
8
      warn_user_is_not_gitlab
9
      configure_cron_mode
10

11 12
      Rake::Task["gitlab:backup:db:create"].invoke
      Rake::Task["gitlab:backup:repo:create"].invoke
D
Dmitriy Zaporozhets 已提交
13
      Rake::Task["gitlab:backup:uploads:create"].invoke
14
      Rake::Task["gitlab:backup:builds:create"].invoke
K
Kamil Trzcinski 已提交
15
      Rake::Task["gitlab:backup:artifacts:create"].invoke
16

17 18 19 20
      backup = Backup::Manager.new
      backup.pack
      backup.cleanup
      backup.remove_old
21 22
    end

N
Nihad Abbasov 已提交
23
    # Restore backup of GitLab system
24
    desc "GitLab | Restore a previously created backup"
25
    task restore: :environment do
26
      warn_user_is_not_gitlab
27
      configure_cron_mode
28

29 30
      backup = Backup::Manager.new
      backup.unpack
31

32 33 34
      Rake::Task["gitlab:backup:db:restore"].invoke unless backup.skipped?("db")
      Rake::Task["gitlab:backup:repo:restore"].invoke unless backup.skipped?("repositories")
      Rake::Task["gitlab:backup:uploads:restore"].invoke unless backup.skipped?("uploads")
35
      Rake::Task["gitlab:backup:builds:restore"].invoke unless backup.skipped?("builds")
K
Kamil Trzcinski 已提交
36
      Rake::Task["gitlab:backup:artifacts:restore"].invoke unless backup.skipped?("artifacts")
37
      Rake::Task["gitlab:shell:setup"].invoke
38

39
      backup.cleanup
40 41
    end

42
    namespace :repo do
43
      task create: :environment do
44
        $progress.puts "Dumping repositories ...".blue
45 46 47 48 49 50 51

        if ENV["SKIP"] && ENV["SKIP"].include?("repositories")
          $progress.puts "[SKIPPED]".cyan
        else
          Backup::Repository.new.dump
          $progress.puts "done".green
        end
52 53
      end

54
      task restore: :environment do
55
        $progress.puts "Restoring repositories ...".blue
D
Dmitriy Zaporozhets 已提交
56
        Backup::Repository.new.restore
57
        $progress.puts "done".green
58 59 60
      end
    end

61
    namespace :db do
62
      task create: :environment do
63
        $progress.puts "Dumping database ... ".blue
64 65 66 67 68 69 70

        if ENV["SKIP"] && ENV["SKIP"].include?("db")
          $progress.puts "[SKIPPED]".cyan
        else
          Backup::Database.new.dump
          $progress.puts "done".green
        end
71 72
      end

73
      task restore: :environment do
74
        $progress.puts "Restoring database ... ".blue
D
Dmitriy Zaporozhets 已提交
75
        Backup::Database.new.restore
76
        $progress.puts "done".green
77 78
      end
    end
D
Dmitriy Zaporozhets 已提交
79

80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
    namespace :builds do
      task create: :environment do
        $progress.puts "Dumping builds ... ".blue

        if ENV["SKIP"] && ENV["SKIP"].include?("builds")
          $progress.puts "[SKIPPED]".cyan
        else
          Backup::Builds.new.dump
          $progress.puts "done".green
        end
      end

      task restore: :environment do
        $progress.puts "Restoring builds ... ".blue
        Backup::Builds.new.restore
        $progress.puts "done".green
      end
    end

D
Dmitriy Zaporozhets 已提交
99
    namespace :uploads do
100
      task create: :environment do
101
        $progress.puts "Dumping uploads ... ".blue
102 103 104 105 106 107 108

        if ENV["SKIP"] && ENV["SKIP"].include?("uploads")
          $progress.puts "[SKIPPED]".cyan
        else
          Backup::Uploads.new.dump
          $progress.puts "done".green
        end
D
Dmitriy Zaporozhets 已提交
109 110
      end

111
      task restore: :environment do
112
        $progress.puts "Restoring uploads ... ".blue
D
Dmitriy Zaporozhets 已提交
113
        Backup::Uploads.new.restore
114 115 116 117
        $progress.puts "done".green
      end
    end

K
Kamil Trzcinski 已提交
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
    namespace :artifacts do
      task create: :environment do
        $progress.puts "Dumping artifacts ... ".blue

        if ENV["SKIP"] && ENV["SKIP"].include?("artifacts")
          $progress.puts "[SKIPPED]".cyan
        else
          Backup::Artifacts.new.dump
          $progress.puts "done".green
        end
      end

      task restore: :environment do
        $progress.puts "Restoring artifacts ... ".blue
        Backup::Artifacts.new.restore
        $progress.puts "done".green
      end
    end

137 138
    def configure_cron_mode
      if ENV['CRON']
J
Jacob Vosmaer 已提交
139 140
        # We need an object we can say 'puts' and 'print' to; let's use a
        # StringIO.
141 142 143 144
        require 'stringio'
        $progress = StringIO.new
      else
        $progress = $stdout
D
Dmitriy Zaporozhets 已提交
145 146
      end
    end
147
  end # namespace end: backup
148
end # namespace end: gitlab