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
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包安装
# 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分支,会推送更改