GitLab 使用教程

815 阅读6分钟

GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,可以通过web界面,进行访问公开的或者私人项目,它有和Github类似的功能,能够浏览源代码,管理缺陷和注释,可以观念里团队对仓库的访问,它非常已于浏览提交过的版本并提供一个文件历史库,团队成员可以利用内置的简单聊天程序(Wall)进行交流,它还提供一个代码片段收集功能可以轻松实现代码复用。

环境

1、Centos7.9
2、2G内存(测试),生产至少需要4G
3、安装包:gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
4、禁用防火墙,关闭selinux

安装GitLab

下载地址:packages.gitlab.com/gitlab/gitl…

rpm包安装

[root@Gitlab ~]# yum -y install policycoreutils-python    #安装依赖
[root@Gitlab ~]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm   #安装软件包
vim /etc/gitlab/gitlab.rb       #  gitlab 配置文件
# 更改url地址为本机IP地址 external_url 'http://10.0.0.200:8989'
# 时区修改 gitlab_rails['time_zone'] = 'Asia/shanghai'
# 端口号 nginx['listen_port'] = 8989
gitlab-ctl reconfigure          # 更改配置文件后需重新配置
 
/opt/gitlab/                    # gitlab的程序安装目录
/var/opt/gitlab                 # gitlab目录数据目录
/var/opt/gitlab/git-dfata       # 存放仓库数据
gitlab-ctl status               # 查看目前gitlab所有服务运维状态
gitlab-ctl stop                 # 停止gitlab服务
gitlab-ctl stop nginx           # 单独停止某个服务
gitlab-ctl tail                 # 查看所有服务的日志
 
GitLab的服务构成:
nginx:   静态web服务器
gitlab-workhorse: 轻量级的反向代理服务器
logrotate:日志文件管理工具
postgresql:数据库
redis:缓存数据库
sidekiq:用于在后台执行队列任务(异步执行)。(Ruby)
unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。(Ruby Web Server,主要使用Ruby编写)

gitlab包安装

官网:packages.gitlab.com/gitlab/gitl…

# 1.远程下载gitlab包
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-17.1.6-ce.0.el7.x86_64.rpm/download.rpm
# 2.本地安装
rpm -ivh gitlab-ce-17.1.6-ce.0.el7.x86_64.rpm
# 3.修改gitlab.rb配置
vim /etc/gitlab/gitlab.rb
# 4.修改GitLab URL
##  GitLab URL 
##! URL on which GitLab will be reachable. 
##! For more details on configuring external_url see: 
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab 
external_url 'http://192.168.1.1:8000'
# 5.直接在本地输入你的external_url,访问。

yum 安装

1、配置yum源

vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6
Repo_gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.key

2、更新本地yum缓存

sudo yum makecache

3、安装GitLab社区版

sudo yum install gitlab-ce        #自动安装最新版
sudo yum install gitlab-ce-x.x.x    #安装指定版本

SSH在线安装

安装依赖

sudo yum install -y curl policycoreutils-python openssh-server perl 
# 如果没有成功,可以重启一下虚拟机再去安装
sudo systemctl enable sshd
sudo systemctl start sshd

sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

安装Postfix(用来发送通知电子邮件)

sudo yum -y install postfix
sudo systemctl enable postfix
sudo systemclt start postfix

# 注意 阿里云、腾讯云,可能出错
# 需要修改/etc/postfix/maincf
# inet_protocols = all 改为 inet_protocols = ipv4

配置镜像

curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

# 另一种安装
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce-17.1.6-ce.0.el7.x86_64

正式安装

sudo EXTERNAL_URL="http://192.168.48.131" yum install -y gitlab-jh  
 # 192.168.48.131这个地址是安装者本人的虚拟机地址

GitLab常用命令

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

systemctl enable gitlab-runsvdir.service  #随系统自动启动
firewall-cmd --zone=public --add-port=8989/tcp --permanent #开放端口号
firewall-cmd --reload #重新加载

用户密码

首次登录需要先配置下密码,最短八位,登录用户名为root,密码是自己配置的密码

# 用户:root
# 密码:在 /etc/gitlab/initial_root_password 文件里面

# 修改密码
# 用户头像->Preferences->左侧 Password

# 汉化
# 用户头像->Preferences->左侧 Preferences->Localization (Save changes)保存

# 关闭自动注册
# 管理区域->设置 取消开起注册->保存

配置外观

首页有四个按钮

创建项目(Create a project)            创建一个群组(Create a group)

添加成员(Add people)                  配置 GitLab(Configure GitLab)

合并分支请求

首次可以在右上角点击创建合并请求

提交合并请求->移除源分支(request to merge dev)

//合并后虽然root端远程仓库可以显示合并的文件,但是在gitlab本地仓库没有,我们可以pull更新下仓库

设置保护主分支

给master设置为保护,这样除了root用户外,其他用户不能将代码直接推送至主分支

设置->版本->保护分支

GitLab备份

对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原。
 
gitlab提供了一个简单的命令行来备份整个gitlab,并且能灵活的满足需求。
备份文件将保存在配置文件中定义的backup_path中,文件名为TIMESTAMP_gitlab_backup.tar,TIMESTAMP为备份时的时间戳。TIMESTAMP的格式为:EPOCH_YYYY_MM_DD_Gitlab-version。
如果自定义备份目录需要赋予git权限
配置文件/etc/gitlab/gitlab.rb 中加入
gitlab_rails['backup_path'] = '/data/backup/gitlab'
gitlab_rails['backup_keep_time'] = 604800       备份保留的时间(以秒为单位,这个是七天默认值),
 
mkdir -p /data/backup/gitlab
chown -R git.git /data/backup/gitlab
完成后执行
gitlab-ctl reconfigure

GitLab Runner

GitLab Runner 简介

  • GitLab Runner是一个开源项目,用于运行作业并将结果发送回GitLab。
  • 与GitLabCI结合使用,GitLabCI是GitLab随附的用于协调作业的开源持续集成服务。
  • GitLab Runner是用Go编写的,可以在Linux,macOS和Windows操作系统上运行。
  • 容器部署需使用最新Docker版本。GitLab Runner需要最少的Docker vl.13.0。
  • GitLab Runner版本应与GitLab版本同步。 (避免版本不一致导致差异化)。
  • 可以根据需要配置任意数量的Runner。

安装

安装gitlab-runner 的教程在gitlab 中有详细介绍 设置->CI/CD->Runner->显示Runner安装说明

# 镜像
curl -L https:/packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

# 安装
yum -y install gitlab-runner

# 注册
gitlab-runner register
# 1、Enter the GitLab instance URL 输入网址
http://192.168.1.168/
# 2、Enter the registration toke 输入token
XXXXXX
# 1、2一步到位
sudo gitlab-runner register --url http://192.168.1.168/ --registration-token XXXXX
# 3、Enter a description for the runner 给runner起个名称
默认也行
# 4、Enter tags for the runner 标签名称
leolee
# 5、Enter an executor:ssh,docker,shell…… 怎样发布
shell

token

// 概览->Runner->注册一个实例runner

GitLab 新建 Runner

// 设置->CI/CD->Runner(展开)
// 新建项目runner->操作系统等配置->创建runner->第一步命令(在gitlab-runner的平台执行)

// 手动验证runner
gitlab-runner run

项目中配置.gitlab-ci.yml

提交项目运行 cp -rf ./dist/ /data/liangmingBlog 报错需要给gitlab-runner用户添加权限

stages: # Stages 表示构建阶段,这里有两个阶段 install, deploy
- install
- deploy

cache:
  key: ${CI_BUILD_REF_NAME}
  paths:
    - node_modules/
    
install-staging:dep: # Jobs 表示构建工作,表示某个 Stage 里面执行的工作。
  stage: install
  tags:
    - liangmingblog #runner执行器的名字,与注册runner时填写的tags保持一致
  only: # 定义了只有在被merge到了master分支上 才会执行部署脚本。
  - master
  script:
  - echo "=====start install======"
  - npm install  #安装依赖
  - echo "=====end install======"
  artifacts:  # 将这个job生成的依赖传递给下一个job。需要设置dependencies
    expire_in: 60 mins   # artifacets 的过期时间,因为这些数据都是直接保存在 Gitlab 机器上的,过于久远的资源就可以删除掉了
    paths:  # 需要被传递给下一个job的目录。
    - node_modules/
    
deploy-staging:dep:
  stage: deploy
  tags:
    - liangmingblog
  only:
  - master
  script:
  - echo "=====start build======"
  - npm run build  # 将项目打包
  - echo "=====end build======"
  - echo "=====start deploy======"
  - sudo cp -rf ./dist/  /data/liangmingBlog
  - echo "=====end deploy!!!!!!======"

demo

#缓存 node_modules/目录 下次构建不会删除
cache:
    paths:
        - node_modules/
 
stages: # 分段
    - install
    - eslint
    - build
    - deploy
 
# 1. 安装依赖阶段
install:
    tags:
        - web
    only:
        - test
    stage: install
 
    script:
        #判断文件是否存在
        - |
            pwd
            if [ !-f "package.json.md5" ];then
              echo "文件不存在,需要重新安装依赖"
              yarn install
              md5sum package.json > package.json.md5 #把文件的md5值写入到目标文件中
            else
              echo "文件已经存在"
              if [ md5sum -c package.json.md5 ];then #检查md5sum是否有变更
               echo "md5值一致"
              else
               echo "md5值不一致,需要重新安装依赖"
               yarn install
               md5sum package.json > package.json.md5
              fi
            fi
 
# 2. Eslint阶段
eslint:
    tags:
        - web
    only:
        - test
    stage: eslint
    script:
        - yarn run lint
 
# 3. 打包阶段
build:
    tags:
        - web
    only:
        - test
    stage: build
    script:
        - yarn run build:dev #打包可修改为yarn run build,我这边区分了测试环境
    artifacts:
        paths:
            - dist/
 
# 4. 将dist文件放在/root/web目录下
deploy:
    tags:
        - web
    only:
        - test
    stage: deploy
    script:
        - zip dist.zip ./dist
        - cp ./dist.zip /opt/project/test-web/ # /为根目录,可自己查看服务器根目录路径
        - cd /opt/project/test-web
        - cp -r dist /opt/project/web-bak/test/dist-`date +%y%m%d-%H:%M:%S` #主要用于备份dist文件
        - rm -rf dist #删除dist文件
        - unzip dist.zip #解压dist.zip文件
        - echo "deploy...finished"

自动化打包部署前端(密钥)

生成SSH密钥对:

ssh-keygen -t rsa -b 4096 -f \~/.ssh/id_rsa_vue_deploy

# 将公钥(\~/.ssh/id_rsa_vue_deploy.pub)添加到服务器的授权密钥中。

将SSH私钥添加到GitLab

// 进入GitLab中的项目页面。
// 转到 "设置" > "CI / CD",展开 "变量" 部分。
// 添加一个名为 SSH_PRIVATE_KEY 的变量,并将 \~/.ssh/id_rsa_vue_deploy 文件的内容粘贴到值中。

更新 .gitlab-ci.yml 文件,引用正确的私钥变量

deploy:
  stage: deploy
  script:
    - 'which ssh-agent || ( apk add --update openssh )'
    - eval $(ssh-agent -s)
    - echo "$SSH\_PRIVATE\_KEY" | tr -d '\r' | ssh-add -
    - ssh -o StrictHostKeyChecking=no -i \~/.ssh/id_rsa_vue_deploy user@server 'mkdir -p /path/to/deploy'
    - scp -r dist/\* -i \~/.ssh/id\_rsa\_vue\_deploy user@server:/path/to/deploy
 only:
 - master

提交master分支,会推送更改