gitab的升级的前置条件就是已经安装好了和旧的gitab服务器相同版本的Omnibus gitlab。source源码安装的gitlab升级到最新的gitlab的Omnibus版本,操作步骤是:

    1.source源码安装的gitlab更改成相同版本的Omnibus版本的gitlab。

      source源码安装的gitlab的版本是gitlab 7.14.3;MySQL是5.6。

    2.Omnibus版本的gitlab升级到最新版本。

      下载最新版本的gitlab的CE的rpm包,然后直接yum localinstall安装即可。


一.旧服务器,source源码安装的gitlab的备份。

    1.关闭gitlab服务

         su - git

         sudo /etc/init.d/gitlab stop

    2.备份最新的数据

        su - git

        cd /home/git/gitlab/

        sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production

        #上述命令执行完成之后会在gitlab下的tmp/backup/目录下面获取一个前缀是时间戳的tar.gz压缩文件,这个文件就是备份了数据库信息已经git仓库,wiki信息。

    3.备份数据库,以postgresql的格式备份出来

        mysqldump --compatible=postgresql --default-character-set=utf8 -r gitlabhq_production.mysql -u gitlab gitlabhq_production -p

    4.mysql转postgresql。

        a).下载mysql转postgresql的工具集

            git clone https://github.com/gitlabhq/mysql-postgresql-converter.git -b gitlab

        b).mysql的sql语句转换成postgresql的sql语句

            python mysql-postgresql-converter/db_converter.py gitlabhq_production.mysql db/database.sql

        #因为备份之后的压缩文件解压之后,mysql的sql文件是放在一个db目录下面的database.sql文件,之所以创建db目录就是因为为了替换压缩文件里面的db/database.sql文件

        c).转储

            ed -s db/database.sql < mysql-postgresql-converter/move_drop_indexes.ed

        #上述命令的执行需要在python2.7或者以上的环境才能够执行

        d).替换压缩文件中的db/database.sql

            gzip db/database.sql

            tar rf 1448859844_gitlab_backup.tar db/database.sql.gz

二.新服务器的恢复

    1.安装好Omnibus gitlab 7.14.3

    2.拷贝备份到新服务器的备份目录

        scp 1448859844_gitlab_backup.tar root@new_gitlab:/home/gitlab/git-data/backup

    3.更改压缩文件权限

        chown git 1448859844_gitlab_backup.tar

    4.恢复备份        

        sudo gitlab-ctl stop unicorn

        sudo gitlab-ctl stop sidekiq

        LC_ALL="en_US.UTF-8" sudo gitlab-rake gitlab:backup:restore BACKUP=1448859844

        #加上这个变量,否则执行到gitlab:shell:setup重新生成authorized_keys时会报错

    5.更改git仓库权限信息

        sudo chmod -R ug+rwX,o-rwx /var/opt/gitlab/git-data/repositories

        sudo 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

    6.恢复git和项目信息

        sudo gitlab-rake gitlab:satellites:create RAILS_ENV=production

    7.启动gitlab

        sudo gitlab-ctl start

    8.gitab检测

        sudo gitlab-rake gitlab:check

三.新服务局升级到最新版本的gitlab

    yum localinstall gitlab-ce.*.rpm

    #yum安装会自动升级和清除原来旧版本的gitlab信息

    

当执行rpm进行升级时Gitlab会自动执行以下命令:


1. 关闭gitlab服务。

2. 使用当前的旧版本Gitlab创建备份(轻量级备份,仅备份数据库)

3. 运行gitlab-ctl reconfigure,进行必要的数据库更新迁移。

4. 重新启动Gitlab服务。


四.更改配置文件信息:

    1.更改gitlab的仓库文件目录。

        cd /etc/gitlab/

        vi gitlab.rb

        

        # git_data_dir "/var/opt/gitlab/git-data"  

        git_data_dir "/home/gitlab/git-data"

    2.更改gitlab的backup仓库      

        # gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

        gitlab_rails['backup_path'] = "/home/gitlab/backups"

    3.更改捆绑的Nginx的主配置文件nginx.conf信息

        nginx['custom_nginx_config'] = "include /var/opt/gitlab/*.conf;"

    4.更改捆绑的Nginx的子配置文件gitlab-http.conf文件信息

        nginx['custom_gitlab_server_config'] = " location = /wiki { \n return 301  http://git.moumentei.com/other/wiki/wikis/home; \n}\n"

    5.使用公司内部的SMTP邮件服务器  

        gitlab_rails['smtp_enable'] = true

        gitlab_rails['smtp_address'] = "smtp.server"

        gitlab_rails['smtp_port'] = 25

        gitlab_rails['smtp_authentication'] = false

        gitlab_rails['smtp_enable_starttls_auto'] = false

        gitlab_rails['gitlab_email_from'] = '[email protected]'

        gitlab_rails['gitlab_email_display_name'] = 'Gitlab'


#所有在/etc/gitlab/gitlab.rb配置文件里面的修改都需要执行gitlab-ctl reconfigure,重新读取配置文件信息。


升级完成之后,若是在web见面创建项目失败,可以执行以下命令,清除缓存信息

    sudo gitlab-rake cache:clear


五.关于hosts和known_hosts映射问题。

    因为更换了新的gitlab服务器,所以之前所有基于git-clone过的服务器在重新提交或者拉去的时候会报错,提示Host key verification failed.需要在knwon_hosts文件里面把包含旧的服务器信息的公钥删除,在重新ssh一次。