1.创建群组
2.创建项目,配置项目隶属于某个群组
3.创建用户、设定密码、并为用户分配群组
4.其他用户登录Gitlab
关闭注册功能
5. 管理员为其他用户分配项目
6.查看fzmyw用户下的项目
7.Gitlab的基本使用
HTTP方式推送代码(root用户)
[root@Gitlab ~]# yum -y install git #安装git命令 [root@Gitlab ~]# git config --global user.name "lss" [root@Gitlab ~]# git config --global user.email "lss@yw.com" [root@Gitlab ~]# echo 192.168.1.31 gitlab.fzmyw.com >> /etc/hosts [root@Gitlab ~]# cat /etc/hosts #配置域名解析,不然无法解析这个域名 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.31 gitlab.fzmyw.com [root@Gitlab ~]# git clone http://gitlab.fzmyw.com/devops/my-web.git 正克隆到 'my-web'... Username for 'http://gitlab.fzmyw.com': root Password for 'http://root@gitlab.fzmyw.com': warning: 您似乎克隆了一个空版本库。 [root@Gitlab ~]# cd my-web/ [root@Gitlab my-web]# touch README.md [root@Gitlab my-web]# echo 我的web项目 > README.md [root@Gitlab my-web]# cat README.md 我的web项目 [root@Gitlab my-web]# git add . [root@Gitlab my-web]# git commit -m "add README.md" [master(根提交) c2ff023] add README.md 1 file changed, 1 insertion(+) create mode 100644 README.md [root@Gitlab my-web]# git push -u origin master Username for 'http://gitlab.fzmyw.com': root #需要输入账号密码 Password for 'http://root@gitlab.fzmyw.com': Counting objects: 3, done. Writing objects: 100% (3/3), 225 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To http://gitlab.fzmyw.com/devops/my-web.git * [new branch] master -> master 分支 master 设置为跟踪来自 origin 的远程分支 master。
问题:
使用http方式推送代码每次都需要输入账号密码,所以推荐使用ssh方式推送代码,在Gitlab中添加ssh-key的方式就可以了!
SSH方式推送代码(root用户)
因为之前使用的是http方式推送的代码,所以要先删除本地指定的http远程推送地址。
[root@Gitlab my-web]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:PW9VyLlEC3L4SN3O/wOb/qCWJ5CKrzOCjBmYeznV6XQ root@Gitlab The key's randomart image is: +---[RSA 2048]----+ | .oo.. | | oo.+.+ | | . o o* .| | .. ..oo | |.. . .S + o. | |+ . + Eo o o .| |o+.o o... . +.+ .| |+o+. +.. =.+...| | . ...=. ..+....| +----[SHA256]-----+ [root@Gitlab my-web]# cat /root/.ssh/id_rsa.pub #查看root用户的公钥 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5oXFpKl4zDUgp9H5JDLK8k3kLd4Ti9K/2NU61ZkLcNbJ4VSTQyqGhWS
[root@Gitlab my-web]# echo hello world >> file1 [root@Gitlab my-web]# git add . [root@Gitlab my-web]# git commit -m "hello world" [master 89ed69a] hello world 1 file changed, 1 insertion(+) create mode 100644 file1 [root@Gitlab my-web]# git remote remove origin #删除本地指定的远程推送地址 [root@Gitlab my-web]# git remote -v #查看本地添加了哪些远程地址 [root@Gitlab my-web]# git remote add origin git@gitlab.fzmyw.com:devops/my-web.git #添加新的SSH方式的远程推送地址 [root@Gitlab my-web]# git remote -v origin git@gitlab.fzmyw.com:devops/my-web.git (fetch) origin git@gitlab.fzmyw.com:devops/my-web.git (push) [root@Gitlab my-web]# git push origin master Counting objects: 4, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 272 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@gitlab.fzmyw.com:devops/my-web.git c2ff023..89ed69a master -> master
注意:
使用不同的Gitlab用户代码克隆链接(即使用不同的Gitlab用户)时需要将当前终端用户的ssh公钥添加至该Gitlab的SSH密钥配置中才能实现代码克隆推送免密。
SSH方式推送代码(fzmyw用户)
例:在Windwos系统上使用Gitlab上的fzmyw用户来开发代码并使用ssh方式克隆提交代码。
即:需要将Windows系统上Administrator用户的ssh公钥添加到Gitlab上fzmyw的系统设置SSH密钥中。
重新测试在Windows终端上使用fzmyw用户克隆推送代码至Gitlab
在Windows上也成功使用fzmyw用户免密提交了代码至Gitlab!
问题:
上面我们在Windows上使用fzmyw用户修改并提交了新的代码至Gitlab上,但是root用户本地仓库并不知道其他用户已经提交了新的代码,怎么才能所有用户同步更新最新的代码至本地仓库呢?
root用户获取最新的代码至本地仓库
[root@Gitlab ~]# cd my-web/ [root@Gitlab my-web]# ls file1 README.md [root@Gitlab my-web]# cat README.md 我的web项目 [root@Gitlab my-web]# git pull origin master #获取最新的代码至本地仓库 remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. 来自 gitlab.fzmyw.com:devops/my-web * branch master -> FETCH_HEAD 更新 89ed69a..04bbcc6 Fast-forward README.md | 1 + 1 file changed, 1 insertion(+) [root@Gitlab my-web]# cat README.md 我的web项目 fzmyw用户修改了代码并提交
8.Gitlab新建分支与合并分支
新建分支
[root@Gitlab my-web]# pwd /root/my-web [root@Gitlab my-web]# ls file1 README.md [root@Gitlab my-web]# git branch #列出分支 * master [root@Gitlab my-web]# git branch new_fenzhi #创建new_fenzhi分支 [root@Gitlab my-web]# git branch #列出所有分支 * master new_fenzhi [root@Gitlab my-web]# git checkout new_fenzhi #切换分支至new_fenzhi分支上 切换到分支 'new_fenzhi' [root@Gitlab my-web]# ls file1 README.md [root@Gitlab my-web]# echo 这是一个新的分支 >> newfile #在new_fenzhi分支上创建文件 [root@Gitlab my-web]# ls file1 newfile README.md [root@Gitlab my-web]# git add . #提交代码至暂存区 [root@Gitlab my-web]# git commit -m "新分支的文件newfile" #提交暂存区代码至本地仓库中 [new_fenzhi dd6071e] 新分支的文件newfile 1 file changed, 1 insertion(+) create mode 100644 newfile [root@Gitlab my-web]# git push origin master #推送代码至master分支(因为刚才新建了new_fenzhi并切换到new_fenzhi分支上,所以本地提交的代码文件都在new_fenzhi分支中,需要推送到远程new_fenzhi分支上,而不是master分支) Everything up-to-date #已经是最新 [root@Gitlab my-web]# git push origin new_fenzhi #推送new_fenzhi分支上的所有代码至远程new_分支上 Counting objects: 4, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 348 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: remote: To create a merge request for new_fenzhi, visit: remote: http://gitlab.fzmyw.com/devops/my-web/merge_requests/new?merge_request%5Bsource_branch%5D=new_fenzhi remote: To git@gitlab.fzmyw.com:devops/my-web.git * [new branch] new_fenzhi -> new_fenzhi
合并分支
我们在上面创建了一个新分支new_fenzhi,并且在新分支中创建了代码文件并提交至远程仓库中,但是上面提交的代码都还是只属于new_fenzhi分支中的,如果new_fenzhi分支上的代码要合并到master主分支上去呢
[root@Gitlab my-web]# git branch #列出分支 master * new_fenzhi [root@Gitlab my-web]# ls file1 newfile README.md [root@Gitlab my-web]# git merge master #在new_fenzhi分支上合并master Already up-to-date. [root@Gitlab my-web]# git checkout master #切换至master分支 切换到分支 'master' [root@Gitlab my-web]# git branch * master new_fenzhi [root@Gitlab my-web]# git merge new_fenzhi #将new_fenzhi分支合并到master分支上 更新 04bbcc6..dd6071e Fast-forward newfile | 1 + 1 file changed, 1 insertion(+) create mode 100644 newfile [root@Gitlab my-web]# git push origin master #推送代码至远程master分支上 Total 0 (delta 0), reused 0 (delta 0) To git@gitlab.fzmyw.com:devops/my-web.git 04bbcc6..dd6071e master -> master
9.Gitlab的Tag标签(版本)使用
[root@Gitlab my-web]# git branch * master new_fenzhi [root@Gitlab my-web]# ls file1 newfile README.md [root@Gitlab my-web]# git tag -a "v1.0" -m "new tag" #将当前master分支上所有代码打一个标签为v1.0(可以看做一个版本) [root@Gitlab my-web]# git tag #查看所有标签 v1.0 [root@Gitlab my-web]# git push origin v1.0 #推送标签v1.0至远程仓库 Counting objects: 1, done. Writing objects: 100% (1/1), 147 bytes | 0 bytes/s, done. Total 1 (delta 0), reused 0 (delta 0) To git@gitlab.fzmyw.com:devops/my-web.git * [new tag] v1.0 -> v1.0
修改代码后再提交一个新版本tag
[root@Gitlab my-web]# git branch * master new_fenzhi [root@Gitlab my-web]# ls file1 newfile README.md [root@Gitlab my-web]# echo 修改了一些bug,并发布一个新版本 >> README.md [root@Gitlab my-web]# cat README.md 我的web项目 fzmyw用户修改了代码并提交 修改了一些bug,并发布一个新版本 [root@Gitlab my-web]# git add . [root@Gitlab my-web]# git commit -m "修改了一些bug,并发布一个新版本" [master e179435] 修改了一些bug,并发布一个新版本 1 file changed, 1 insertion(+) [root@Gitlab my-web]# git push origin master Counting objects: 5, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 440 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@gitlab.fzmyw.com:devops/my-web.git dd6071e..e179435 master -> master [root@Gitlab my-web]# git tag -a "v2.0" -m "v2.0新版本" #提交新的tag为v2.0 [root@Gitlab my-web]# git tag v1.0 v2.0 [root@Gitlab my-web]# git push origin v2.0 #推送新标签(版本)v2.0至远程仓库 Counting objects: 1, done. Writing objects: 100% (1/1), 161 bytes | 0 bytes/s, done. Total 1 (delta 0), reused 0 (delta 0) To git@gitlab.fzmyw.com:devops/my-web.git * [new tag] v2.0 -> v2.0
10.Gitlab的备份恢复与升级
Gitlab备份
1.修改默认存放备份站点目录,然后进行重新加载配置文件。
[root@Gitlab ~]# vim /etc/gitlab/gitlab.rb ... gitlab_rails['manage_backup_path'] = true gitlab_rails['backup_path'] = "/data/gitlab/backups" #备份路径修改(路径的空间要足够大) ... gitlab_rails['backup_keep_time'] = 604800 #备份保留7天 ... [root@Gitlab ~]# gitlab-ctl reconfigure #重新加载gitlab配置文件
2.手动执行备份命令,会将备份的结果存储至/data/gitlab/backups目录中。
[root@Gitlab ~]# gitLab-rake gitlab:backup:create
3.当然也可以将备份命令写入定时任务每天进行自动备份。
[root@Gitlab ~]# crontab -l 00 02 * * * /usr/bin/gitlab-rake gitlab:backup:create
4.查看备份文件
[ root@Gitlab ~]# ls /data/gitlab/backups/ 1566120123_2022_03_07_12.0.3_gitlab_backup.tar
Gitlab恢复
1.停止数据写入服务
[root@Gitlab ~]# gitlab-ctl stop unicorn [root@Gitlab ~]# gitlab-ctL stop sidekiq
2.通过gitlab-rake命令进行恢复,恢复时需要指定此前备份的名称(文件只需要写到时间戳就好(1566120123_2022_03_07_12.0.3),不需要写_gitlab_backup和.tar后缀
)
[root@Gitlab ~]# gitlab-rake gitlab:backup:restore BACKUP=1566120123_2022_03_07_12.0.3 Before restoring the detabase, we will remove all existing tables to avoid future: upgrade problems. Be aware that if you have custom tables in the 6itLab database these tables and all data will beremoved. Do you want to continue (yes/no) ? yes #输入yes
3.重启gitlab,检测是否恢复
[root@Gitlab ~]# gitlab-ctL restart
Gitlab升级
1.关闭gitlab服务
[root@Gitlab ~]# gitlab-ctl stop unicorn [root@Gitlab ~]# gitlab-ctl stop sidekiq [root@Gitlab ~]# gitlab-ctl stop nginx
2.备份gitlab
[root@Gitlab ~]# gitlab-rake gitlab:backup:create
3.下载gitlab的RPM包并进行升级
清华大学源(gitlab-ce社区版 centos7下载):https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
汉化包各版本下载(上半部分gitlab处选择tag版本):https://gitlab.com/xhang/gitlab/-/tree/12-0-stable-zh
[root@Gitlab ~]# yum localinstall gitlab-ce-15.0.0-ce.0.el7.x86_64.rpm
4.启动并查看gitlab版本信息
[root@Gitlab ~]# gitlab-ctl reconfigure [root@Gitlab ~]# gitlab-ctl restart [root@Gitlab ~]# head -1 /opt/gitlab/version-manifest.txt gitlab-ce 15.0.0