Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
4dae41d5
Commit
4dae41d5
authored
Jul 10, 2012
by
Stefan Morgenthaler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changes done as per feedback
parent
12b34c81
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
26 additions
and
23 deletions
+26
-23
config/gitlab.yml.example
config/gitlab.yml.example
+1
-1
config/initializers/1_settings.rb
config/initializers/1_settings.rb
+10
-0
lib/tasks/gitlab/backup.rake
lib/tasks/gitlab/backup.rake
+15
-22
No files found.
config/gitlab.yml.example
View file @
4dae41d5
...
@@ -22,7 +22,7 @@ email:
...
@@ -22,7 +22,7 @@ email:
app:
app:
default_projects_limit: 10
default_projects_limit: 10
# backup_path: "/vol/backups" # default: Rails.root + backups/
# backup_path: "/vol/backups" # default: Rails.root + backups/
# backup_keep_time:
7.days # default: 0 (forever
)
# backup_keep_time:
604800 # default: 0 (forever) (in seconds
)
#
#
...
...
config/initializers/1_settings.rb
View file @
4dae41d5
...
@@ -101,5 +101,15 @@ class Settings < Settingslogic
...
@@ -101,5 +101,15 @@ class Settings < Settingslogic
def
default_projects_limit
def
default_projects_limit
app
[
'default_projects_limit'
]
||
10
app
[
'default_projects_limit'
]
||
10
end
end
def
backup_path
t
=
app
[
'backup_path'
]
||
"backups/"
t
=
/^\//
.
match
(
t
)
?
t
:
File
.
join
(
Rails
.
root
+
t
)
t
end
def
backup_keep_time
app
[
'backup_keep_time'
]
||
0
end
end
end
end
end
lib/tasks/gitlab/backup.rake
View file @
4dae41d5
require
'active_record/fixtures'
require
'active_record/fixtures'
# load config
GITLAB_OPTS
=
YAML
.
load_file
(
"
#{
Rails
.
root
}
/config/gitlab.yml"
)[
'app'
]
# backup path options
backup_path
=
GITLAB_OPTS
[
'backup_path'
].
nil?
?
"backups/"
:
GITLAB_OPTS
[
'backup_path'
]
# set default path if not specified in settings.
backup_path
=
/^\//
.
match
(
backup_path
)
?
backup_path
:
File
.
join
(
Rails
.
root
+
backup_path
)
# check for absolut or relative path.
FileUtils
.
mkdir_p
(
backup_path
)
until
Dir
.
exists?
(
backup_path
)
# keep last n backups
backup_keep_time
=
GITLAB_OPTS
[
'backup_keep_time'
].
nil?
?
0
:
eval
(
GITLAB_OPTS
[
'backup_keep_time'
])
backup_path_repo
=
File
.
join
(
backup_path
,
"repositories"
)
backup_path_db
=
File
.
join
(
backup_path
,
"db"
)
namespace
:gitlab
do
namespace
:gitlab
do
namespace
:app
do
namespace
:app
do
...
@@ -21,11 +7,11 @@ namespace :gitlab do
...
@@ -21,11 +7,11 @@ namespace :gitlab do
desc
"GITLAB | Create a backup of the gitlab system"
desc
"GITLAB | Create a backup of the gitlab system"
task
:backup_create
=>
:environment
do
task
:backup_create
=>
:environment
do
Dir
.
chdir
(
backup_path
)
Rake
::
Task
[
"gitlab:app:db_dump"
].
invoke
Rake
::
Task
[
"gitlab:app:db_dump"
].
invoke
Rake
::
Task
[
"gitlab:app:repo_dump"
].
invoke
Rake
::
Task
[
"gitlab:app:repo_dump"
].
invoke
Dir
.
chdir
(
Gitlab
.
config
.
backup_path
)
# saving additional informations
# saving additional informations
s
=
Hash
.
new
s
=
Hash
.
new
s
[
"db_version"
]
=
"
#{
ActiveRecord
::
Migrator
.
current_version
}
"
s
[
"db_version"
]
=
"
#{
ActiveRecord
::
Migrator
.
current_version
}
"
...
@@ -33,7 +19,7 @@ namespace :gitlab do
...
@@ -33,7 +19,7 @@ namespace :gitlab do
s
[
"gitlab_version"
]
=
%x{git rev-parse HEAD}
.
gsub
(
/\n/
,
""
)
s
[
"gitlab_version"
]
=
%x{git rev-parse HEAD}
.
gsub
(
/\n/
,
""
)
s
[
"tar_version"
]
=
%x{tar --version | head -1}
.
gsub
(
/\n/
,
""
)
s
[
"tar_version"
]
=
%x{tar --version | head -1}
.
gsub
(
/\n/
,
""
)
File
.
open
(
"
#{
backup_path
}
/backup_information.yml"
,
"w+"
)
do
|
file
|
File
.
open
(
"
#{
Gitlab
.
config
.
backup_path
}
/backup_information.yml"
,
"w+"
)
do
|
file
|
file
<<
s
.
to_yaml
.
gsub
(
/^---\n/
,
''
)
file
<<
s
.
to_yaml
.
gsub
(
/^---\n/
,
''
)
end
end
...
@@ -55,10 +41,10 @@ namespace :gitlab do
...
@@ -55,10 +41,10 @@ namespace :gitlab do
# delete backups
# delete backups
print
"Deleting old backups... "
print
"Deleting old backups... "
if
backup_keep_time
>
0
if
Gitlab
.
config
.
backup_keep_time
>
0
file_list
=
Dir
.
glob
(
"*_gitlab_backup.tar"
).
map
{
|
f
|
f
.
split
(
/_/
).
first
.
to_i
}
file_list
=
Dir
.
glob
(
"*_gitlab_backup.tar"
).
map
{
|
f
|
f
.
split
(
/_/
).
first
.
to_i
}
file_list
.
sort
.
each
do
|
timestamp
|
file_list
.
sort
.
each
do
|
timestamp
|
if
Time
.
at
(
timestamp
)
<
(
Time
.
now
-
backup_keep_time
)
if
Time
.
at
(
timestamp
)
<
(
Time
.
now
-
Gitlab
.
config
.
backup_keep_time
)
%x{rm
#{
timestamp
}
_gitlab_backup.tar}
%x{rm
#{
timestamp
}
_gitlab_backup.tar}
end
end
end
end
...
@@ -70,11 +56,13 @@ namespace :gitlab do
...
@@ -70,11 +56,13 @@ namespace :gitlab do
end
end
# Restore backup of gitlab system
desc
"GITLAB | Restore a previously created backup"
desc
"GITLAB | Restore a previously created backup"
task
:backup_restore
=>
:environment
do
task
:backup_restore
=>
:environment
do
Dir
.
chdir
(
backup_path
)
Dir
.
chdir
(
Gitlab
.
config
.
backup_path
)
# check for existing backups in the backup dir
file_list
=
Dir
.
glob
(
"*_gitlab_backup.tar"
).
each
.
map
{
|
f
|
f
.
split
(
/_/
).
first
.
to_i
}
file_list
=
Dir
.
glob
(
"*_gitlab_backup.tar"
).
each
.
map
{
|
f
|
f
.
split
(
/_/
).
first
.
to_i
}
puts
"no backup found"
if
file_list
.
count
==
0
puts
"no backup found"
if
file_list
.
count
==
0
if
file_list
.
count
>
1
&&
ENV
[
"BACKUP"
].
nil?
if
file_list
.
count
>
1
&&
ENV
[
"BACKUP"
].
nil?
...
@@ -85,12 +73,13 @@ namespace :gitlab do
...
@@ -85,12 +73,13 @@ namespace :gitlab do
tar_file
=
ENV
[
"BACKUP"
].
nil?
?
File
.
join
(
file_list
.
first
.
to_s
+
"_gitlab_backup.tar"
)
:
File
.
join
(
ENV
[
"BACKUP"
]
+
"_gitlab_backup.tar"
)
tar_file
=
ENV
[
"BACKUP"
].
nil?
?
File
.
join
(
file_list
.
first
.
to_s
+
"_gitlab_backup.tar"
)
:
File
.
join
(
ENV
[
"BACKUP"
]
+
"_gitlab_backup.tar"
)
if
!
File
.
exists?
(
tar_file
)
unless
File
.
exists?
(
tar_file
)
puts
"The specified backup doesn't exist!"
puts
"The specified backup doesn't exist!"
exit
1
;
end
end
print
"Unpacking backup... "
print
"Unpacking backup... "
if
!
Kernel
.
system
(
"tar -xf
#{
tar_file
}
"
)
unless
Kernel
.
system
(
"tar -xf
#{
tar_file
}
"
)
puts
"[FAILED]"
.
red
puts
"[FAILED]"
.
red
exit
1
exit
1
else
else
...
@@ -129,6 +118,7 @@ namespace :gitlab do
...
@@ -129,6 +118,7 @@ namespace :gitlab do
################################# REPOSITORIES #################################
################################# REPOSITORIES #################################
task
:repo_dump
=>
:environment
do
task
:repo_dump
=>
:environment
do
backup_path_repo
=
File
.
join
(
Gitlab
.
config
.
backup_path
,
"repositories"
)
FileUtils
.
mkdir_p
(
backup_path_repo
)
until
Dir
.
exists?
(
backup_path_repo
)
FileUtils
.
mkdir_p
(
backup_path_repo
)
until
Dir
.
exists?
(
backup_path_repo
)
puts
"Dumping repositories:"
puts
"Dumping repositories:"
project
=
Project
.
all
.
map
{
|
n
|
[
n
.
name
,
n
.
path_to_repo
]
}
project
=
Project
.
all
.
map
{
|
n
|
[
n
.
name
,
n
.
path_to_repo
]
}
...
@@ -144,6 +134,7 @@ namespace :gitlab do
...
@@ -144,6 +134,7 @@ namespace :gitlab do
end
end
task
:repo_restore
=>
:environment
do
task
:repo_restore
=>
:environment
do
backup_path_repo
=
File
.
join
(
Gitlab
.
config
.
backup_path
,
"repositories"
)
puts
"Restoring repositories:"
puts
"Restoring repositories:"
project
=
Project
.
all
.
map
{
|
n
|
[
n
.
name
,
n
.
path_to_repo
]
}
project
=
Project
.
all
.
map
{
|
n
|
[
n
.
name
,
n
.
path_to_repo
]
}
project
<<
[
"gitolite-admin.git"
,
File
.
join
(
File
.
dirname
(
project
.
first
.
second
),
"gitolite-admin.git"
)]
project
<<
[
"gitolite-admin.git"
,
File
.
join
(
File
.
dirname
(
project
.
first
.
second
),
"gitolite-admin.git"
)]
...
@@ -161,6 +152,7 @@ namespace :gitlab do
...
@@ -161,6 +152,7 @@ namespace :gitlab do
###################################### DB ######################################
###################################### DB ######################################
task
:db_dump
=>
:environment
do
task
:db_dump
=>
:environment
do
backup_path_db
=
File
.
join
(
Gitlab
.
config
.
backup_path
,
"db"
)
FileUtils
.
mkdir_p
(
backup_path_db
)
until
Dir
.
exists?
(
backup_path_db
)
FileUtils
.
mkdir_p
(
backup_path_db
)
until
Dir
.
exists?
(
backup_path_db
)
puts
"Dumping database tables:"
puts
"Dumping database tables:"
ActiveRecord
::
Base
.
connection
.
tables
.
each
do
|
tbl
|
ActiveRecord
::
Base
.
connection
.
tables
.
each
do
|
tbl
|
...
@@ -179,6 +171,7 @@ namespace :gitlab do
...
@@ -179,6 +171,7 @@ namespace :gitlab do
end
end
task
:db_restore
=>
:environment
do
task
:db_restore
=>
:environment
do
backup_path_db
=
File
.
join
(
Gitlab
.
config
.
backup_path
,
"db"
)
puts
"Restoring database tables:"
puts
"Restoring database tables:"
Rake
::
Task
[
"db:reset"
].
invoke
Rake
::
Task
[
"db:reset"
].
invoke
Dir
.
glob
(
File
.
join
(
backup_path_db
,
"*.yml"
)
).
each
do
|
dir
|
Dir
.
glob
(
File
.
join
(
backup_path_db
,
"*.yml"
)
).
each
do
|
dir
|
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment