基于docker的gitlab使用笔记

1 常用代码托管软件对比

svn和git的对比:

  • svn是集中式、git是分布式
  • svn的分支是复制整套代码,操作繁琐,git是移动了一个指针,操作简单,使用分支的开销小
  • svn对文件进行权限控制,gitlab对项目或成员进行权限控制
  • svn功能简单,也适合行政、美工使用

1.1 GIT系列

代码仓库托管软件特性
GitLab-CE大而全的解决方案整合,将 Git 托管、持续集成/部署等功能做在了一起,相当于开源,可私有部署的GitHub。功能完善,易使用。
Gerritgoogle为android系统研发制作一套免费开源的代码审核系统,可对每次提交review。专注代码审核,但使用较复杂。
Gitea功能较为单一的 Git 托管服务器,所有功能都围绕着 Git 托管而来。功能简单,易使用。

1.2 SVN系列

代码仓库托管软件特性
VisualSVN Server基于Subversion 的GUI服务端,VisualSVN Server集成了Apache HTTP Server和Apache Subversion ,支持浏览器访问。

2 搭建GitLab服务器

2.1 安装docker

sudo apt install docker.io

2.2 设置日志大小

全局设置,新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:

vim /etc/docker/daemon.json  
{
  "insecure-registries" : [
    "registry.docker-cn.com",
    "docker.mirrors.ustc.edu.cn"
  ],
  "debug" : true,
  "experimental" : true,
  "storage-driver": "overlay2"
}
{
    "log-driver":"json-file",
    "log-opts":{
        "max-size" :"50m","max-file":"1"
    }
}
{
  "registry-mirrors": ["https://c64zf1n6.mirror.aliyuncs.com"]
}

max-size=50m,意味着一个容器日志大小上限是50M

max-file=1,意味着一个容器有1个日志

registry-mirrors,设置国内镜像加速

重启docker守护进程

systemctl daemon-reload
systemctl restart docker

2.3 创建GitLab容器

docker pull gitlab/gitlab-ce
docker run \
    --restart always \
    --name gitlab \
    -itd \
    -p 8080:80 \
    -p 222:22 \
    -v /root/gitlab/gitlab_config:/etc/gitlab \
    -v /root/gitlab/gitlab_log:/var/log/gitlab \
    -v /root/gitlab/gitlab_data:/var/opt/gitlab \
    gitlab/gitlab-ce

将本地文件夹挂载到容器文件夹,使关键文件存储在主机上,做到删容不删库

2.4 修改配置文件

需要一个固定的URL访问地址,配置gitlab.rb(宿主机路径:/home/gitlab/config/gitlab.rb)

vi /root/gitlab/gitlab_config/gitlab.rb
# 配置http协议所使用的访问地址
external_url 'http://youpeng.info'

gitlab_rails['gitlab_ssh_host'] = '139.224.30.179'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # ssh连接端口

2.5 创建管理员账户

docker exec -it gitlab /bin/bash
[root@web1 ~]# gitlab-rails console  -e  production
-------------------------------------------------------------------------------------
 Gitlab:       13.0.5 (2268d0cdfcds) FOSS
 Gitlab Shell: 13.2.0
 postgresql:   11.7
-------------------------------------------------------------------------------------
Loading production environment (Rails 6.0.3)
irb(main):001:0>  user = User.where(id: 1).first    
=> #<User id:1 @admin>
irb(main):002:0> user.password="xxxxxxxx"
=> "xxxxxxxx"
irb(main):003:0> user.password_confirmation="xxxxxxxx"
=> "xxxxxxxx"
irb(main):004:0> user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: 3ef37c47-4b3f-49e5-aa53-904e725bd1a8) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1
=> true
irb(main):005:0> quit
docker restart gitlab

3 GitLab权限管理

3.1 项目权限

项目类型项目访问权限
Private私有。只有组成员才能看到
Internal内部。只要登录的用户就能看到
Public公开。所有人都能看到

3.2 项目成员权限

邀请成员加入项目时,可设置成员权限

成员角色用户权限
Guest访客。可以创建issue、发表评论,不能读写版本库(就是看不了代码…)
ReporterGit项目测试人员。可以克隆代码,不能提交。QA、PM可以赋予这个权限
Developer项目开发人员。可以克隆代码、开发、提交、push。RD可以赋予这个权限
MaintainerGit项目管理员。可以创建项目、添加tag、保护分支、添加项目成员、编辑项目。核心RD负责人可以赋予这个权限
OwnerGit系统管理员即Administrator。拥有至高无上的权限。开发组leader可以赋予这个权限

示例

微信截图_20220625155403

4 提交规范和分支工作流

4.1 代码提交规范

  • 单项修改进行一次提交,不要多个功能揉在一起提交
提交类型描述
feat新增的功能,如某个芯片驱动,某个接口,测试代码
fix修补bug
docs文档
style格式
  • 建议示例
fix: 修复SPI时序问题
  • 复杂示例
feat:完成xxx功能
详述...................
详述...................
详述...................

第一行进行简单描述,不能太长。如果不能描述清楚,换行写详细描述

4.2 分支工作流

对于驱动开发不需要建立很多分支,使用如下分支工作流比较合适

______+_________________-___doc:readme__+____________-___  main
      |__+feat:at24c04__|               |            |     feat-at24c04
                                        |__+fix:i2c__|     fix-i2c
  • 整个项目长期存在一个main分支,main分支设定为受保护的分支,不允许删除
  • 对于功能开发,必须基于main分支创建一个feat分支,如feat-at24c02,功能开发完毕后,合并该分支到main分支,并删除此feat分支
  • 对于bug修复,必须基于main分支创建一个fix分支,如fix-i2c,bug修复完毕后,合并该分支到main分支,并删除此fix分支
  • 对于提交文档、代码风格修改,直接在main分支提交,不必另建分支
  • 分支合并时必须指定指派人审核者,只有现审核后,指派人才能批准合并,提高代码质量
  • main分支每次合并后,服务器会自动对代码进行编译,开发人员需关注编译日志
  • 不管是在本地合并,还是在GitLab合并分支,都应该发起议会,对此此合并进行讨论、审核

4.3 解决合并冲突

______+__________________+___-____doc:readme____-________  main
      |__+feat:at24c04___|___|                  |          feat-at24c04
                         |________+fix:i2c______|          fix-i2c

GitLab将源分支合并到目标分支时,如果都对同一处代码进行了修改,就会产生合并冲突,无法合并。需在本地解决冲突。

注意!:千万不要不解决冲突,直接add commit push

5 GitLab代码评审

对比两种开源代码管理系统

  • gitlab:GitLab社区版,对每次merge进行review,满足使用要求,工作思维和GitHub相似,易上手
  • gerrit:google开发android时的代码评审工具,可对每次commit进行review,但此工具使用难度很大

5.1 评价单个提交

进入项目仓库->点击提交

微信截图_20220625161016

点击某次提交,添加评价

微信截图_20220625161227

5.2 对Merge进行review

发起合并请求时,会指定指派人审核者对代码审核,记录review意见,决定是否合并

由于使用的GitLab社区版,只能邀请一位审核者

微信截图_20220626104214

5.3 issue(议会)

对需要讨论的功能需求或代码实现,可发起议会,邀请议会参与者

6 GitLab持续集成

持续集成指的是只要代码有变更,就自动运行构建和测试,反馈运行结果

持续集成的好处在于,每次代码的小幅变更,就能看到构建及运行结果

gitlab-ci由两部分组成:

  • gitlab server :负责调度、触发 Runner,以及获取返回的结果,无需用户配置。
  • gitlab runner :负责执行自动化 CI 的宿主,需要用户自己配置,Runner 可以存在多个

6.1 gitlab runner

命令安装

基于ubuntu镜像安装

docker run -it \
--name runner \
--hostname runner \
ubuntu \
/bin/bash

–name:容器名

–hostname :容器主机名

–network: 指定容器的网络, 启动容器默认使用bridge网络,这里直接使用主机的网络

更新gitlab-runner源

apt update
apt install curl
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | bash
apt update

安装

apt install gitlab-runner

注册runner

root@ubuntu-runner:/# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=4607 revision=c6e7e194 version=14.8.2
Running in system-mode.                            

Enter the GitLab instance URL (for example, https://gitlab.com/):
http://172.18.92.251:8080
Enter the registration token:
xE4YaEm9NdMCyZsYnTzr
Enter a description for the runner:
[ubuntu-runner]: build
Enter tags for the runner (comma-separated):
build
Enter optional maintenance note for the runner:
build
Registering runner... succeeded                     runner=xE4YaEm9
Enter an executor: virtualbox, docker+machine, docker, docker-ssh, shell, ssh, custom, parallels, docker-ssh+machine, kubernetes:
shell

如果显示runner不在线,重启runner

gitlab-ci-multi-runner restart

注意:

当提交代码后没有触发,一直停留在pending;原因,没有标记tag的代码提交是不会触发gitlab runner的,勾选运行未标记的作业

移除runner

gitlab-runner list
gitlab-runner verify --delete --name=h3

移除不了的话,在gitlab里删除此runner,再移除

如果还移除不了,手动删除runner部分

gitlab-runner stop
vim /etc/gitlab-runner/config.toml
gitlab-runner start
创建ubuntu-build容器

基于ubuntu/runner镜像创建ubuntu-build容器

挂载/root/project目录用于编译调试

docker run -it \
--name build-zynq \
--hostname build-zynq \
-p 5002:22 \
-v "/root/workspaces:/root/workspaces" \
ubuntu \
/bin/bash
安装openssh-server

方便调试时远程登陆编译

apt install openssh-server
apt install vim
vim /etc/ssh/sshd_config

添加如下

PubkeyAuthentication yes #启用公钥私钥配对认证方式 
AuthorizedKeysFile .ssh/pub_key #公钥文件路径(和上面生成的文件同) 
PermitRootLogin yes #root能使用ssh登录
ClientAliveInterval 60  #参数数值是秒 , 是指超时时间
ClientAliveCountMax 3 #设置允许超时的次数

添加ssh公钥

vim /root/.ssh/pub_key

启动ssh服务

service ssh start

登陆脚本

#!/bin/bash
ssh -i /home/coder/project/.ssh/h3_rsa root@172.18.92.251 -p 5001

7 README和Wiki

优秀的项目一定有完善,易懂的文档

7.1 README

  • README.md文件用于介绍此代码仓库
  • 使用markdow格式编写README.md

示例:

微信截图_20220626110457

7.2 WiKi

项目wiki应包含项目开发文档、经验文档等。

微信截图_20220626110710
关注博主公众号,优质文章不断更新
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最好有梦想~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值