GitLab安装
GitLab安装
什么是 GitLab?
GitLab 是一个基于 Git 的一体化 DevOps 平台。简单来说,它不仅仅是一个代码仓库,更是一个覆盖软件开发全生命周期的工具集合。
可以把它理解为 “增强版”的 GitHub,但它的核心特点是 “开箱即用”的一体化解决方案和强大的 “自托管” 能力。
核心功能与特点
GitLab 的功能非常丰富,主要可以分为以下几个核心领域:
1. 代码托管与版本控制
这是最基本的功能,和 GitHub 类似。可以创建仓库来存储代码,使用 Git 进行版本管理,包括分支、合并、提交历史查看等。
2. 项目管理与协作
Issue 跟踪:用于任务、Bug、功能需求的分配和跟踪。
看板:可视化的工作流管理,方便团队了解项目进度。
Wiki:为每个项目创建文档知识库。
合并请求:代码审查的核心流程,团队成员可以对代码提出评论和建议,确保代码质量。
3. 持续集成与持续部署
这是 GitLab 的王牌功能。通过内置的 GitLab CI/CD,你可以自动化地完成代码的构建、测试和部署。
开发者只需在项目中配置一个 .gitlab-ci.yml
文件,当代码推送后,GitLab 就会自动运行一系列预设的流水线任务,比如自动运行单元测试、打包成 Docker 镜像、部署到测试或生产环境等。
4. 安全与合规
提供静态应用程序安全测试、依赖项扫描、容器扫描等功能,帮助在开发早期发现安全漏洞。
5. 多种部署方式
SaaS:使用 GitLab 官方提供的云服务。
自托管:可以将 GitLab 部署在你自己的服务器上,这对于需要控制数据和流程的企业来说至关重要。社区版免费,企业版提供更多高级功能。
GitLab 与 GitHub 的主要区别
特性 | GitLab | GitHub |
---|---|---|
核心定位 | 一体化 DevOps 平台 | 社交化的代码托管平台 |
CI/CD 工具 | 内置(GitLab CI/CD) | 主要通过第三方集成(如 GitHub Actions) |
部署方式 | 强调自托管,同时提供 SaaS | 主要是 SaaS,也有企业版可自托管 |
开源协议 | 核心代码为 MIT 协议,完全开源 | 平台本身不是开源的 |
仓库权限 | 支持更细粒度的权限控制 | 权限控制相对简单 |
GitLab 常用命令
命令 | 含义 | 说明 |
---|---|---|
gitlab-ctl start | 启动全部服务 | 启动 GitLab 所有组件。 |
gitlab-ctl restart | 重启全部服务 | 常用命令。重启 GitLab 所有组件,通常在修改配置后执行。 |
gitlab-ctl stop | 停止全部服务 | 停止 GitLab 所有组件。 |
gitlab-ctl restart nginx | 重启单个服务 | 仅重启指定的服务(如 nginx , postgresql , redis 等)。 |
gitlab-ctl status | 查看服务状态 | 常用命令。检查所有 GitLab 组件的运行状态。 |
gitlab-ctl reconfigure | 使配置文件生效 | 核心命令。在修改 /etc/gitlab/gitlab.rb 后必须运行,以重新配置并应用新设置。 |
gitlab-ctl show-config | 验证配置文件 | 显示最终合并的配置文件内容,用于检查配置是否正确应用。 |
gitlab-ctl uninstall | 删除 GitLab(保留数据) | 卸载 GitLab 应用程序但保留其数据目录。 |
gitlab-ctl cleanse | 删除所有数据,重新开始 | 危险命令。会清空所有数据,将 GitLab 重置为初始状态。 |
gitlab-ctl tail | 查看所有服务的日志 | 动态显示所有组件的日志尾行,按 Ctrl+C 退出。 |
gitlab-ctl tail nginx | 查看指定服务的日志 | 动态显示指定服务(如 nginx )的日志尾行。 |
gitlab-rails console | 进入 Rails 控制台 | 高级命令。进入 GitLab 的交互式管理命令行,可执行高级操作(如重置密码)。 |
安装gitlab
安装前内存给8g,cpu2核,关闭防火墙和selinux
配置yum源
[root@server ~]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# rm -rf *
[root@server yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@server yum.repos.d]# yum install epel-release -y
安装工具包
[root@server yum.repos.d]# yum -y install git
[root@server yum.repos.d]# yum -y install curl openssh-server openssh-clients postfix cronie perl
重启postfix
[root@server yum.repos.d]# systemctl restart postfix.service
[root@server yum.repos.d]# systemctl enable postfix.service
在/usr/src下安装gitlab
[root@server yum.repos.d]# cd /usr/src
[root@server src]# ls
debug gitlab-ce-15.3.3-ce.0.el7.x86_64.rpm kernels
如果是centos7版本,直接安装
[root@server src]# rpm -ivh gitlab-ce-15.3.3-ce.0.el7.x86_64.rpm
如果是其他版本,安装会发现需要一个依赖包 policycoreutils-python
wget https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/policycoreutils-python-2.5-34.el7.x86_64.rpm
然后直接安装会发现无法安装,即使添加了–nodeps去除依赖性也安装不成功
此时我们需要使用rpm -qa|grep policy 找到policycoreutils
然后将其卸载
rpm -e policycoreutils
#最后
rpm -ivh --nodeps policycoreutils-python-2.5-34.el7.x86_64.rpm
安装完成后修改配置文件
[root@server src]# vim /etc/gitlab/gitlab.rb external_url 'http://192.168.100.10' 换成gitlab服务器的ip地址
重载配置文件并重启gitlab
[root@server src]# gitlab-ctl reconfigure
[root@server src]# gitlab-ctl restart
#没有报错即可
查看你gitlab版本
[root@server src]# head -1 /opt/gitlab/version-manifest.txt
gitlab-ce 15.3.3
首次登录需要密码,但是不知道密码是什么,因此选择破解密码
[root@server src]# gitlab-rails console -e productionirb(main):001:0> user = User.where(id:1).first
=> #<User id:1 @root>irb(main):002:0> user.password = 'redhat123!' //密码必须至少8个字符
=> "redhat123!"irb(main):003:0> user.password_confirmation = 'redhat123!' //确认irb(main):004:0> user.save!
=> trueirb(main):005:0> exit
在浏览器中访问gitlab
用户为root,密码为刚刚设置的密码
登录后右上角preferences
语言设置成简体中文
由于gitlab一般为私有,因此我们需要关闭注册功能
点击菜单-管理员-设置-通用
关闭注册功能,然后保存更改
gitlab的常用操作
项目管理(通常只是创建新项目)
创建成员组(针对某个项目创建一个成员组)
用户管理(此用户为gitlab用户而非系统用户)
1.创建项目
在菜单中点击项目-新建项目
新建完成后我们添加ssh密钥
[root@server ~]# ssh-keygen
#全部回车
[root@server ~]# cd ~/.ssh/
[root@server .ssh]# ls
id_rsa id_rsa.pub
[root@server .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDdMRZMbT8r7hfcSsXMy+TStGiH9dCGu/jSd1MPgpa7nHZ7BUIpf+GcjUqkNwpAyWIfMTIWKpRvSQfidkGPkYG0W3BTRe1wrcgLTSZfOulVmuqDSljhoSd1CyAizFKGfTVz9KNX8hIf4pGgkvpIRfM7XNIgCTV2v52oRFx2EbLd8Nx8bch1a3Au07K6rJ6DTaIawjusgjE7K1Xn45ZHpbl/SENSNMqnXjAa2yXfNDeDGEnEaRLIH+q7NT0IrVxL206b4NTEtbw77/CPYYJmlnO/iHrZutVnUkbbw+vFgexEdmpu+NExitNAHPvTFvt8hCNGd5g7KUrx5njQRh8sd1S3 root@server.example.com
复制
使用ssh克隆
[root@server ~]# git clone git@192.168.100.10:gitlab-instance-77fa1576/test1.git
[root@server ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates Videos
Desktop Downloads Music Public test1
[root@server ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates Videos
Desktop Downloads Music Public test1
测试
[root@server test1]# touch file1
[root@server test1]# git add file1
[root@server test1]# git commit -m "add file1" #打标签
[root@server test1]# git push #默认上传到main
上传成功
[root@server test1]# touch file2 file3
[root@server test1]# git add . #.代表上传所有文件
[root@server test1]# git commit -m "add file23"
[root@server test1]# git push
创建分支
新建的分支会自动同步,合并分支可以将其他分支合并,可以选择删除原分支或者不删除