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
iv
gitlab-ce
Commits
1b6c28b9
Commit
1b6c28b9
authored
Dec 23, 2012
by
Riyad Preukschas
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update output of gitlab:backup:resore
parent
430d3ad4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
39 additions
and
35 deletions
+39
-35
lib/tasks/gitlab/backup.rake
lib/tasks/gitlab/backup.rake
+39
-35
No files found.
lib/tasks/gitlab/backup.rake
View file @
1b6c28b9
...
@@ -5,6 +5,8 @@ namespace :gitlab do
...
@@ -5,6 +5,8 @@ namespace :gitlab do
# Create backup of GitLab system
# Create backup of GitLab system
desc
"GITLAB | Create a backup of the GitLab system"
desc
"GITLAB | Create a backup of the GitLab system"
task
:create
=>
:environment
do
task
:create
=>
:environment
do
warn_user_is_not_gitlab
Rake
::
Task
[
"gitlab:backup:db:create"
].
invoke
Rake
::
Task
[
"gitlab:backup:db:create"
].
invoke
Rake
::
Task
[
"gitlab:backup:repo:create"
].
invoke
Rake
::
Task
[
"gitlab:backup:repo:create"
].
invoke
...
@@ -22,23 +24,23 @@ namespace :gitlab do
...
@@ -22,23 +24,23 @@ namespace :gitlab do
end
end
# create archive
# create archive
print
"Creating backup archive:
#{
Time
.
now
.
to_i
}
_gitlab_backup.tar "
print
"Creating backup archive:
#{
Time
.
now
.
to_i
}
_gitlab_backup.tar
...
"
if
Kernel
.
system
(
"tar -cf
#{
Time
.
now
.
to_i
}
_gitlab_backup.tar repositories/ db/ backup_information.yml"
)
if
Kernel
.
system
(
"tar -cf
#{
Time
.
now
.
to_i
}
_gitlab_backup.tar repositories/ db/ backup_information.yml"
)
puts
"
[DONE]
"
.
green
puts
"
done
"
.
green
else
else
puts
"
[FAILED]
"
.
red
puts
"
failed
"
.
red
end
end
# cleanup: remove tmp files
# cleanup: remove tmp files
print
"Deleting tmp directories
...
"
print
"Deleting tmp directories
...
"
if
Kernel
.
system
(
"rm -rf repositories/ db/ backup_information.yml"
)
if
Kernel
.
system
(
"rm -rf repositories/ db/ backup_information.yml"
)
puts
"
[DONE]
"
.
green
puts
"
done
"
.
green
else
else
puts
"
[FAILED]
"
.
red
puts
"
failed
"
.
red
end
end
# delete backups
# delete backups
print
"Deleting old backups... "
print
"Deleting old backups
... "
if
Gitlab
.
config
.
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
|
...
@@ -46,15 +48,17 @@ namespace :gitlab do
...
@@ -46,15 +48,17 @@ namespace :gitlab do
%x{rm
#{
timestamp
}
_gitlab_backup.tar}
%x{rm
#{
timestamp
}
_gitlab_backup.tar}
end
end
end
end
puts
"
[DONE]
"
.
green
puts
"
done
"
.
green
else
else
puts
"
[SKIPPING]
"
.
yellow
puts
"
skipping
"
.
yellow
end
end
end
end
# Restore backup of GitLab system
# Restore backup of GitLab system
desc
"GITLAB | Restore a previously created backup"
desc
"GITLAB | Restore a previously created backup"
task
:restore
=>
:environment
do
task
:restore
=>
:environment
do
warn_user_is_not_gitlab
Dir
.
chdir
(
Gitlab
.
config
.
backup
.
path
)
Dir
.
chdir
(
Gitlab
.
config
.
backup
.
path
)
# check for existing backups in the backup dir
# check for existing backups in the backup dir
...
@@ -63,22 +67,22 @@ namespace :gitlab do
...
@@ -63,22 +67,22 @@ namespace :gitlab do
if
file_list
.
count
>
1
&&
ENV
[
"BACKUP"
].
nil?
if
file_list
.
count
>
1
&&
ENV
[
"BACKUP"
].
nil?
puts
"Found more than one backup, please specify which one you want to restore:"
puts
"Found more than one backup, please specify which one you want to restore:"
puts
"rake gitlab:backup:restore BACKUP=timestamp_of_backup"
puts
"rake gitlab:backup:restore BACKUP=timestamp_of_backup"
exit
1
;
exit
1
end
end
tar_file
=
ENV
[
"BACKUP"
].
nil?
?
File
.
join
(
"
#{
file_list
.
first
}
_gitlab_backup.tar"
)
:
File
.
join
(
ENV
[
"BACKUP"
]
+
"_gitlab_backup.tar"
)
tar_file
=
ENV
[
"BACKUP"
].
nil?
?
File
.
join
(
"
#{
file_list
.
first
}
_gitlab_backup.tar"
)
:
File
.
join
(
ENV
[
"BACKUP"
]
+
"_gitlab_backup.tar"
)
unless
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
;
exit
1
end
end
print
"Unpacking backup... "
print
"Unpacking backup
... "
unless
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
puts
"
[DONE]
"
.
green
puts
"
done
"
.
green
end
end
settings
=
YAML
.
load_file
(
"backup_information.yml"
)
settings
=
YAML
.
load_file
(
"backup_information.yml"
)
...
@@ -86,7 +90,7 @@ namespace :gitlab do
...
@@ -86,7 +90,7 @@ namespace :gitlab do
# restoring mismatching backups can lead to unexpected problems
# restoring mismatching backups can lead to unexpected problems
if
settings
[
:gitlab_version
]
!=
%x{git rev-parse HEAD}
.
gsub
(
/\n/
,
""
)
if
settings
[
:gitlab_version
]
!=
%x{git rev-parse HEAD}
.
gsub
(
/\n/
,
""
)
puts
"
gitlab_
version mismatch:"
.
red
puts
"
GitLab
version mismatch:"
.
red
puts
" Your current HEAD differs from the HEAD in the backup!"
.
red
puts
" Your current HEAD differs from the HEAD in the backup!"
.
red
puts
" Please switch to the following revision and try again:"
.
red
puts
" Please switch to the following revision and try again:"
.
red
puts
" revision:
#{
settings
[
:gitlab_version
]
}
"
.
red
puts
" revision:
#{
settings
[
:gitlab_version
]
}
"
.
red
...
@@ -97,11 +101,11 @@ namespace :gitlab do
...
@@ -97,11 +101,11 @@ namespace :gitlab do
Rake
::
Task
[
"gitlab:backup:repo:restore"
].
invoke
Rake
::
Task
[
"gitlab:backup:repo:restore"
].
invoke
# cleanup: remove tmp files
# cleanup: remove tmp files
print
"Deleting tmp directories
...
"
print
"Deleting tmp directories
...
"
if
Kernel
.
system
(
"rm -rf repositories/ db/ backup_information.yml"
)
if
Kernel
.
system
(
"rm -rf repositories/ db/ backup_information.yml"
)
puts
"
[DONE]
"
.
green
puts
"
done
"
.
green
else
else
puts
"
[FAILED]
"
.
red
puts
"
failed
"
.
red
end
end
end
end
...
@@ -114,26 +118,26 @@ namespace :gitlab do
...
@@ -114,26 +118,26 @@ namespace :gitlab do
task
:create
=>
:environment
do
task
:create
=>
:environment
do
backup_path_repo
=
File
.
join
(
Gitlab
.
config
.
backup
.
path
,
"repositories"
)
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
.
path
,
n
.
path_to_repo
]
}
project
=
Project
.
all
.
map
{
|
n
|
[
n
.
path
,
n
.
path_to_repo
]
}
project
<<
[
"gitolite-admin.git"
,
File
.
join
(
Gitlab
.
config
.
git_base_path
,
"gitolite-admin.git"
)]
project
<<
[
"gitolite-admin.git"
,
File
.
join
(
Gitlab
.
config
.
git_base_path
,
"gitolite-admin.git"
)]
project
.
each
do
|
project
|
project
.
each
do
|
project
|
print
"
- Dumping repository
#{
project
.
first
}
... "
print
"
#{
project
.
first
.
yellow
}
... "
if
Kernel
.
system
(
"cd
#{
project
.
second
}
> /dev/null 2>&1 && git bundle create
#{
backup_path_repo
}
/
#{
project
.
first
}
.bundle --all > /dev/null 2>&1"
)
if
Kernel
.
system
(
"cd
#{
project
.
second
}
> /dev/null 2>&1 && git bundle create
#{
backup_path_repo
}
/
#{
project
.
first
}
.bundle --all > /dev/null 2>&1"
)
puts
"
[DONE]
"
.
green
puts
"
done
"
.
green
else
else
puts
"
[FAILED]
"
.
red
puts
"
failed
"
.
red
end
end
end
end
end
end
task
:restore
=>
:environment
do
task
:restore
=>
:environment
do
backup_path_repo
=
File
.
join
(
Gitlab
.
config
.
backup
.
path
,
"repositories"
)
backup_path_repo
=
File
.
join
(
Gitlab
.
config
.
backup
.
path
,
"repositories"
)
puts
"Restoring repositories
:
"
puts
"Restoring repositories
...
"
project
=
Project
.
all
.
map
{
|
n
|
[
n
.
path
,
n
.
path_to_repo
]
}
project
=
Project
.
all
.
map
{
|
n
|
[
n
.
path
,
n
.
path_to_repo
]
}
project
<<
[
"gitolite-admin.git"
,
File
.
join
(
File
.
dirname
(
project
.
first
.
second
)
,
"gitolite-admin.git"
)]
project
<<
[
"gitolite-admin.git"
,
File
.
join
(
Gitlab
.
config
.
git_base_path
,
"gitolite-admin.git"
)]
project
.
each
do
|
project
|
project
.
each
do
|
project
|
print
"
- Restoring repository
#{
project
.
first
}
... "
print
"
#{
project
.
first
.
yellow
}
... "
FileUtils
.
rm_rf
(
project
.
second
)
if
File
.
dirname
(
project
.
second
)
# delete old stuff
FileUtils
.
rm_rf
(
project
.
second
)
if
File
.
dirname
(
project
.
second
)
# delete old stuff
if
Kernel
.
system
(
"cd
#{
File
.
dirname
(
project
.
second
)
}
> /dev/null 2>&1 && git clone --bare
#{
backup_path_repo
}
/
#{
project
.
first
}
.bundle
#{
project
.
first
}
.git > /dev/null 2>&1"
)
if
Kernel
.
system
(
"cd
#{
File
.
dirname
(
project
.
second
)
}
> /dev/null 2>&1 && git clone --bare
#{
backup_path_repo
}
/
#{
project
.
first
}
.bundle
#{
project
.
first
}
.git > /dev/null 2>&1"
)
permission_commands
=
[
permission_commands
=
[
...
@@ -141,9 +145,9 @@ namespace :gitlab do
...
@@ -141,9 +145,9 @@ namespace :gitlab do
"sudo chown -R
#{
Gitlab
.
config
.
ssh_user
}
:
#{
Gitlab
.
config
.
ssh_user
}
#{
Gitlab
.
config
.
git_base_path
}
"
"sudo chown -R
#{
Gitlab
.
config
.
ssh_user
}
:
#{
Gitlab
.
config
.
ssh_user
}
#{
Gitlab
.
config
.
git_base_path
}
"
]
]
permission_commands
.
each
{
|
command
|
Kernel
.
system
(
command
)
}
permission_commands
.
each
{
|
command
|
Kernel
.
system
(
command
)
}
puts
"
[DONE]
"
.
green
puts
"
done
"
.
green
else
else
puts
"
[FAILED]
"
.
red
puts
"
failed
"
.
red
end
end
end
end
end
end
...
@@ -156,9 +160,9 @@ namespace :gitlab do
...
@@ -156,9 +160,9 @@ namespace :gitlab do
backup_path_db
=
File
.
join
(
Gitlab
.
config
.
backup
.
path
,
"db"
)
backup_path_db
=
File
.
join
(
Gitlab
.
config
.
backup
.
path
,
"db"
)
FileUtils
.
mkdir_p
(
backup_path_db
)
unless
Dir
.
exists?
(
backup_path_db
)
FileUtils
.
mkdir_p
(
backup_path_db
)
unless
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
|
print
"
- Dumping table
#{
tbl
}
... "
print
"
#{
tbl
.
yellow
}
... "
count
=
1
count
=
1
File
.
open
(
File
.
join
(
backup_path_db
,
tbl
+
".yml"
),
"w+"
)
do
|
file
|
File
.
open
(
File
.
join
(
backup_path_db
,
tbl
+
".yml"
),
"w+"
)
do
|
file
|
ActiveRecord
::
Base
.
connection
.
select_all
(
"SELECT * FROM `
#{
tbl
}
`"
).
each
do
|
line
|
ActiveRecord
::
Base
.
connection
.
select_all
(
"SELECT * FROM `
#{
tbl
}
`"
).
each
do
|
line
|
...
@@ -167,25 +171,25 @@ namespace :gitlab do
...
@@ -167,25 +171,25 @@ namespace :gitlab do
file
<<
output
.
to_yaml
.
gsub
(
/^---\n/
,
''
)
+
"
\n
"
file
<<
output
.
to_yaml
.
gsub
(
/^---\n/
,
''
)
+
"
\n
"
count
+=
1
count
+=
1
end
end
puts
"
[DONE]
"
.
green
puts
"
done
"
.
green
end
end
end
end
end
end
task
:restore
=>
:environment
do
task
:restore
=>
:environment
do
backup_path_db
=
File
.
join
(
Gitlab
.
config
.
backup
.
path
,
"db"
)
backup_path_db
=
File
.
join
(
Gitlab
.
config
.
backup
.
path
,
"db"
)
puts
"Restoring database tables
:
"
puts
"Restoring database tables
(loading fixtures) ...
"
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
|
fixture_file
=
File
.
basename
(
dir
,
".*"
)
fixture_file
=
File
.
basename
(
dir
,
".*"
)
print
"
- Loading fixture
#{
fixture_file
}
...
"
print
"
#{
fixture_file
.
yellow
}
...
"
if
File
.
size
(
dir
)
>
0
if
File
.
size
(
dir
)
>
0
ActiveRecord
::
Fixtures
.
create_fixtures
(
backup_path_db
,
fixture_file
)
ActiveRecord
::
Fixtures
.
create_fixtures
(
backup_path_db
,
fixture_file
)
puts
"
[DONE]
"
.
green
puts
"
done
"
.
green
else
else
puts
"
[SKIPPING]
"
.
yellow
puts
"
skipping
"
.
yellow
end
end
end
end
end
end
...
...
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