diff --git a/.gitignore b/.gitignore
index 39caad149b399e3ebb0ba1bede8a53ee5381777c..2a97eacad489f02225935e3130421ec2c18bd1be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,4 +42,4 @@ rails_best_practices_output.html
 /tags
 tmp/
 vendor/bundle/*
-/ci/builds/*
+builds/*
diff --git a/lib/backup/builds.rb b/lib/backup/builds.rb
index 4280438e86c032686b647a6c0ec7fa3ae5253419..6f56f680bb9bcba8cde7104146743184936c7648 100644
--- a/lib/backup/builds.rb
+++ b/lib/backup/builds.rb
@@ -3,14 +3,18 @@ module Backup
     attr_reader :app_builds_dir, :backup_builds_dir, :backup_dir
 
     def initialize
-      @app_builds_dir = File.realpath(Rails.root.join('ci/builds'))
-      @backup_dir = GitlabCi.config.backup.path
-      @backup_builds_dir = File.join(GitlabCi.config.backup.path, 'ci/builds')
+      @app_builds_dir = Settings.gitlab_ci.builds_path
+      @backup_dir = Gitlab.config.backup.path
+      @backup_builds_dir = File.join(Gitlab.config.backup.path, 'builds')
     end
 
     # Copy builds from builds directory to backup/builds
     def dump
-      FileUtils.mkdir_p(backup_builds_dir)
+      FileUtils.rm_rf(backup_builds_dir)
+      # Ensure the parent dir of backup_builds_dir exists
+      FileUtils.mkdir_p(Gitlab.config.backup.path)
+      # Fail if somebody raced to create backup_builds_dir before us
+      FileUtils.mkdir(backup_builds_dir, mode: 0700)
       FileUtils.cp_r(app_builds_dir, backup_dir)
     end