您当前的位置:周俊奇博客 > 项目

CentOS安装gitlab服务及创建git仓库实践笔记

时间:2022-11-17 13:11:23

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。安装方法是参考GitLab在GitHub上的Wiki页面。Gitlab是被广泛使用的基于git的开源代码管理平台,基于Ruby on Rails构建,主要针对软件开发过程中产生的代码和文档进行管理,Gitlab主要针对group和project两个维度进行代码和文档管理,其中group是群组,project是工程项目,一个group可以管理多个project,可以理解为一个群组中有多项软件开发任务,而一个project中可能包含多个branch, 意为每个项目中有多个分支, 分支间相互独立, 不同分支可以进行归并。

作者本人客串配置组织级管理员,系统的实践配置管理及其工具gitlab过程笔记。

1. 安装GitLab服务

1.1. 安装依赖包

环境:CentOS 7.2。 如果已经安装openssh、postfix,以及防火墙忽略此部分内容。

[root@DeepLearning python]$ sudo yum install -y curl policycoreutils-python openssh-server
[root@DeepLearning python]$ systemctl start sshd

[root@DeepLearning python]$ yum install postfix
[root@DeepLearning python]$ systemctl enable postfix

允许http服务,打开防火墙

[root@DeepLearning python]$ firewall-cmd --permanent --add-service=http
[root@DeepLearning python]$ systemctl reload firewalld

1.2. 安装GitLab软件包

下载rpm包:

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm

安装rpm包:

[root@DeepLearning python]$ rpm -i gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm

安装过程需要些时间,如果出现下图,则说明安装成功。

在这里插入图片描述

Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
  sudo gitlab-ctl reconfigure

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

1.3. 编辑配置文件

修改gitlab配置文件指定服务器ip和自定义端口(默认端口8080):

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://192.168.1*.2**:8888'

Error executing action create on resource ‘user[GitLab user and group]’

由于先前已经在CentOS7.2系统中安装了git服务,过程中可能会报错如上错误,需要将配置文件中username改为"gitlab"。

user['username'] = "gitlab"
user['group'] = "gitlab"

执行编译gitlib配置。

[root@DeepLearning python]# gitlab-ctl reconfigure

Starting Chef Client, version 12.12.15
resolving cookbooks for run list: ["gitlab"]
......
Running handlers:
Running handlers complete
Chef Client finished, 356/515 resources updated in 02 minutes 04 seconds
gitlab Reconfigured!

1.4. 启动服务

gitlab-ctl restart

ok: run: gitaly: (pid 12810) 0s
ok: run: gitlab-monitor: (pid 12828) 0s
ok: run: gitlab-workhorse: (pid 12867) 1s
ok: run: logrotate: (pid 12884) 0s
ok: run: nginx: (pid 12890) 1s
ok: run: node-exporter: (pid 12901) 0s
ok: run: postgres-exporter: (pid 12907) 0s
ok: run: postgresql: (pid 12917) 0s
ok: run: prometheus: (pid 12925) 0s
ok: run: redis: (pid 12938) 1s
ok: run: redis-exporter: (pid 12942) 0s
ok: run: sidekiq: (pid 12959) 0s
ok: run: unicorn: (pid 12968) 0s

1.5. 停止服务

 gitlab-ctl stop

1.6. 其他

发信系统用的默认的postfix,smtp是默认开启的,两个都启用了,两个都不会工作。

关闭smtp方法: vim /etc/gitlab/gitlab.rb

把#gitlab_rails[‘smtp_enable’] = true 改为 gitlab_rails[‘smtp_enable’] = false

修改后执行gitlab-ctl reconfigure。

2. GitLab配置管理基本概念

2.1. 群组 / 项目

群组(group)和项目(project)的关系我们可以简单的理解成树(tree)的节点和其分支的关系。一个群组可以包含一个或多个项目。

使用群组,可以将相关的项目组合在一起,并允许成员同时访问多个项目。群组也可以嵌套在子组中,建议最多嵌套一层。项目的命名我们建议前缀组的名称。项目的所属关系可以转移。

对于一个公司来说,通常会有很多研发小组,通常情况下,各个研发小组的项目是只允许小组内成员访问的,GitLab通过群组这个概念来区分小组,从而实现小组间项目隔离;

2.2. 群组 / 项目访问(可见)级别

创建群组或者创建项目时,需要设置可见级别,默认为 Internal。有三种级别可选:

  • private:只有项目成员访问才允许访问该项目。必须明确给每一个用户授权访问。

  • Internal:任何已登录的用户均可以访问该项目。

  • public:任何人都可以访问该项目,无论是否登录。

基于信息安全及知识产权等原因,企业商用项目所涉及到群组 / 项目,原则上应该保证知道的人越少越好,Group 和 Project 的访问级别均应该设置为 Private。

对于模板和纯技术类项目,应该设置为 public 或者 internal。

还有一类项目,希望所有人知道它的存在,可以浏览,可以搜索,但是不希望所有人都能够获取它的代码。那我们可以这样来设置:项目的访问级别是 Internal。

项目的(Settings(设置) -> General(常规) -> Permissions(权限) -> Repository(仓库)) 权限设置为: Only Project Members。

2.3. 用户权限

GitLab 的权限分为群组和项目权限。项目的默认权限继承群组的权限。GitLab有Guest(访客)、Reporter(报告者)、Developer(开发者)、Master(管理者)、Owner(所有者)五种身份设置,不同的身份分别具有不同的操作权限.,具体权限如下:

  • Guest:可以创建issue、发表评论,不能读写版本库

  • Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限

  • Developer:可以克隆代码、开发、提交、push,RD可以赋予这个权限

  • Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限

  • Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限

3. 应用GitLab服务

首次登录(http://192.168.1*…2**:8888/),系统默认使用root用户,并初始化设置密码。

3.1. 创建项目

在创建项目之前,最好先创建群组,效果如下: 在这里插入图片描述 在“bigdata”群组下,新建“caulsal”项目,详见下图。 在这里插入图片描述 编辑项目(类似git上完成首次提交操作后,才允许创建分支)。 在这里插入图片描述 如上图,编辑.gitignore文件,例如下图忽略python配置、临时文件等等。 在这里插入图片描述

3.2. 添加分支

Git常规分支管理:

  • master 分支 : 主分支,不轻易改动,主要做正式发版使用,一般发版的包都从 master 分支中构建 pre-release 分支 : 预发布分支,是在正式发版前的测试使用分支,测试使用的包都从此处构建,测试完成后合并到 master 分支进行发版;

  • developer 分支 : 开发分支,每个版本的所有需求开发所在分支;

  • feature 分支 : 具体的需求开发分支,因为开发大都是团队协作,开发成员负责自己的需求开发时,一般建议从 developer 分支中重新拉一条分支出来,作为成员自己的开发分支,最后再合并到 developer 分支中,所以 feature 分支一般会有多个;

  • hotfix 分支 : 紧急修复分支,如果线上版本遇到bug,则一般建议从 master 分支拉出一条分支,作为紧急修复分支,在 hotfix 测试没有问题后,合并到 master 进行紧急发版。

打开项目创建分支,默认创建master分支(初始化,首次提交时自动创建)。 在这里插入图片描述

添加开发分支(develop)。 在这里插入图片描述

3.3. *git客户端添加分支

在客户端初始化仓库,gitlab已经给出指导操作命令: git commit -m '初始化项目' 客户端本地安装git工具(略)。

E:\temp>git clone gitlab@192.168.1*.2**:bigdata/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.
E:\temp>cd test

E:\temp\test>notepad readme.md

E:\temp\test>git add readme.md
E:\temp\test>git commit -m "add readme.md"
[master (root-commit) 0245766] add readme.md
 1 file changed, 1 insertion(+)
 create mode 100644 readme.md

E:\temp\test>git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 231 bytes | 231.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To 192.168.1*.2**:bigdata/test.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

最开始push时出现如下问题: remote: HTTP Basic: Access denied fatal: Authentication failed for ‘http://192.168.1*.2**:8888/bigdata/test.git/’ 原因是本地仓库是,解决方案有两个办法:

  • 增加文件再提交,推送

  • 运行空提交 $ git commit -m “initial commit” --allow-empty $ git push

添加新的分支:

E:\temp\test>git branch develop
E:\temp\test>git branch
  develop
* master

E:\temp\test>git commit -m "develop" --allow-empty
[master 6ea5f1b] develop

E:\temp\test>git push origin develop:develop
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: To create a merge request for develop, visit:
remote:   http://192.168.19.229:8888/bigdata/test/merge_requests/new?merge_request%5Bsource_branch%5D=develop
remote:
To 192.168.1*.2**:bigdata/test.git
 * [new branch]      develop -> develop

3.4. 合并分支

如果先创建分支,而后提交文档到主分支中,而非从各个子分支逐步提交合并上来的情况,使用如下步骤把主分区内容合并到其他分支中。 在这里插入图片描述

3.5. 关于客户端登录账户和密码管理

对于输入密码错误/修改,更换账户的情况,可以使用如下方法:打开控制面板–>用户账户–>凭证管理器–>windows凭据,删除即可。 在这里插入图片描述

4. 总结

gitlab-ce作为开源配置服务工具,部署与使用比git简单,关键还是怎么做好配置管理。

在这里插入图片描述

很多公司设置了组织级配置管理员与项目级配置管理员,以下为建议的对这两种岗位的职责定义。

项目级配置管理员的职责:

  • 制定配置管理计划

  • 建立并维护配置管理库

  • 建立并发布基线

  • 物理审计(PCA)

  • 跟踪并关闭变更申请

  • 报告配置状态

组织级CM的职责:

  • 为项目组建立初始的配置库

  • 向项目组成员提供配置管理方面的培训及技术支持

  • 配置管理工具的定制

  • 配置管理审计

  • 对外发布产品

  • 维护更新配置管理标准过程及模板

  • 备份配置库

标签: CentOSgitlabgit