GitLab迁移升级大作战

2024-05-14 12:13:32

故事背景:

公司计划搞持续化集成,而从 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 installecho '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 stablesource /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 https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-7.14.3-ce.0.el7.x86_64.rpm/download # 创建程序目录(未来程序安装到/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.rpmsudo 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 root@172.28.48.35:/data0/app/gitlab/backups
scp gitlabhq_production.mysql root@172.28.48.35:/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-cesudo 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

整个升级完成。

另外,为了让gitlab所有日志都存放规范化,我还更改了服务日志的路径,

cd /opt/gitlab/ && find . -name "run" -type f  |xargs -i sed -i 's#/var/log#/data0/logs#g' {}

五、安装gitlab-ci-multi-runner

1. 获取仓库地址
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
2. 安装
yum install gitlab-ci-multi-runner
3. 注册到Gitlab,由于我是admin,因此我创建的shared runner,单独项目建议创建special runner
gitlab-ci-multi-runner register
4. 本地服务注册
mkdir /data0/build && chown -R lhop.lhop /data0/build && gitlab-ci-multi-runner install --user lhop --working-directory /data0/build
# 之后的所有的集成构建任务,都会在/data0/build/目录下进行生成,确保user 用户对于/data0/build目录具有项目部署

之后就没啥了,持续集成方面的其他配置,需要自己去琢磨了。另外需要注意的地方是,默认情况下,非tag提交的项目,是不会进行集成构建的,会提示错误job is struk xxxx。

如果想让没有打tag标签的项目也进行构建,需要修改admin area->runners->edit->Run untagged jobs 打对√

# Git 迁移参考链接

http://www.linuxidc.com/Linux/2016-04/130194.htm  GitLab 7.9 升级到 8.0.1

https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/update/7.14-to-8.0.md

https://gitlab.com/jiaoyiping/gitlab/blob/8-13-5-zh/doc/install/installation.md

http://www.cnblogs.com/jiaoyiping/p/6112290.html   生产环境的gitlab大版本升级思路(从7.x升级到8.x)

https://docs.gitlab.com/omnibus/

https://docs.gitlab.com.cn/omnibus/README.html

http://opjasee.com/2016/01/28/gitlab-upgrade.html  Gitlab升级记录

# gitlab-runner相关参考地址

https://gitlab.com/gitlab-org/gitlab-ci-multi-runner

https://docs.gitlab.com/ce/ci/runners/#registering-a-shared-runner 注册runner

http://scarletsky.github.io/2016/07/29/use-gitlab-ci-for-continuous-integration/ Gitlab-CI 相关概念介绍

http://www.jianshu.com/p/2b43151fb92e  GitLab-CI与GitLab-Runner的关系,以及创建、shared 和special runner的区别

http://doc.gitlab.com/ce/ci/yaml/README.html 如何写自动构建的 gitlab-ci.yml文件

转载于:https://blog.51cto.com/jishuweiwang/1948881

GitLab迁移升级大作战相关推荐

  1. CentOS下gitlab迁移和升级

    Gitlab迁移 迁移的整体思路是: 1.在新服务器上安装相同版本的gitlab 2.将备份生成的备份文件发送到新服务器的相同目录下 查看旧版本Gitlab的版本号 [root@gitlab ~] c ...

  2. gitlab 迁移、升级打怪之路:8.8.5-- 8.10.8 -- 8.17.8 -- 9.5.9 -- 10.1.4 -- 10.2.5

    gitlab 迁移.升级打怪之路:8.8.5--> 8.10.8 --> 8.17.8 --> 9.5.9 --> 10.1.4 --> 10.2.5 gitlab 数据 ...

  3. Expo大作战(十八)--expo如何发布成独立应用程序,打包成apk或者ipa,发布到对应应用商店...

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  4. 《球球大作战》游戏优化之路(上)

    自从2015年<球球大作战>发布以来,现已拥有五亿多的玩家.如此庞大的玩家群体,对游戏的画面,性能要求是非常高的.在Unite Shanghai 2019大会中,<球球大作战> ...

  5. 贪吃蛇大作战html5,贪吃蛇大作战5.0.1

    贪吃蛇大作战5.0.1版本是一款用心制作的休闲多人竞技手游,贪吃蛇大作战5.0.1版本游戏吃掉无数对手和食物,各种混乱任务奖励,精致的皮肤效果最为华丽,解锁新地图场景.新颖有趣的通关方式实现了您的所有 ...

  6. oracle mysql增量迁移_深入浅出XTTS:Oracle数据库迁移升级利器

    内容来源:2017年3月11日,新炬网络高级工程师杨光在"DBAplus北京数据库技术沙龙"进行<深入浅出XTTS:Oracle数据库迁移升级利器>演讲分享.IT 大咖 ...

  7. 2020级C语言大作业 - 丛林大作战

    丛林大作战_C语言大作业 分享20级同学大一上学期用C语言(及少量C++)实现的丛林大作战游戏.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:http ...

  8. 欢乐大作战服务器维护,欢乐大作战

    欢乐大作战是一款全新的佛系放置挂机手游.采用美式Q版动漫画法,看起来可爱清新,在游戏中动物们原先的家园遭受污染,为寻找新的水源而踏上未知的旅程.玩家可以选择多种强力的职业,放置挂机的休闲玩法让你离线也 ...

  9. XTTS,又一个值得你重视的Oracle数据库迁移升级利器

    嘉宾简介 杨志洪 [DBA+社群]上海发起人 数据管理专家.Oracle ACE.OCM. SHOUG/ZJOUG核心成员.DAMA会员/CCF会员,译著<Oracle核心技术>. 在Or ...

  10. 世界杯流量大作战,来看各路品牌如何玩转世界杯营销?

    世界杯流量大作战,来看各路品牌如何玩转世界杯营销? 2022年,卡塔尔世界杯于11月21日正式开幕. 首次在北半球的冬季举办,首次由从未进入过世界杯的中东国家举办,也是第二次在亚洲举办的世界杯足球赛, ...

最新文章

  1. iOS 工程师被要求写小程序,过分吗?| 每日趣闻
  2. C#使用SQL语句时候的万用密码问题
  3. boost::locale::utf8_codecvt用法的测试程序
  4. MySQL -> ES 数据同步 配置步骤
  5. 2018-2019-2 网络对抗技术 20165305 Exp6 信息搜集与漏洞扫描
  6. 用云原生的思维践行云原生,华为云深耕数字化,一切皆服务
  7. lua jit java jit_Lua JIT 2.0 发布了,一百五十倍的性能提升!
  8. Swagger使用————接口参数注解的使用缺陷
  9. 玩转Redis集群(下)
  10. 服务器上把计算机放桌面,远程服务器这么显示在电脑桌面
  11. 编译原理---NFA转化为DFA---DFA最小化(自己看)
  12. 基于Cocos2d-x开发guardCarrot--7 《保卫萝卜2》关卡选择页面开发
  13. 机器视觉应该先看什么书?
  14. 处理器仿存带宽_CPU,内存,主板带宽是怎么计算的?网上帖子说内存和主板的带宽要大于等于CPU带宽,充分利用CPU...
  15. Java基础面试题(史上最全基础面试题,精心整理100家互联网企业面经)
  16. django 命令行创建项目app
  17. MAC M1/M2安装ADOBE等第三方软件问题终极解决 “开启任何来源”“无法检查更新,请确认您已接入互联网”“移除下载镜像的Quarantine属性” “闪退”【MACBOOK】
  18. python-赫-day02
  19. c++椭圆最小二乘法原理_利用最小二乘法拟合椭圆方程的理论推导,附有matlab代码...
  20. 计算机853调剂,北京科技大学853电路分析基础考研大纲

热门文章

  1. 各个浏览器的详细信息
  2. 无迹粒子滤波算法 UPF
  3. 跨境电商如何服务客户
  4. 基于ATMEGA128单片机的播种机控制系统
  5. 基于51单片机的酒精检测仪设计
  6. 软件是指示计算机运行所需的程序,计算机文化基础知识点
  7. access数据库为什么一直登陆_Access数据库创建用户登录
  8. 世界500强面试题----反应能力
  9. final 类和不可变类
  10. win7 无线网卡无法连接,启动wlan autoconfig 服务报错误1:函数不正确