赞
踩
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。 用来进行对项目的管理,而Github同样可以实现版本控制,为什么不用更受欢迎的GitHub呢?
二者在操作上基本相同,功能与底层实现上也差不多,但如果你用GitHub,即便使用私有库,你的代码(存储在GitHub的服务器中)仍然掌握在别人手中(运营GitHub公司,目前是微软),对于一些对私密性要求较高的企业,这是无法忍受的。而GitLab则不同,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发。因此,本次来介绍一下Gitlab Server的部署过程及代码提交处理流程。
- 系统版本:CentOS 7.4
- 关闭防火墙
- 关闭SELinux
- 初始化系统环境
- 开启邮件服务
- Gitlab版本:gitlab-ce-13.5.1
(1)安装gitlab依赖包
[root@gitlab ~]# yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python
(2)开启postfix服务
[root@gitlab ~]# systemctl start postfix
[root@gitlab ~]# systemctl enable postfix
(3)添加yum源
选择添加yum源安装gitlab(根据需求配置源),这里选择阿里源。
[root@gitlab ~]# vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.key
(4)yum安装gitlab
gitlab安装包下载:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el7/
[root@gitlab ~]# yum -y install gitlab-ce # 自动安装gitlab最新版
(5)查看gitlab版本
[root@gitlab ~]# head -1 /opt/gitlab/version-manifest.txt
gitlab-ce 13.5.1
(1)Gitlab配置登录链接
[root@localhost ~]# vim /etc/gitlab/gitlab.rb
***
## 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://10.20.151.99' # 没有域名,可以设置为本机IP地址
***
(2)Gitlab初始化
如果对Gitlab配置进行了修改,则必须要重新执行初始化操作,否则修改无效。
[root@gitlab ~]# gitlab-ctl reconfigure
# 等待时间稍长,在13新版本中,初始化完后会自启动gitlab
(3)Gitlab设置HTTPS方式
如果想要以上的 https 方式正常生效使用,则需要把 letsencrypt 自动生成证书的配置打开,这样在执行重
新让配置生效命令(gitlab-ctl reconfigure)的时候会自动给域名生成免费的证书并自动在 gitlab 自带的
nginx 中加上相关的跳转配置,都是全自动的,非常方便。
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['caryyu@qq.com'] # 联系人的电子邮件地址
我这里由于没有域名,因此这一步没操作。
gitlab-ctl start # 启动所有 gitlab 组件;
gitlab-ctl stop # 停止所有 gitlab 组件;
gitlab-ctl restart # 重启所有 gitlab 组件;
gitlab-ctl status # 查看服务状态;
gitlab-ctl reconfigure # 启动服务;
vim /etc/gitlab/gitlab.rb # 修改默认的配置文件;
gitlab-ctl tail # 查看日志;
[root@gitlab ~]# gitlab-rails console
Loading production environment (Rails 4.2.10)
irb(main):001:0> Notify.test_email('xxxx@163.com', 'sz2002', 'test').deliver_now
第一次登陆gitlab时在主页面需要设置新密码。
默认登陆用户:root
(1)第一步
(2)第二步
(1)第一步,点击创建群组
(2)第二步,给群组起名并创建
(3)第三步,完成群组创建
(4)最后,去掉用户的自动注册功能(安全)
取消勾选后,保存即可:
首先来开一下开发代码提交的整个流程:
这里的用户就是我的项目主管/项目经理以及相关的研发人员。
(1)创建用户
(2)设置用户
分别设置多个用户,这里仅展示一个用户的设置方法,其他用户类似。
按照上述方法依次创建其他用户,上面仅以一个用户来演示。
(3)将创建的用户添加到群组中
其他用户也是按照这种方式依次添加到群组,注意在添加的过程中指明对应成员的工作属性,如上图添加的成员为Owner,那么我其他成员就填Developer(开发)。
如果收不到邮件或不使用邮箱(这里的邮箱用来修改密码的),可进行依次编辑用户修改密码。
这里以一个用户为例,其他用户同样操作:
以上所有操作有我们运维工程师部署操作,包括账户密码的创建修改。用户和密码都创建修改好后,我们就可以将创建好的用户及密码发给开发项目经理及相关主要成员,用于登录查看。
创建项目这个步骤不是我们运维工程师的工作,当我们把账号交给项目项目主管/经理时,由他们来立项。比如以下由项目主管/经理登录他的账号及密码去登录Gitlab,并创建相关项目。
(1)项目主管/经理登录Gitlab
(2)修改初始密码
这里的初始密码就是我们在上面给设置的密码,当我们将账号密码给别人,被人登录Gitlab时,会再次提示登录者修改初始密码(为了保证安全),修改完之后再次登录即可。
(3)创建项目
在项目研发前,一般会由我们的项目主管/经理创建相应的目录结构、阅读手册等。创建好后他们会推到Gitlab上,然后由我们的研发人员进行clone到本地进行各自的工作,研发人员完成任务后上传至Gitlab即可。比如这里我就以
zhurongsen
(我们的Owner)用户来演示如何创建项目的一些需求(包括阅读手册等)。
(1)创建账户并上传公钥
[root@database ~]# useradd zhurongsen
[root@database ~]# su zhurongsen # 切换到普通用户
[zhurongsen@database root]$ ssh-keygen -C "xxxx@163.com" # 生成公钥
[zhurongsen@database root]$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKnUSz3T3tXGWZnYvkP+hJ7sFN1ezclv9N3l0e/V29VuE+NpQyKHYLTY26mV8i4Ztc2oN4m2IfEFNk3s52yUb8+JeGfQiS/E4eHDaKEheS9sdtPI9ILz3kXm2aFZTrwrkltEBcuKOm/A9DRyYE+nPSQ
28iAy4nnLClT+XOiRmmMiUgBm+JsQFeB0HTlEppww75mSpkk5MQxy4X6q33c0iQY5m9VN+5pwjp1edSNARJSlcltqXDupO1qQt+OPT4nm+a/jujuVrxknOI5e45tKeXx/F0nGxL6/VIhyLntcz55+RIJFClQtocKbcwQ81exqgh22UYsQytveAFN9v0WOUR xxxx@163.com
将上面cat的公钥复制,然后粘贴到zhurongsen用户登录的Gitlab平台上,目的是为了免密。
(2)为zhurongsen
用户配置git
[zhurongsen@database ~]$ git config --global user.email "xxxx@163.com" # zhurongsen邮箱
[zhurongsen@database ~]$ git config --global user.name "zhurongsen" # 上图中的title
(3)clone项目到本地
[zhurongsen@database ~]$ git clone git@10.20.151.99:rab/my-rab.git
[zhurongsen@database ~]$ ls
my-rab
[zhurongsen@database ~]$ cd my-rab/
[zhurongsen@database my-rab]$ ls
README.md
(4)创建/修改文件内容
创建/修改
[zhurongsen@database my-rab]$ vim README.md
添加到暂存区
[zhurongsen@database my-rab]$ git add .
[zhurongsen@database my-rab]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.md
#
添加到本地仓库(.git)
[zhurongsen@database my-rab]$ git commit -m 'README.md 第二次修改 2020.11.02'
[master a6e9ad9] README.md 第二次修改 2020.11.02
1 file changed, 5 insertions(+), 1 deletion(-)
推到远程仓库(Gitlab)
[zhurongsen@database my-rab]$ git remote -v
origin git@10.20.151.99:rab/my-rab.git (fetch)
origin git@10.20.151.99:rab/my-rab.git (push)
[zhurongsen@database my-rab]$ git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 424 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@10.20.151.99:rab/my-rab.git
2c0551d..a6e9ad9 master -> master
Branch master set up to track remote branch master from origin.
(5)回到浏览器端(刷新一下页面)
以上就是我们管理者对项目的一个创建,目录的结构的定义并上传至我们的Gitlab服务端,供我们相关开发人进行clone到本地,然后进行相应的代码编写、提交 。
注意一点的是:如果仅仅创建一个空目录,那是无法推到Gitlab上的,而一般在我们实际生产中,每个目录基本下都会创建一个
README.md
的参考文档或帮助手册。
项目立项完成,接下来就是开发工程师们进行研发。这个时候开发工程师们拿上自己得账号密码(我们运维工程师已经创建好的将账号和密码发给了他们)在自己的机器上进行代码编写,他们会在自己得电脑上创建一个用户(这个用户就是我们提供的用户,实际上这个用户就是他们自己),然后将编写、修改的内容提交到Gitlab平台,然后通过申请合并相关分支,完成代码提交。比如这里我就以
zhuxiaojie
(我们的普通开发人员)用户来演示项目的开发流程。
(1)管理者创建分支(Branch)
在总的管理账号(administrator)或zhurongsen管理者(项目主管/经理)下创建相应分支。
(2)切换到普通程序员登录Gitlab
同理,第一次登录需要重新修改登录密码,和上面一样,这里省略修改新密码的步骤。
(3)创建账户并上传公钥
[root@database ~]# useradd zhuxiaojie
[root@database ~]# su zhuxiaojie
[zhuxiaojie@database root]$ ssh-keygen -C "xxxx@163.com"
[zhuxiaojie@database root]$ cat ~/.ssh/id_rsa.pub # 将公钥复制粘贴到Gitlab上
(4)为zhuxiaojie
用户配置git
[zhuxiaojie@database ~]$ git config --global user.email "xxxx@163.com" # 邮箱地址
[zhuxiaojie@database ~]$ git config --global user.name "xxxx@163.com" # 对应Title名
(5)clone项目到本地
本次我们以HTTP方式克隆,不过这种方式每次都是需要密码验证的。
[zhuxiaojie@database ~]$ git clone http://10.20.151.99/rab/my-rab.git
[zhuxiaojie@database ~]$ ls
my-rab
注意和SSH方式clone的对比:你会发现这里origin
后面跟的是HTTP格式。这种方式不太方便的一点就是每次都需要拉取/推送都需要输入密码。
[zhuxiaojie@database my-rab]$ git remote -v
origin http://10.20.151.99/rab/my-rab.git (fetch)
origin http://10.20.151.99/rab/my-rab.git (push)
那如何解决呢?方法就是改成SSH格式(到这里也许你会说,那你这个HTTP的方式岂不是多此一举吗?),没错,这只不过是想告诉你我们clone的方式不只是仅限于SSH方式,HTTP也可。
[zhuxiaojie@database my-rab]$ git remote remove origin
[zhuxiaojie@database my-rab]$ git remote -v
[zhuxiaojie@database my-rab]$ git remote add sz git@10.20.151.99:/rab/my-rab.git
[zhuxiaojie@database my-rab]$ git remote -v
sz git@10.20.151.99:/rab/my-rab.git (fetch)
sz git@10.20.151.99:/rab/my-rab.git (push)
可以看到上面已经成功修改为SSH方式了。
(6)创建并切换到dev分支
[zhuxiaojie@database my-rab]$ git branch # 没有dev分支
* master
[zhuxiaojie@database my-rab]$ git checkout -b dev # 创建并切换到dev分支
Switched to a new branch 'dev'
[zhuxiaojie@database my-rab]$ git branch
* dev # 已切换到dev分支
master
接下来就是写代码了。
[zhuxiaojie@database my-rab]$ mkdir html
[zhuxiaojie@database my-rab]$ vim html/index.html
(7)代码提交
[zhuxiaojie@database my-rab]$ git commit -m '第一次提交代码'
[dev a797b63] 第一次提交代码
1 file changed, 3 insertions(+)
create mode 100644 html/index.html
[zhuxiaojie@database my-rab]$ git push sz dev # 推到Gitlab上
可去我们的Gitlab上看看是否已推送
需要注意的是:如果有其他研发人员需要编写或修改代码时,每次都需要先pull一下,将最新的代码下载下来再进行相应操作。
(8)合并dev分支
(9)项目主管/经理会收到请求
这里登录项目主管/经理的Gitlab账号
zhurongsen
,通过/拒绝请求。
合并完成后发现有问题,怎么办?可回滚:
(10)这时可去项目中查看master分支是否已合并完成
以上就是我们Gitlab平台的搭建、用户创建、项目创建、代码修改/提交、分支合并的整个项目流程。
到最后我们要清楚的就是什么是 GitLab?GitLab 的作用等等。GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具。通过 GitLab 我们可以创建账户密码供研发人员登录使用,同时很方便地对项目的管理,如代码的编写、修改、回滚和提交等等。以上仅仅是比较简单的一些常见操作,很多用法还有待我们继续去学习。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。