GitLab迁移大作战

故事背景:

公司计划搞持续化集成,而从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab中,因此我不得不面对一个问题,升级!

目前环境:

系统环境:Centos 6.7x64

软件版本:Gitlab 源码安装7.14.3版本

目标环境:

系统环境:Centos 7.2x64

软件版本:GitLab 9.3.6 omnibus

升级步骤规划:

  1. 升级7.14.3 源码安装到omnibus 7.14.3

    1. 安装新的操作系统CentOS Linux release 7.2.1511 (Core)
    2. 在Centos7系统上安装gitlab omnibus 7.14.3版本
    3. 迁移旧数据到新的服务器上
  2. 升级gitlab  omnibus 7.14.3版 到gitlab omnibus 9.3.6版,并进行测试等内容

背景介绍完毕,开始搞起来!

一、安装新环境

  1. 安装Centos 7.2系统(略,详情参考百度或者google)

    1)为了避免更换服务器导致大家的known_hosts失效,需要将原gitlab服务/etc/ssh/ssh_host_rsa_key*两个文件复制到新服务器上

    2)同时需要绑定hosts:127.0.0.1 gitlab.xxx.com到本机,以防之后的一些操作影响正常环境

二、在新系统部署gitlab omnibus 7.14.3版本

2.1. 安装依赖ruby 2.3.0 、git-1.8.4

# 安装git 1.8.4
cd /data0/download/
wget https://github.com/git/git/archive/v1.8.4.tar.gz
tar xf v1.8.4.tar.gz
cd git-1.8.4
make prefix=/usr/local/git all
make prefix=/usr/local/git install

echo ‘export PATH=/usr/local/git/bin:$PATH‘ >> /etc/profile
source /etc/profile

# 安装ruby 2.3.0
yum -y install gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel sqlite-devel
 # install RVM
curl -L get.rvm.io | bash -s stable

source /etc/profile.d/rvm.sh
rvm reload
rvm requirements run
 # intall 
rvm install 2.3.0 --disable-binary
rvm use 2.3.0 --default
ruby --version
# 输出ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]表示安装成功

2.2. 安装gitlab omnibus 7.14.3版本

2.2.1 安装依赖

yum -y install curl openssh-server openssh-clients postfix cronie
chkconfig postfix on
service postfix start
lokkit -s http -s ssh # 待定,防火墙已关闭,所以不需要执行

2.2.2 安装Gitlab前的准备

# 获取安装包
wget -O gitlab-ce-7.14.3-ce.0.el7.x86_64.rpm 

# 创建程序目录(未来程序安装到/var/opt/gitlab下,为了防止仓库、日志等信息占据根目录太大空间,通过软链的方式链接到该目录,实际消耗数据盘空间)
mkdir /data0/app/gitlab
ln -s /data0/app/gitlab /var/opt/

mkdir /data0/logs/gitlab/ 
ln -s /data0/logs/gitlab /var/log/   #默认gitlab日志在/var/log/gitlab下

2.2.3 开始安装

rpm -ivh gitlab-ce-7.14.3-ce.0.el7.x86_64.rpm

sudo gitlab-ctl reconfigure #执行完这条命令后,gitlab已经开始运行
# 接下来修改配置文件/etc/gitlab/gitlab.rb 
cd /etc/gitlab
cp gitlab.rb gitlab.rb.default # 备份源文件
vi gitlab.rb 
...过程略,配置文件需要根据个人公司需求进行修改...
# 配置完成后,再次运行sudo gitlab-ctl reconfigure 即可完成配置更新

此时的gitlab omnibus 7.14.3 已经安装完成,只不过里边空空如夜,没有数据而已。下一步就是迁移数据

三、迁移

3.1 停止新系统,备份数据

# 以下操作以git用户执行,并且git具有sudo权限
sudo /etc/init.d/gitlab stop
bundle exec rake gitlab:backup:create RAILS_ENV=production
# 执行完成之后,会在/home/git/gitlab/tmp/backups目录下生成备份文件,名称为1499741162_gitlab_backup.tar的格式
# 备份数据库
mysqldump --compatible=postgresql --default-character-set=utf8 -r gitlabhq_production.mysql -u root gitlab -p

3.2 将备份数据传输到新服务器

scp 1499741162_gitlab_backup.tar [email protected]:/data0/app/gitlab/backups
scp gitlabhq_production.mysql [email protected]:/data0/app/gitlab/backups

3.3 在新服务器上将mysqldump 文件转换为Postgresql 文件(omnibus按照的gitlab使用Postgresql做数据库,并且官方也推荐这么做)

# root身份执行
cd /data0/app/gitlab/backups
mdkir postgresql
mv 1499741162_gitlab_backup.tar gitlabhq_production.mysql postgresql/
cd postgresql
git clone https://github.com/gitlabhq/mysql-postgresql-converter.git -b gitlab
mkdir db
# 还需要修改db_converter.py文件,里边的第25行:num_lines = int(subprocess.check_output(["wc", "-l", input_filename]).strip().split()[0]) 会执行错误,当然也可以执行定义num_lines为shell下获取的wc -l db/database.sql的值
python mysql-postgresql-converter/db_converter.py gitlabhq_production.mysql db/database.sql
ed -s db/database.sql < mysql-postgresql-converter/move_drop_indexes.ed
gzip db/database.sql
tar rf 1499741162_gitlab_backup.tar db/database.sql.gz # 将数据库文件一起打包入备份文件
chmod 777 1499741162_gitlab_backup.tar
mv 1499741162_gitlab_backup.tar ../

3.4 恢复备份

LC_ALL="en_US.UTF-8" sudo gitlab-rake gitlab:backup:restore BACKUP=1499741162
chmod -R ug+rwX,o-rwx /var/opt/gitlab/git-data/repositories
chmod -R ug-s /var/opt/gitlab/git-data/repositories
find /var/opt/gitlab/git-data/repositories -type d -print0 | sudo xargs -0 chmod g+s
sudo gitlab-rake gitlab:satellites:create RAILS_ENV=production
sudo gitlab-ctl restart
sudo gitlab-rake gitlab:check

执行到这步,数据已经成功迁移到了新的环境中。接下来测试发现如下几个问题,

问题1:需要将就服务器的gitlab用户的authorized_keys文件转移到新服务器,并且修改文件中gitlab-shell路径:/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell

问题2:gitlab pull正常,但push无法提交:

现象:git push时报“The project you were looking for could not be found.”的错误

解决:编辑/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/gitaccess.rb 第60行,将return buildstatusobject(false, ‘The project you were looking for could not be found.‘) 改为 return buildstatus_object(true) 恢复。这应该是一个BUG,但是升级到9.3.6版本后,发现这个文件已经被移除,不存在更新问题了。

至此,新系统环境下的gitlab omnibus 7.14.3 就可以开始工作了。如果还有其他问题,需要单独解决。

四、升级到GitLab 9.3.6版本

# 备份
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
sudo gitlab-rake gitlab:backup:create
# 升级(官方说,升级过程中,最好保持启动状态,我是关闭状态下升级的,也没问题)
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo touch /etc/gitlab/skip-auto-migrations
sudo yum update  gitlab-ce

sudo gitlab-ctl pg-upgrade
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
echo never > /sys/kernel/mm/transparent_hugepage/enabled
sysctl -p
时间: 2024-10-10 04:08:05

GitLab迁移大作战的相关文章

Expo大作战(二十九)--expo sdk api之registerRootComponent(注册跟组件),ScreenOrientation(屏幕切换),SecureStore,

简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981 [之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发] 相关文章: Expo大作战(一)--什么是expo,如何安装expo clinet和xde,xd

cocos2d-x 3.2 之 三消类游戏——万圣大作战

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 首先祝大家万圣节快乐呀~ 紧赶慢赶,第二款cocos2d-x游戏终于出来了. 万圣大作战 三消类的游戏 下面是游戏的一些截图~ 主界面 设置界面: 游戏界面: 结束界面:         和第一款2048相比, 多了 分数的本地存储(未加密) 音乐和音效的 设置

vijos P1836HYS与七夕节大作战 (01背包之2--转换dp对象)

题目:vijos P1836HYS与七夕节大作战 题意: n个对象,每价值为vi,比重pi,总容量100 分析: 类似背包重量的比重pi为实数,不能作为下标,所以改变dp对象 将求容量100内的最大价值 → 求相应价值的最小容量, 则容量第一个≤100的价值,为符合条件的价值最大的值 状态:dp[v]:价值为v的最小容积 转移方程:         dp[V] = min(dp[V], dp[V-v[i]] + p[i]); 核心: for(i = 1; i<=n; i++) {     for

贪吃蛇大作战的一点感悟

春节过罢,闲来无事,玩了两日贪吃蛇大作战,之前玩过球球大作战,感觉球球大作战玩法比较多,也比较难入门.而贪吃蛇大作战就简单多了,就两个原则:1不断地吃食物,让自己长大.2尽量避免撞到别人身上,以致于死亡.抱着这样的原则,我就开始了自己的贪吃之路. 刚开始的时候是小心翼翼地吃游戏自带的豆豆,也不敢去击杀别人,还经常撞到别人身上,所以更加小心地玩,自己长大了才敢去围追堵截别人,这样不知不觉居然就能玩到9000多长度了.接着再玩下去就有点心急了,一方面是有前边的经验,感觉也不太难嘛,另一方面想更快地打

[知了堂学习笔记]_用JS制作《飞机大作战》游戏_第2讲(四大界面之间的跳转与玩家飞机的移动)

一.通过点击按钮事件,实现四大界面之间的跳转: (一)跳转的思路: 1.打开软件,只显示登录界面(隐藏游戏界面.暂停界面.玩家死亡界面) 2.点击微信登录(QQ登录)跳转到游戏界面,隐藏登录界面 3.点击暂停,弹出具有透明度的暂停界面 4.点击暂停界面的开始按钮,隐藏暂停界面,调用开始方法(点击登录跳转的方法): 5.点击暂停界面的退出游戏,只显示登录界面,隐藏其他界面: 6.游戏结束界面,该界面的跳转目前还不能通过游戏实现,可以先建设(根据上一讲的游戏界面图片制作). 7.点击游戏结束界面的开

刺猬大作战(游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4)

游戏特性[编辑] 游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4[2]. 0.9.12开始支持实时动态缩放游戏画面. 个性化[编辑] 刺猬大作战有着高度定制性 游戏模式:游戏方式可以发生很大变化,比如棒球模式中,所有刺猬都有保护膜无法损伤,只能击入水中退场 可以制作语音,游戏已经包括如海盗,唱诗风格等五种风格,使用开放的ogg格式 纸娃娃系统,不只可以为每个队员命名,还可以用头饰分辨每个人,已有超过90种头部装饰分辨每个刺猬 支持定制团队背景和离场的动画效果 武器[

贪吃蛇大作战canvas实现(手机触屏操作)--地图逻辑

//html部分 <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <title>贪吃蛇大作战</titl

websocket实现简化版球球大作战

websocket是一种全新的网络协议(虽然就我接触编程的时间点来说不算新了),在服务器端和客户端频繁通信时,相较与ajax轻便很多,球球大作战这个小项目如果在网页上实现,必然使用websocket而非ajax. 由于是个小游戏,所以,我也没用上什么框架或者数据库,服务器端用nodejs构建,客户端就用js写. 接下来写写项目中遇到的一些需求难题以及解决方案.(姑且将我写出错误的地方叫做难题吧) 1.如何将所有用户的小球都展现在每一个客户端的画面上? 每一个用户参与游戏后,都用构造函数生成一个小

gitlab 迁移 备份

gitlab 迁移 备份 一.基本步骤 使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份: gitlab-rake gitlab:backup:create 使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1393513186_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1393513186是备份创建的日期. Gitlab