一、gitlab介绍
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它由Ruby写成。后来,一些部分用Go语言重写,现今并在国内外大中型互联网公司广泛使用。
git、gitlab、GitHub的简单区别
git 是一种基于命令的版本控制系统,全命令操作,没有可视化界面
gitlab 是一个基于git实现的在线代码仓库软件,提供web可视化管理界面,通常用于企业团队内部协作开发
github 是一个基于git实现的在线代码托管仓库,亦提供可视化管理界面,同时免费账户和提供付费账户,提供开放和私有的仓库,大部分的开源项目都选择github作为代码托管仓库
二、gitlab相关命令
gitlab-ctl start #启动全部服务
gitlab-ctl restart#重启全部服务
gitlab-ctl stop #停止全部服务
gitlab-ctl status #查看服务状态
gitlab-ctl reconfigure #使配置文件生效
gitlab-ctl show-config #验证配置文件
gitlab-ctl uninstall #删除gitlab(保留数据)
gitlab-ctl cleanse #删除所有数据,从新开始
gitlab-ctl tail <service name>查看服务的日志
gitlab-ctl tail nginx #如查看gitlab下nginx日志
gitlab-rails console #进入控制台
三、gitlab常用组件
nginx:静态Web服务器
gitlab-shell:用于处理Git命令和修改authorized keys列表,gitlab是以Git为底层的,操作实际上最后就是调用gitlab-shell命令进行处理。
gitlab-workhorse:轻量级的反向代理服务器
logrotate:日志文件管理工具
postgresql:数据库
redis:缓存数据库
扫描二维码关注公众号,回复: 4151390 查看本文章![]()
sidekiq:用于在后台执行队列任务(异步执行)
unicorn:GitLab Rails应用是托管在这个服务器上面的
查看服务状态:gitlab-ctl status,可以看到gitlab的依赖组件
四、gitlab安装目录
以下是gitlab常用的默认安装目录
gitlab组件日志路径:/var/log/gitlab
gitlab配置路径:/etc/gitlab/ 路径下有gitlab.rb配置文件
应用代码和组件依赖程序:/opt/gitlab
各个组件存储路径: /var/opt/gitlab/
仓库默认存储路径 /var/opt/gitlab/git-data/repositories
版本文件备份路径:/var/opt/gitlab/backups/
五、配置GitLab中的SSH key
1、查看是否已有SSH key
(1)桌面右键点击弹出,点击Git Bash进入命令行界面
(2)cat ~/.ssh/id_rsa.pub查看SSH秘钥是否存在,可以看到初次没有生成过
(3)生成过删除,重新生成,找到C:\Users\admin\.ssh,admin是当前用户名,删除以下文件
2、生成SSH 密钥
ssh-keygen -t rsa -C "[email protected]"
如下图,一路回车即可生成,会在C:\Users\admin\.ssh下生成基于rsa的公钥与私钥对
3、 添加SSH key到gitlab
(1)查看公钥并复制
cat ~/.ssh/id_rsa.pub #查看公钥,自己手动复制
cat ~/.ssh/id_rsa.pub | clip #或者直接复制到剪贴板
(2)登录gitlab,最右边下拉,点击“Settings”去User Setting页面
(3)点击左边的SSH Keys去添加
(4)把刚才复制的SSH Keys粘贴进去,点击Add key,添加即可
(5)添加成功如下,点击remove可以移除
(6)ssh -T git@"gitlab服务器地址",测试是否配置成功,成功如下
六、备份与恢复
可参看https://docs.gitlab.com/omnibus/settings/backups.html#creating-an-application-backup
1、备份应用
默认备份路径:/var/opt/gitlab/backups,备份格式:EPOCH_YYYY_MM_DD_GitLab_version_gitlab_backup.tar
如备份文件:1542603058_2018_11_19_11.4-ce_gitlab_backup.tar
需要git用户权限
sudo chown git.git /var/opt/gitlab/backups/1542603058_2018_11_19_11.4-ce_gitlab_backup.tar
如果自定义备份路径,编辑/etc/gitlab/gitlab.rb,指定备份路径,完后执行gitlab-ctl reconfigure重新加载配置
gitlab_rails['backup_path'] = '/mnt/backups' 备份路径,自己指定
gitlab_rails['backup_keep_time'] = 604800 #每次备份保留时间,默认7天,可以省略
手动备份,生成 一次备份
sudo gitlab-rake gitlab:backup:create
定时备份:cron -e添加定时,保存,重启定时服务/etc/init.d/crond restart
#周二到周六每天凌晨2点备份
0 0 2 ? * 2-6 gitlab-rake gitlab:backup:create
2、备份配置
gitlab配置默认在etc/gitlab,需要备份gitlab.rb和gitlab-secrets.json,为了方便,备份etc/gitlab文件夹即可
sudo crontab -e -u root 添加定时,保存,重启定时服务/etc/init.d/crond restart
#周二到周六每天凌晨2点备份,设置权限0077,压缩/etc/gitlab到/secret/gitlab/backups下,备份路径自定义
0 0 2 ? * 2-6 umask 0077; tar cfz /secret/gitlab/backups/$(date "+etc-gitlab-\%s.tgz") -C / etc/gitlab
3、恢复
可参看https://docs.gitlab.com/ce/raketasks/backup_restore.html#restore-for-omnibus-installations
停止与连接 数据库有关的进程
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
# Verify是否停止
sudo gitlab-ctl status
backup后边指定恢复的时间戳、版本
# This command will overwrite the contents of your GitLab database!
sudo gitlab-rake gitlab:backup:restore BACKUP=1542603058_2018_11_19_11.4-ce
如果有必要恢复配置,gitlab.rb和gitlab-secrets.json,把备份的tar包恢复到/etc/gitlab路径下即可
重启并检查服务
sudo gitlab-ctl restart #重启服务
sudo gitlab-rake gitlab:check SANITIZE=true #检查恢复情况
七、gitlab-ci可持续集成
1、gitlab-ci简述
gitlab-ci全称gitlab continuous integration,就是可持续集成的意思。从gitlab8.0版本开始,GitLab-ci完全集成到GitLab本身中,并且默认情况下在所有项目上都启用,不用可以禁用掉(禁用见2共享runner中)。
若将gitlab-ci.yml文件添加到仓库的根目录,并将项目配置gitlab Runner使用,则每次commit或push都会触发CI pipeline。gitlab-ci.yml文件告诉GitLab runner怎么做。默认情况下,它运行一个pipeline ,有三个stage:
build
,test
,deploy
。没必要三stage都使用,没有用到的stage可以被忽略。
2、GitLab-Runner类型介绍
详情可参考https://docs.gitlab.com.cn/ee/ci/runners/README.html
runner有三种类型:Shared, specific and group Runners
(1)共享runner:Shared runner适用于多个相似项目,其思想是:与其为每个项目分配一个特定runner,大部分时候这些runner事空闲的,即每个项目的runner一般不会同同时工作,不如让单个或少数Shared runner处理多个项目。shared runner使用公平队列处理作业,与使用FIFO的特定runner相比,可以防止项目创建数百个作业,占用所有可用shared runner的资源。
从GitLab 8.2开始,默认启用shared runners,无需手动开启,但是也可以在每个gitlab项目下的Settings ➔ CI/CD页面,通过“Disable shared Runners”按钮禁用。拥有管理员权限的用户可以注册且只能注册一个shared runner实例。
(2)特定runner:specific runner适用于特定要求的作业或者有特殊需求的项目。如果一个作业具有某些特定要求,您可以在中心设置特定的Runner,而不是所有Runner都如此。例如,如果你要部署某个特定项目,可以去Settings ➔ CI/CD页面获得令牌(上图中画红线处)为该项目设置一个specific runner。specific runner使用FIFO队列处理作业。
(3)组runner:group Runners适用于一组中有多个项目并且希望组内所有项目都访问一组Runner的情况。group Runners使用FIFO队列处理作业。可以去Settings ➔ CI/CD页面,点击Group CI/CD setting(即上图中右下角蓝字),进入下页,获取token
3、安装GitLab-Runner
详情可参考https://docs.gitlab.com/runner/install/
方式一
1、添加GitLab官方yum源
# For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
2、安装最新版本runner
# For RHEL/CentOS/Fedora,yum默认安装最新版本
sudo yum install gitlab-runner
或者
# for RPM based systems #RPM安装指定版本,列出所有包含重复的版本,降序显示
yum list gitlab-runner --showduplicates | sort -r
#如安装10.0.0-1
sudo yum install gitlab-runner-10.0.0-1
方式二
(1)下载
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
(2)添加可执行权限
sudo chmod +x /usr/local/bin/gitlab-runner
(3)创建GitLab CI 用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
(4)安装gitlab-runner服务
#安装到/home/gitlab-runner下
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
4、runner注册到CI
详情可参考https://docs.gitlab.com/runner/register/index.html
-
runner注册命令:
sudo gitlab-runner register
-
键入GitLab的URL:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) https://192.168.1.74:8080 #gitlab地址
-
键入Runner注册的token:
Please enter the gitlab-ci token for this runner xxx #进入runner的token凭证
-
键入Runner的描述, 之后也可以GitLab’s 可视化界面中更改
Please enter the gitlab-ci description for this runner [hostame] my-runner #runner的描述
-
键入Runner的标签, 之后也可以GitLab’s 可视化界面中更改
Please enter the gitlab-ci tags for this runner (comma separated): my-tag #runner标签,相当于名字,用于指定哪个runner运行作业
-
键入执行Runner executor的方式
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell: shell #选择执行runner的executor方式,这里没有使用docker等其他的,选shell
5、配置gitlab-ci.yml
详情可以参考https://docs.gitlab.com.cn/ee/ci/yaml/README.html
从从GitLab7.12版本,GitLab CI使用YAML文件(.gitlab-ci.yml
项目配置),它放在仓库的根目录,定义如何构建项目
Pipeline:一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程
jobs:Jobs 表示构建工作,表示某个 Stage 里面执行的工作。我们可以在 Stages 里面定义多个 Jobs,这些 Jobs 会有以下特点:相同 Stage 中的 Jobs 会并行执行,相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功;如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败
Stages:Stages表示构建阶段,说白了就是上面提到的流程。我们可以在一次 Pipeline 中定义多个 Stages,这些 Stages 会有以下特点:所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始;只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功;如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败
# 定义 stages, stages 关键字来定义 Pipeline 中的各个构建阶段
stages:
- build
- test
- deploy
# 定义 job,可多个
job 1:
stage: build #stage指定构建阶段
script: make build dependencies #script是每个job执行的任务
job 2:
stage: build
script: make build artifacts
job 3:
stage: test
script: make test
job 4:
stage: deploy
script: make deploy
添加gitlab-ci.yml
去项目根目录下,点击 "Set up CI/CD"去配置gitlab-ci.yml
如下就可以配置了,配置完提交
6、启动gitlab-runner
sudo gitlab-runner start #启动gitlab-runner
7、查看pipeline工作状态
去项目根路径下,点击“CI/CD》Pipelines”查看状态
如下可以看到pipeline工作状态
失败后,找到问题后,也可以点击右边的“Run Pipeline” 重新运行
参考:https://docs.gitlab.com.cn/ee/ssh/README.html
参考:https://docs.gitlab.com.cn/ee/ci/quick_start/README.html
参考:https://docs.gitlab.com.cn/ee/ci/README.html