美文网首页linux运维相关
git、gitlab+jenkens版本控制的安装、升级与灾备

git、gitlab+jenkens版本控制的安装、升级与灾备

作者: Linux丶晨星 | 来源:发表于2019-10-29 20:12 被阅读0次

    @[toc]

    1. git仓库版本管理系统

    在这里插入图片描述

    环境

    [root@node1 tools]# cat /etc/redhat-release 
    CentOS Linux release 7.6.1810 (Core) 
    [root@node1 ~]# uname -a
    Linux node1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    

    Git的工作区、暂存区和版本库的含义

    • 工作区:就是你在电脑里能看到的目录。
    • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
    • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

    工作区、版本库中的暂存区和版本库之间的关系:

    在这里插入图片描述

    1.安装和配置 git

    #安装git
    [root@node1 ~]# yum install git -y
    
    #查看版本
    [root@node1 ~]# git --version 
    git version 1.8.3.1
    
    #git设置用户
    [root@node1 ~]# git config --global user.name "douer"
    [root@node1 ~]# git config --global user.email "245684979@qq.com"
    [root@node1 ~]# git config --global color.ui "true"
    
    
    
    
    #git仓库添加文件
    git add filename        --将文件添加到暂存区
    git add .               -- 将本地仓库所有的文件添加到暂存区
    git commit -m "提交说明" --使用commit将暂存区的文件进行提交到本地的分支,-m 代表本次的提交说明
    
    #查看工作区和缓存区的状态
    [root@node1 warehouse]# git status 
    # On branch master
    #
    # Initial commit
    #
    nothing to commit (create/copy files and use "git add" to track)
    

    2. 创建版本库

    #创建仓库目录
    [root@node1 ~]# mkdir /warehouse
    [root@node1 ~]# cd /warehouse/
    [root@node1 warehouse]# git init 
    Initialized empty Git repository in /warehouse/.git/
    [root@node1 warehouse]# ls .git/
    branches  config  description  HEAD  hooks  info  objects  refs
    

    3.git仓库添加文件

    git add filename        --将文件添加到暂存区
    git add .               -- 将本地仓库所有的文件添加到暂存区
    git commit -m "提交说明" --使用commit将暂存区的文件进行提交到本地的分支,-m 代表本次的提交说明
    
    #查看工作区和缓存区的状态
    git status 
    
    #练习测试
    [root@node1 warehouse]# echo  88888 >> file1
    [root@node1 warehouse]# git add .
    [root@node1 warehouse]# git commit -m 'add one file'
    [master (root-commit) 76dd535] add one file
     1 file changed, 1 insertion(+)
     create mode 100644 file1
    

    4. git 修改文件名称并提交

    git mv file1 file3
    git commit -m 'change file name'
    
    在这里插入图片描述

    5. git的文件对比

    git diff file1   #本地目录和缓冲去文件对比
    git diff --cached file1   #缓冲区文件和仓库文件对比
    
    在这里插入图片描述

    6. 实现回退功能

    #查看回退版本
    git log  --oneline
    
    #查看所有历史版本
    git reflog --oneline
    
    #回退
    git reset --hard <版本ID号>
    
    image
    image

    撤回

    [root@node1 warehouse]# echo  888888 >> file2
    [root@node1 warehouse]# git diff file2
    diff --git a/file2 b/file2
    index c488b79..18fb37c 100644
    --- a/file2
    +++ b/file2
    @@ -1,2 +1,3 @@
     66666
     豆二豆二
    +888888
    [root@node1 warehouse]# git checkout file2
    [root@node1 warehouse]# git diff file2
    [root@node1 warehouse]# cat file2 
    66666
    豆二豆二
    

    撤销修改的文件

    提交到缓冲区的文件撤回
    git reset HEAD file2
    
    未add到缓冲区的文件撤回
    git checkout -- file2
    
    image

    7. git分支管理和策略

    分支管理的目的就是将当前已经可以发布模块放在一个分支,在另外一个分支进行进一步开发,开发完成后可以进行分支合并。

    在gitlab上默认的分支是master(主分支),也只有这一个分支,其他分支需要开发人员自行建立。

    #查看分支
    git branch    ----> * master
    
    #增加一个dev新分支
    git branch dev01
    
    #删除分支
    git branch -d <name>
    
    #切换dev分支
    git checkout dev01
    
    #合并分支
    git merge master
    
    #在开发分支上合并主分支
    git  merge master -m '注释'
    
    #切回主分支
    git checkout master
    
    #在主分支次合并开发分支
    git merge dev01 -m '注释'
    
    在这里插入图片描述 image

    实际开发时,应该按照以下几个原则进行开发

    • 1、master分支应该是非常稳定的,也就是仅用来发布新版本,平时不在上面干活
    • 2、开发都在dev分支,也就是说dev分支是不稳定的,到某个时候,比如发布版本的时候,将dev分支合并到master上,在master分支发布版本
    • 3、开发者可以在dev分支上开发,每个人都有自己的分支,最后往dev分支合并就可以了
    • 4、合并分支的时候,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,可以看出曾经做过合并,而fast forward则看不出来

    8.git查看提交历史

    #查看提交历史版本
    git log             #详细历史记录
    git log --oneline   #简洁查看
    git log  --graph    #查看历史中什么时候出现了分支、合并
    git log --reverse   #逆向显示版本日志
    git log --author=douer --oneline -5 #查找指定用户的提交日志并只显示5行
    git log --oneline --before={3.weeks.ago} --after={2019-09-28} --no-merges   
                                        #查找三周前且在九月二十八日之后的所有提交
    

    9. git标签管理

    发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。我们在发布一个版本的时候,会对应有一个commit, 但是这个commit可能是比较难记的,所以选择了一个记忆简单的方式 tag,例如v1.0 与某个commit绑定。

    标签就是给commit起一个别名,容易记忆

    首先,切换到需要打标签的分支上

    #给当前版本打标签
    git tag v1.2 
    
    #给任意版本打标签
    git tag -a v1.0 -m '注释,优化什么 修复Bug' <commit的ID>
    
    #删除标签
    git tag -d v1.2
    ====================================================
    [root@node1 warehouse]# git log --oneline
    7af745f add file6
    45d411e add file5
    6f7040f add file4
    ff8f205 first
    d53b968 add file2
    f8d3b95 change file1 name file3
    76dd535 add one file
    [root@node1 warehouse]# git tag 
    [root@node1 warehouse]# git tag v1.0
    [root@node1 warehouse]# git tag 
    v1.0
    [root@node1 warehouse]# git show v1.0 
    commit 90092050359637d73142254e6f9e813d2683b788
    Author: douer <245684979@qq.com>
    Date:   Mon Oct 28 14:08:07 2019 +0800
    
        file5
    
    diff --git a/file5 b/file5
    index 3c2df07..b53bca1 100644
    --- a/file5
    +++ b/file5
    @@ -1 +1 @@
    -9999
    +456456
    [root@node1 warehouse]# git tag -a v1.1 -m 'v1.1 add 机器人' 76dd535
    [root@node1 warehouse]# git tag 
    v1.0
    v1.1
    [root@node1 warehouse]# git show v1.1 
    tag v1.1
    Tagger: douer <245684979@qq.com>
    Date:   Mon Oct 28 14:25:25 2019 +0800
    
    v1.1 add 机器人
    
    commit ff8f2058237206f34be4670cc5822d3b70f333b5
    Author: douer <245684979@qq.com>
    Date:   Mon Oct 28 13:46:59 2019 +0800
    
        first
    
    diff --git a/file4 b/file4
    new file mode 100644
    index 0000000..e69de29
    

    扩展
    Git 打补丁-- patch 和 diff 的使用
    diff
    patch 打补丁,创建补丁,卸载补丁

    10. git远程仓库gitee—码云

    在这里插入图片描述

    git克隆 码云网站复制项目链接

    [root@node1 warehouse]# git clone https://gitee.com/fuhai/jpress.git
    Cloning into 'jpress'...
    remote: Enumerating objects: 59006, done.
    remote: Counting objects: 100% (59006/59006), done.
    remote: Compressing objects: 100% (18822/18822), done.
    remote: Total 59006 (delta 24997), reused 55226 (delta 23282)
    Receiving objects: 100% (59006/59006), 139.10 MiB | 927.00 KiB/s, done.
    Resolving deltas: 100% (24997/24997), done.
    
    在这里插入图片描述
    #创建ssh秘钥在码云上进行链接
    ssh-keygen -t rsa
    cat /root/.ssh/id_rsa.pub 
    cd /root/demo/
    ll
    git remote add origin git@gitee.com:linuxcx/linux.git
    git push -u origin master
    

    11. git导出代码的方法

    #git archieve
    git archive --format tar.gz --output "./output.tar.gz" master
    
    * 将master分支打包为output.tar.gz
    * --format 指明打包格式,若不指明此项,则根据--output中的文件名推断文件格式。
    * --output 指明输出包名
    
    #所以也可以将上述命令简化为:
    git archive --output "./output.tar.gz" master
    
    #可以使用"-l"参数获得支持的文件格式列表
    [root@node1 warehouse]# git archive -l
    tar
    tgz
    tar.gz
    zip
    
    #打包不同的分支或commit
    >如果想打包不同分支,只要使用不同分支名即可。比如有一个分支名为“dev01”,可以用如下命令将其打包。
    git archive --format tar.gz --output "./output.tar.gz" dev01
    
    >如果要打包某个commit,只要先使用git log找到相应的commit id, 再使用该commit id打包即可。
    git archive --format tar.gz --output "./output.tar.gz" 5ca16ac0d603603
    
    #打包某个目录
    >如果想打包master下的目录,可以用下面命令
    git archive --format tar.gz --output "./output.tar.gz" master <name1> <name2>
      
    
    #注意:打包建议在代码库的根目录下进行,不然会碰到各种问题
    

    12. git升级

    自带的git都是1.8.3.1版本的,比较老了,所以有时候需要升级一下git版本

    #测试环境
    [root@node1 tools]# git --version 
    git version 1.8.3.1
    [root@node1 tools]# cat /etc/redhat-release 
    CentOS Linux release 7.6.1810 (Core) 
    
    #安装依赖软件
    yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc -y
    yum install  gcc perl-ExtUtils-MakeMaker -y
    
    #卸载低版本git
    yum remove git -y
    
    #下载最新版本
    wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.23.0.tar.xz
    
    #进行编译安装最新版git
    [root@node1 warehouse]# cd /usr/local/src/
    [root@node1 src]# tar xf /server/tools/git-2.23.0.tar.xz 
    [root@node1 src]# cd git-2.23.0/
    [root@node1 git-2.23.0]# make prefix=/usr/local/git all
    [root@node1 git-2.23.0]# make prefix=/usr/local/git install
    [root@node1 git-2.23.0]# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile
    [root@node1 git-2.23.0]# . /etc/profile
    
    #查看最新版本
    [root@node1 git-2.23.0]# git --version
    git version 2.23.0
    


    2. GitLab分布式版本控制器

    GitLab简介
    GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

    由于Git的分布式特性,即使Gitlab不可用,开发人员仍然可以在本地提交代码。

    1. gitlab安装

    #配置base源和epel源
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    #下载并安装gitlab
    wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
    rpm -ivh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm 
    
    image
    #设置访问url和关闭prometheus
    [root@node1 tools]# vim /etc/gitlab/gitlab.rb 
    external_url 'http://douergitlab.com'
    prometheus_monitoring['enable'] = false
    
    #配置gitlab通过smtp发送邮件
    [root@node1 tools]# vim /etc/gitlab/gitlab.rb
      52 gitlab_rails['gitlab_email_enabled'] = true
      53 gitlab_rails['gitlab_email_from'] = '245684979@qq.com'
      54 gitlab_rails['gitlab_email_display_name'] = 'linux_gitlab'
    
    #配置mail邮件服务
     517 gitlab_rails['smtp_enable'] = true
     518 gitlab_rails['smtp_address'] = "smtp.qq.com"
     519 gitlab_rails['smtp_port'] = 25
     520 gitlab_rails['smtp_user_name'] = "245684979@qq.com"
     521 gitlab_rails['smtp_password'] = "<passwd>"
     522 gitlab_rails['smtp_domain'] = "smtp.qq.com"
     523 gitlab_rails['smtp_authentication'] = "login"
     524 gitlab_rails['smtp_enable_starttls_auto'] = true
     525 gitlab_rails['smtp_tls'] = true
    
    #重新加载配置文件_需要等待一会
    gitlab-ctl reconfigure
    

    浏览器访问域名
    http://www.douergitlab.com/

    在这里插入图片描述

    2.gitlab汉化

    #下载汉化包
    https://gitlab.com/xhang/gitlab
    
    gitlab-ctl stop
    tar xf gitlab-12-0-stable-zh.tar.gz
    \cp -a gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
    gitlab-ctl restart
    

    页面显示502,请耐心等待一会,重启的时间较久


    在这里插入图片描述 在这里插入图片描述

    3. gitlab-用户-用户组-项目之间的关系

    先创建用户组—>在基于用户组创建项目—>最后创建用户—>编辑用户组—>添加成员—>注意权限

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    ※4. gitlab灾备措施_备份恢复和迁移※

    备份恢复与迁移非常简单. 使用一条命令即可创建完整的Gitlab备份:

    4.1 备份

    [root@node1 ~]# gitlab-rake gitlab:backup:create
    [root@node1 ~]# ls /var/opt/gitlab/backups/
    1572333106_2019_10_29_11.9.12_gitlab_backup.tar
    

    /etc/gitlab/gitlab.rb 配置文件须备份
    /var/opt/gitlab/nginx/confnginx配置文件
    /etc/postfix/main.cfpostfix 邮件配置备份

    1. 设置Gitlab备份目录

    [root@node1 ~]# vim /etc/gitlab/gitlab.rb
    ...
    gitlab_rails['manage_backup_path'] = true   #管理备份路径
    gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" #备份路径
    gitlab_rails['backup_archive_permissions'] = 0644 #备份的默认权限为644
    gitlab_rails['backup_keep_time'] = 604800   #允许删除备份之前保留备份的持续时间(以秒为单位 默认7天)
    ...
    

    2.手动备份

    [root@node1 ~]# gitlab-rake gitlab:backup:create
    

    3.自动备份

    [root@node1 ~]# crontab -e
    #每天凌晨2点进行一次自动备份:通过crontab使用备份命令实现
    00 02 * * * /usr/bin/gitlab-rake gitlab:backup:create
    

    4.2 恢复

    # 停止相关数据连接服务
    [root@node1 ~]# gitlab-ctl stop unicorn
    [root@node1 ~]# gitlab-ctl stop sidekiq
    
    #编号备份中恢复,只需复制到日期即可
    [root@node1 ~]# gitlab-rake gitlab:backup:restore BACKUP=1572333106_2019_10_29_11.9.12
    
    #启动Gitlab
    [root@node1 ~]# gitlab-ctl start
    
    恢复成功 在这里插入图片描述

    4.3 迁移

    迁移如同备份与恢复的步骤一样, 只需要将老服务器/var/opt/gitlab/backups目录下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups即可


    需要注意的是新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同. 比如新服务器安装的是最新的11.9.11版本的Gitlab那么迁移之前, 最好将老服务器的Gitlab升级为11.9.11,基于最新版本的状态在进行备份

    /etc/gitlab/gitlab.rb gitlab 配置文件须迁移,迁移后需要调整数据存放目录
    /var/opt/gitlab/nginx/conf nginx配置文件目录须迁移

    #迁移到云主机的方法
    先备份,云主机要安装相同版本,恢复(记得把软件包留下来)
    
    #将旧机器上的备份文件同步过来后的操作步骤
    [root@node1 ~]#  gitlab-ctl stop unicorn
    [root@node1 ~]#  gitlab-ctl stop sidekiq
    [root@node1 ~]#  chmod 777 /var/opt/gitlab/backups/1572333106_2019_10_29_11.9.12_gitlab_backup.tar
    [root@node1 ~]#  gitlab-rake gitlab:backup:restore BACKUP=1572333106_2019_10_29_11.9.12
    

    5. gitlab常用命令

    gitlab-ctl start     # 启动所有 gitlab 组件;
    gitlab-ctl stop      # 停止所有 gitlab 组件;
    gitlab-ctl restart   # 重启所有 gitlab 组件;
    gitlab-ctl status    #查看服务状态;
    gitlab-ctl reconfigure      # 启动服务;
    vim /etc/gitlab/gitlab.rb   # 修改默认的配置文件;
    gitlab-rake gitlab:check SANITIZE=true --trace  #检查gitlab;
    gitlab-ctl tail             # 查看日志;
    

    6. gitlab主要配置文件目录

    主配置文件: /etc/gitlab/gitlab.rb
    文档根目录: /opt/gitlab
    默认存储库位置: /var/opt/gitlab/git-data/repositories
    Nginx配置文件: /var/opt/gitlab/nginx/conf/gitlab-http.conf
    Postgresql数据目录: /var/opt/gitlab/postgresql/data
    

    7. Gitlab普通用户通过ssh协议上传

    我们在clone代码的时候可以选择http协议,当然我们亦可以选择ssh协议来拉取代码。
    在本地git客户端生成ssh key,然后配置在gitlab里,而后使用ssh协议进行提交和拉取git远程仓库的代码。

    创建普通用户 李四 image image
    #在root用户下添加hosts解析
    [root@node1 ~]# vim /etc/hosts
    10.0.0.11  douergitlab.com
    
    #创建普通用户 lisi
    useradd lisi
    su - lisi 
    
    mkdir zx
    cd zx/
    git config --global user.name "李四"
    git config --global user.email "lichenxing0430@163.com"
    cp /etc/services .  # 用来测试的文件放到当前目录下
    
    #将生成ssh秘钥后添加
    [lisi@node1 zx]$ ssh-keygen -t rsa
    [lisi@node1 zx]$ cat ~/.ssh/id_rsa.pub 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDoBLv83m/JtEu7Kst47qwmYsCepkjcbl3OaBUvr0/47TmHfJ1fBFaQUOKMG61vAKuqKaQaoLGakpFQo8jyqe6XbgX0tKOgJs9IcoZegYLdNeRmqfUDoBqefurHitquNHnUhJCywvXgmzUQfnh+Ub07qTE0BIvbA2NLC1DloaJdsHbj8SsN0FasCcImu7wGlVol55tD+JdROy9SzFWD+bTeFROEPAV/3E4MCXAiZ4cpWoJe+3k2coxayKvmjdfFp/+fqOYtGmjkS4tUe3jZs8UJCvf5jwLZrXe2njAp4bDD2xGXqk9j1cWFnYLiqadCBIjf9M8EHlJRU19pb+p7Zf+N lisi@node1
    
    image
    #删除之前的origin配置
    git remote remove origin
    
    #生成origin传输协议为ssh,ssh协议地址到项目的详情页进行复制
    [lisi@node1 zx]$ git remote add origin git@douergitlab.com:lisi/zxzn.git
    [lisi@node1 zx]$ cat .git/config 
    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
    [remote "origin"]
        url = git@douergitlab.com:lisi/zxzn.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    
    #上传代码 V_1版本
    git init
    git remote add origin git@douergitlab.com:lisi/zxzn.git
    git add .
    git commit -m "V_1"
    git push -u origin master   #这里直接通过SSH协议上传了
    

    刷新网页查看

    在这里插入图片描述
    在这里插入图片描述

    8. gitlab的克隆 clone

    创建一个新的普通用户 王二


    image
    #创建一个普通用户wanger并生成ssh秘钥
    [root@node1 ~]# useradd wanger
    [root@node1 ~]# su - wanger 
    [wanger@node1 ~]$ ssh-keygen -t rsa
    [wanger@node1 ~]$ cat ~/.ssh/id_rsa.pub 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyGDctK6P41EnTvn+ubVGyTMpa77zU7h4HUF7XhJirrp+8LUXe6HwdXWDKtzz88Eqd/OISh+ihMqsF9Wrs6TBL09Mda7YkxHZAHKlprJF3sfAmgCb6GYjHKj/mw+teYcg3Mu1YGr3GnR5q0sQvWcCBqwJCMZmaK8a0gVmsbJ5Jq+6d9N5Peko/m+U7MY9iX/kWPaiNHJ9l2UoDwelV5UCaU0hfTYNspgVTFlAZbSoTsjnMenHJFhWmzXytjJh3KyU9GKq1VErcMhjR0Px601IHtj1uprkqs9MfF62SLSYtMG348IGHxcWA5UhIL8b9Zhxlg1UrHK/YKpAwfI+24dyj wanger@node1
    
    #使用李四用户的SSH克隆链接 第一次需要输入 yes
    [wanger@node1 ~]$ git clone git@douergitlab.com:lisi/zxzn.git
    [wanger@node1 ~]$ tree
    .
    └── zxzn
        └── services
    

    找到王二用户的个人邮箱
    lichenxing@in365robot.com

    9.gitlab版本升级

    参考资料1
    参考资料2
    参考资料3

    gitlab升级,最好要小版本跨,不要直接跳级
    官方规定在主要版本系列中首先到达最后一个次要版本,才能升级至下一个主要版本。
    V10--->V11.8---V11.11--->V12.0
    
    #关闭gitlab核心服务
    gitlab-ctl stop unicorn
    gitlab-ctl stop sidekiq
    gitlab-ctl stop nginx
    
    #备份
    gitlab-rake gitlab:backup:create
    
    #查看当前版本
    [root@node1 ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
    11.9.12
    
    #下载gitlab的rpm安装包进行升级
    cd /server/tools
    wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.11.8-ce.0.el7.x86_64.rpm
    rpm -Uvh gitlab-ce-11.11.8-ce.0.el7.x86_64.rpm
    cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
    11.11.8
    
    #访问重启后的gitlab,查看是否成功,继而升到最新版本
    wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm
    rpm -Uvh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
    
    #更新配置
    gitlab-ctl reconfigure
    gitlab-ctl restart
    
    #查看新版本
    cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 
    12.0.3
    

    10. svn迁移到Gitlab

    1.安装svn服务器,将svn中的数据迁移到git仓库
    git-svn
    git clone svn

    svn是一个中心化的版本控制工具,git是分布式的,每个人都可以有完整的代码仓库

    #安装svn
    yum install subversion -y
    mkdir /svn/repo -p
    
    #初始化仓库
    svnadmin create /svn/repo
    
    cd /svn/repo/conf
    vim  svnserve.conf
    [general]
    anon-access = none
    auth-access = write
    password-db = passwd
    authz-db = authz
    realm = /svn/repo
    [sasl]
    
    
    vim passwd
    [users]
    admin = 123456
    
    vim authz
    [/]
    admin = rw
    test = r
    
    启动svn服务
    svnserve -d -r /svn/repo
    
    #svn迁移到git
    yum  install  git-svn  -y
    git svn clone svn://10.0.0.11 --username=admin --no-metadata --authors-file=password.txt git
    
    cat password.txt
    admin=<245684979@qq.com>
    

    11. 忘记gitlab的root密码

    甚至也忘记了邮箱,或许是默认邮箱无法使用
    需要在服务器上面直接修改数据

    gitlab-rails console production
    
    user = User.where(id: 1).first
    user.password = 'secret_pass'
    user.password_confirmation = 'secret_pass'
    user.save!
    
    如下提示代表成功:
    irb(main):004:0> user.save!
    Enqueued ActionMailer::DeliveryJob (Job ID: 7dc9cc44-0296-4a62-8b9a-335d4d5da11b) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1
    => true
    

    3. 持续部署

    3.1 用脚本实现html类型自动化代码上线

    脚本需求:
    假设1一个集群有5个节点
    a:实现一键部署5个节点
    b:实现一键回滚到上个版本(秒级回滚) web web_v0.1 web_v0.2

    gitlab 拉取代码
    本地打包
    for 循环
    do
    scp  目标主机  传输压缩包
    从负载均衡上摘下来
    ssh   目标主机  解压压缩包,  删除软连接,新建软连接
    curl  访问  200
    从负载均衡上加回去
    done
    

    3.2 准备环境

    gitlab 10.0.0.11
    lb01负载均衡 10.0.0.5
    web01 10.0.0.7
    web02 10.0.0.8

    #lb01,web01,web02都安装nginx
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum install nginx -y
    grep -Ev '^$|#' nginx.conf.default > nginx.conf
    

    配置lb01负载均衡

    #修改nginx.conf配置文件
    [root@lb01 nginx]# vim nginx.conf
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        upstream monitor {
        include /etc/nginx/upstream_monitor;
        }
        server {
            listen       80;
            server_name  www.in365robot.com;
            location / {
           proxy_pass http://monitor;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
            }
        }
    }
    
    #创建upstream资源池文件
    vim  /etc/nginx/upstream_monitor
    server 10.0.0.7;
    server 10.0.0.8;
    
    #检查语法并重启nginx
    nginx -t
    systemctl restart nginx
    systemctl enable nginx
    

    配置web01和web02,文件配置内容相同

    vim /etc/nginx/nginx.conf
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  in365robot.com;
            location / {
                root   /usr/share/nginx/html/web;
                index  index.html index.htm;
            }
        }
    }
    
    #检查语法并重启nginx
    nginx -t 
    systemctl restart nginx
    systemctl enable nginx
    

    在web01上创建首页并创建软连接

    mkdir /usr/share/nginx/html/web_v1
    cd /usr/share/nginx/html/
    echo 'web01' >/usr/share/nginx/html/web_v1/index.html
    ln -s /usr/share/nginx/html/web_v1 /usr/share/nginx/html/web
    ls
    web  web_v1
    

    在web02上创建首页并创建软连接

    mkdir /usr/share/nginx/html/web_v1
    cd /usr/share/nginx/html/
    echo 'web02' >/usr/share/nginx/html/web_v1/index.html
    ln -s /usr/share/nginx/html/web_v1 /usr/share/nginx/html/web
    ls
    web  web_v1
    

    在windows上做hosts解析

    C:\Windows\System32\drivers\etc\hosts
    
    10.0.0.5 www.in365robot.com
    
    image

    3.3 新建gitlab项目

    image

    流程

    image
    #在gitlab上
    git config --global user.name "Administrator"
    git config --global user.email "admin@example.com"
    mkdir /code
    cd /code/
    ls
    wget http://192.168.37.202/linux59/monitor_html.tar.gz
    ls
    tar  xf monitor_html.tar.gz 
    cd monitor/
    ls
    ls .git/
    git branch 
    git log --oneline 
    
    
    [root@k8s-node2 monitor]# mkdir -p /server/scripts
    [root@k8s-node2 monitor]# cd /server/scripts/
    
    ============================================================
    [root@lb scripts]# cat auto_deploy.sh 
    #!/bin/bash
    
    serverlist="10.0.0.7 10.0.0.8"
    
    #代码更新
    
    fabu() {
    cd /code/monitor/ && \
    git pull -u origin 
    version=`git tag|tail -1`
    echo $version
    tar zcf /code/monitor_${version}.tar.gz *
    
    for ip in $serverlist
    do
      scp -rp /code/monitor_${version}.tar.gz root@${ip}:/code
      ssh  root@${ip} "mkdir -p /code/web_${version}  && 
                  tar xf /code/monitor_${version}.tar.gz -C /code/web_${version} && \
                  rm -fr /code/web && ln -s /code/web_${version} /code/web && rm -fr /code/monitor_${version}.tar.gz "
    done
    }
    
    huigun() {
       cd /code/monitor/
       version=`git tag|tail -1`
       last_version=`git tag|tail -2|head -1`
       for ip in $serverlist
       do
            ssh root@${ip} "rm -fr /code/web && ln -s /code/web_${last_version} /code/web"
       done
    }
    
    case $1 in
    deploy)
       fabu;
    ;;
    rollback)
        huigun;
    ;;
    *)
       echo '无效的参数';
    esac
    
    ========================================================
    
    [root@lb ~]# ssh-keygen -t rsa
    [root@lb ~]# cat /root/.ssh/id_rsa.pub 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsPPhatOoCoYEt/PBoKeC6Kd8Uj+Ll+dD0Bnrw3aiYsL7fWc83bCyp45wub31Wqt7sCcoqxuqwbidk6vlsZyb3CbGKxVcroMln91ASD+bmaYIJkl4KINAqktTzBIIDLRG0GUYRZw9npNq5d0MCc1XLTSmoAWpWpvuwIEpCFJcSYwSlUWkEXWtEFkJX5oWCNJX77iCfCp00JJI7TF59gReUojZ2YcXzxBSNz/lAvcvudcflJvu/rc9nBXMnwtXEYiY/QfXk2I9igqfR1lfU2FnfptJOKHKHHibajkuGVaovMypiBQxm66fHG88z7ZL+05+IDk/+LBj5In/tkYi1VWi5 root@lb
    
    添加秘钥 image

    4. jenkins安装

    #下载jenkins安装包
    [root@lb01 tools]# ls
    jenkins-2.176.1-1.1.noarch.rpm  jenkins_2.176_plugins.tar.gz
    
    #安装jenkins
    yum install -y java
    
    yum localinstall *.rpm
    rpm -ql jenkins
    systemctl restart jenkins
    route del -net 0.0.0.0/0 gw 10.0.0.254
    
    
    #将语言包导入
    [root@lb tools]# ls
    jenkins-2.176.1-1.1.noarch.rpm  jenkins_2.176_plugins.tar.gz  plugins
    
    tar xf jenkins_2.176_plugins.tar.gz 
    \cp -a plugins/* /var/lib/jenkins/plugins/
    systemctl restart jenkins.service 
    systemctl restart network
    cd /var/lib/jenkins/
    ls
    
    浏览器访问8080端口 image
    [root@lb01 tools]# cat /var/lib/jenkins/secrets/initialAdminPassword
    0af61163d6e146a0b77f2085e6d7fdaa
    
    image

    访问10.0.0.5:8080汉化成功

    image

    升级插件
    清华源下载链接

    image
    image image image

    5. java项目代码上线

    强哥博客链接

    思路

    1:创建数据库
    
    
    2:编译java代码  maven编译
    
    mvn clean  package
    
    3:scp 推送war包  10.0.0.7,10.0.0.8,重启tomcat
    
    
    4: 通知机制
    
    
    gitlab 拉取代码
    
    
    编译代码
    
    
    本地打包
    
    for 循环
    
    do
    
    scp  目标主机  传输压缩包
    
    从负载均衡上摘下来
    
    ssh   目标主机  解压压缩包,  删除软连接,新建软连接
    
    curl  访问  200
    
    从负载均衡上加回去
    
    done
    
    

    相关文章

      网友评论

        本文标题:git、gitlab+jenkens版本控制的安装、升级与灾备

        本文链接:https://www.haomeiwen.com/subject/xmagvctx.html