Devops-day1-Git+GitLab介绍及使用

Git+GitLab介绍及使用

一、持续集成简介

1.软件开发生命周期

​ 软件开发生命周期又叫做 SDLC(Software Development Life Cycle),它是集合了计划、开发、测试 和部署过程 的集合。

1)需求分析

​ 这是生命周期的第一阶段,根据项目需求,团队执行一个可行性计划的分析。项目需求可能是公司内部 或者客户提出的。这阶段主要是对信息的收集,也有可能是对现有项目的改善和重新做一个新的项目。还要 分析项目的预算多长,可以从哪方面受益及布局,这也是项目创建的目标。

2)设计

​ 第二阶段就是设计阶段,系统架构和满意状态(就是要做成什么样子,有什么功能),和创建一个项目计 划。计划可以使用图表,布局设计或者文者的方式呈现。

3)实现

​ 第三阶段就是实现阶段,项目经理创建和分配工作给开者,开发者根据任务和在设计阶段定义的目标进 行开发代码。依据项目的大小和复杂程度,可以需要数月或更长时间才能完成。

4)测试

​ 测试人员进行代码测试 ,包括功能测试、代码测试、压力测试等。

5)进化

​ 最后进阶段就是对产品不断的进化改进和维护阶段,根据用户的使用情况,可能需要对某功能进行修改, bug 修复,功能增加等。

2.敏捷开发

​ 敏捷开发的核心:迭代开发、增量开发

1)迭代开发

​ 对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次"大 开发"; 迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次"大开发"变成多次"小开 发",每次小开发 都是同样的流程,所以看上去就好像重复在做同样的步骤。

2)增量开发

​ 软件的每个版本,都会新增一个用户可以感知的完整功能。也就是说,按照新增功能来划分迭代。

3)敏捷开发如何迭代?

​ 虽然敏捷开发将软件开发分成多个迭代,但是也要求,每次迭代都是一个完整的软件开发周期,必须按 照软件工程的方法论,进行正规的流程管理。

3.持续集成

  • 持续集成,简称CI(Continuous integration),指频繁地(一天多次)将代码集成到主干。

  • 目的:让产品可以快速迭代,同时还能保持高质量

  • 核心措施:代码集成到主干之前,必须通过自动化 测试。只要有一个测试用例失败,就不能集

通过持续集成,团队可以快速的从一个功能到另一个功能,简而 言之,敏捷软件开发很大一部分都要归功于持续集成。在持续集成的过程当中主要包括以下步骤:提交、测试、 构建(容器需要构建, 编译型语言编译)、部署及回滚。

1)持续集成三要素

1> 一个自动构建过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需 人工干预.

2> 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,一般使用 SVN 或 Git。

3> 一个持续集成服务器,Jenkins 就是一个配置简单和使用方便的持续集成服务器。

2)持续集成的好处

1> 降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少。

2> 对系统健康持续检查,减少发布风险带来的问题。

3> 减少重复性工作。

4> 持续部署,提供可部署单元包。

5> 持续交付可供使用的版本。

6> 增强团队信心。

二、GitLab私有代码仓库

​ GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。

​ GitLab 和 GitHub 一样属于第三方基于 Git 开发的作品(私有仓库),GITLAB 免费且开源(基于 MIT 协议),与 Github 类似, 可以注册用户,任意提交你的代码,添加 SSHKey 等等。

​ 不同的是,GitLab 是可以部署到自己的服务器 上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把 GitLab 看作个人版的 GitHub。

1.Git(代码管理工具)

​ Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为 了帮助管理 Linux 内核开发而是一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等 不同,它采用了分布式版本库的方式,不必有服务器端软件支持。

git的优缺点:

  • 优点:

    • 适合分布式开发,强调个体。
    • 公共服务器压力和数据量都不会太大。
    • 速度快、灵活。
    • 任意两个开发者之间可以很容易的解决冲突。
    • 离线工作。
  • 缺点:

    • 资料少(起码中文资料很少)。
    • 学习周期相对而言比较长。
    • 不符合常规思维。
    • 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
  • 代码提交流程

    创建test目录
    初始化(git init)
    添加到暂存区(git add)
    提交至缓存区(git commit)
    将代码上传到服务器,然后解压
    将代码上传到服务器中,然后通过软连接的方式部署
    
    PS:指定回滚版本:git log查看回滚id >> git reset --hard [回滚id]
    PS:无法实现批量部署,无法实现批量回滚,更无法实现批量测试。
    
    ===============================================================
    
    自动集成(java、golang)、自动部署、自动测试: DevOps
    
    代码:
    	编译型语言:需要编译,后运行
    	脚本型语言:直接运行
    
    工具:
        实现自动集成、自动部署:Jenkins
        代码管理:git ---> gitlab、github、gitee
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTQResaa-1619606813030)(https://i.loli.net/2021/04/28/x165vSqQNCXUkts.png)]

1)安装Git

[root@k8s-master1 ~]# yum install git -y
[root@k8s-master1 ~]# git --version
git version 1.8.3.1

2)新建代码仓库

[root@k8s-master1 ~]# mkdir test
[root@k8s-master1 ~]# cd test

# 初始化
[root@k8s-master1 test]# git init
Initialized empty Git repository in /root/test/.git/

# 初始化成功
[root@k8s-master1 test]# ll -a
total 4
drwxr-xr-x   3 root root   18 Apr 13 16:46 .
dr-xr-x---. 18 root root 4096 Apr 13 16:46 ..
drwxr-xr-x   7 root root  119 Apr 13 16:46 .git

3)编辑、提交代码

1.输入内容到新文件内
[root@k8s-master1 test]# echo 123 > index.html

# 查看状态,提示未添加到暂存区
[root@k8s-master1 test]# git status 
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	index.html
nothing added to commit but untracked files present (use "git add" to track)

2.将代码提交至git暂存区
[root@k8s-master1 test]# git add index.html

# 查看状态,提示未添加到缓冲区
[root@k8s-master1 test]# git status 
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	new file:   index.html

3.将代码提交至git缓冲区,至此算一个版本完成
[root@k8s-master1 test]# git commit -m 'init' .
	-m : 添加注释

# 再次重新编辑index.html(相当于编辑v2版本~)
[root@k8s-master1 test]# echo 222 > index.html 
[root@k8s-master1 test]# git add index.html
[root@k8s-master1 test]# git commit -m 'init'
[master ae571fd] init
 1 file changed, 1 insertion(+), 1 deletion(-)
 
# 此时查看日志记录,提交过两次
[root@k8s-master1 test]# git log
commit ae571fd4eb576120843cd2d969a217d18b59b9cf
Author: Peng <1710724925@qq.com>
Date:   Tue Apr 13 17:05:38 2021 +0800
    init
commit a200c47171eef55cce2809d2fb51756fe3358ef4
Author: Peng <1710724925@qq.com>
Date:   Tue Apr 13 17:05:06 2021 +0800
    init

# 当前内容如下
[root@k8s-master1 test]# cat index.html 
222

4)测试回滚

# 回滚到上个版本
[root@k8s-master1 test]# git reset --hard a200c47171eef55cce2809d2fb51756fe3358ef4
HEAD is now at a200c47 init

# 回滚成功
[root@k8s-master1 test]# cat index.html 
111
[root@k8s-master1 test]# git reset --hard ae571fd4eb576120843cd2d969a217d18b59b9cf
HEAD is now at ae571fd init

# 撤销回滚
[root@k8s-master1 test]# cat index.html 
222

5)设置用户名和邮箱

  • 访问:https://gitee.com/
  • 用户名:账号用户名
  • 邮箱:需手动绑定一个
# 绑定用户名、邮箱
[root@k8s-master1 test]# git config --global user.name "Peng"
[root@k8s-master1 test]# git config --global user.email "1710724925@qq.com"

# 查看绑定
[root@k8s-master1 data]# git config -l | grep user
user.email=1710724925@qq.com
user.name=Peng

# 指定查看
[root@k8s-master1 test]# git config --get user.name
Peng
[root@k8s-master1 test]# it config --get user.email
1710724925@qq.com

6)链接远程仓库

命令功能:
git status 查看工作目录的状态
git add <file> 将文件添加到暂存区
git commit -m "commnet" 提交更改,添加备注信息(此时将暂存区的信息提交到本地仓库)
git push origin master 将本地仓库的文件 push 到远程仓库(若 push 不成功,可加 -f 进行强
推操作)
1.克隆远程仓库到本地(下载)
# 例如在网页编辑一句代码并保存,从本地获取,复制文件的http连接
[root@k8s-master1 test]# git clone https://gitee.com/zhenpengzhang/data.git

# 查看,多了远端的data仓库
[root@k8s-master1 data]# tree
.
├── data
│   └── remote.html
└── index.html

# 查看内容
[root@k8s-master1 data]# cat data/remote.html 
i am remote a file!

2.提交到本地代码远程仓库(上传)
[root@k8s-master1 data]# git push -u origin master
Username for 'https://gitee.com': [gitee登录账号]
Password for 'https://15517127859@gitee.com': [gitee登录密码]
Counting objects: 3, done.
Writing objects: 100% (3/3), 209 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/chenyang0910/data.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

PS:

7)使用SSh将代码提交到远程

[root@k8s-master1 data]# vim .git/config
# usl更改为ssh的地址:网页点击代码-克隆-复制ssh地址
git@gitee.com:zhenpengzhang/data.git

# 创建配备秘钥,复制填写到远端个人账户
# 头像-设置-ssh公钥-填写保存
[root@k8s-master1 data]# ssh-keygen -t rsa
[root@k8s-master1 data]# cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCx8mmUPXxOs0Mjg+2renQuuFbPf+GbFHk8t+/yiK4WHG4hXVuVhlww

# 成功推送到远端
[root@k8s-master1 data]# git push -u origin master
Warning: Permanently added 'gitee.com,212.64.62.183' (ECDSA) to the list of known hosts.
Counting objects: 5, done.
Writing objects: 100% (3/3), 241 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
To git@gitee.com:chenyang0910/data.git
   63004c0..dd584e3  master -> master
Branch master set up to track remote branch master from origin.

2.GitLab(远程代码仓库)

官网:https://about.gitlab.com/

Gitlab是依赖于Git的远程代码仓库,类似于GitHub、Gitee,不同的是GitHub、Gitee的公网上代码仓库, Gitlab是可以私有化部署的免费远程代码仓库

准备机器IP配置要求
gitlab192.168.12.82内存3g+/硬盘20G+
  • 基础优化
setenforce 0
systemctl disable --now firewalld
sed -i 's#enforcing#disabled#g' /etc/sysconfig/selinux

1)部署GitLab

# 下载安装包
[root@gitlab ~]# mkdir packages && cd packages
[root@gitlab packages]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.0.3-ce.0.el7.x86_64.rpm

# 安装依赖包
[root@gitlab packages]# yum install -y curl policycoreutils-python openssh-server perl

# 安装gitlab
[root@gitlab packages]# yum install gitlab-ce-13.0.3-ce.0.el7.x86_64.rpm 

# 修改配置文件:外部url改为本机ip,端口80
[root@gitlab packages]# vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.12.82'
nginx['listen_port'] = 80

# 刷新配置(默认启动)
[root@gitlab packages]# gitlab-ctl reconfigure

# PS:中途卡主,是因为服务器配置不够,ctrl+c 强制结束,增加内存,再次执行 gitlab-ctl reconfigure 即可成功!

2)用户组、用户及项目

  • 创建用户组[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HkblFAL9-1619606813037)(https://i.loli.net/2021/04/28/UjpfCL6941gG3h5.png)]

  • 创建用户

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T57Kdz04-1619606813041)(https://i.loli.net/2021/04/28/k7SQry4UXoPuELT.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vlfWzBv9-1619606813049)(https://i.loli.net/2021/04/28/xNIrVEaOSLm5pR3.png)]

  • 创建项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjBpr4OH-1619606813052)(https://i.loli.net/2021/04/28/FvVHnQyNGJ8B6bw.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rVeRFlIG-1619606813054)(https://i.loli.net/2021/04/28/schEWS6PujqtZL5.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WXAluNji-1619606813056)(https://i.loli.net/2021/04/28/4n3IHOlaPfSR5FA.png)]

  • 添加组员至组内

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dJTaL4m9-1619606813058)(https://i.loli.net/2021/04/28/bH7NxsL5OmyGvtC.png)]

1.Guest:可以创建issue、发表评论,不能读写版本库 
2.Reporter:可以克隆代码,不能提交,QA、PM 可以赋予这个权限 
3.Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限 
4.Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个 权限 
5.Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组 长可以赋予这个权限
  • 修改权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f0zI0HcM-1619606813062)(https://i.loli.net/2021/04/28/8CtFduErhWIzOMa.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eZwKLWNa-1619606813065)(https://i.loli.net/2021/04/28/K7qjAeQBhX62yYR.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c8fWc9Av-1619606813068)(https://i.loli.net/2021/04/28/WwbRXiCTaHVkFfm.png)]

gitlab基础使用

一、组件介绍

1、nginx: 静态web服务器在这里插入代码片

2、gitlab-shell: 用于处理Git命令和修改authorized keys列表
3、gitlab-workhorse: 轻量级的反向代理服务器,可以处理一些大的HTTP请求(磁盘上的 CSS、JS 文件、文件上传下载等),处理 Git Push/Pull 请求,处理到Rails 的连接会反向代理给后端的unicorn(修改由 Rails 发送的响应或发送给 Rails 的请求,管理 Rails 的长期 WebSocket 连接等)。

4、logrotate:日志文件管理工具

5、postgresql:repository 中的数据(元数据,issue,合并请求 merge request 等 , 可以登录 Web 的用户

6、redis:缓存每个客户端的sessions和后台队列,负责分发任务。Redis需求的存储空间很小,大约每个用户25KB

7、sidekiq:用于在后台执行队列任务(异步执行)

8、unicorn:Gitlab 自身的 Web 服务器(Ruby Web Server),包含了 Gitlab 主进程,负责处理快速/一般任务,与 Redis 一起工作,配置参考:CPU核心数 + 1 = unicorn workers数量。
    1. 通过检查存储在 Redis 中的用户会话来检查权限
    2. 为 Sidekiq 制作任务
    3. 从仓库(warehouse)取东西或在那里移动东西

9、gitlab-shell:用于 SSH 交互,而不是 HTTP。gitlab-shell 通过 Redis 与 Sidekiq 进行通信,并直接或通过 TCP 间接访问 Unicorn。用于处理Git命令和修改authorized keys列表

10、Gitaly:后台服务,专门负责访问磁盘以高效处理 gitlab-shell 和 gitlab-workhorse 的git 操作,并缓存耗时操作。所有的 git 操作都通过 Gitaly 处理,并向 GitLab web 应用程序提供一个 API,以从 git(例如 title, branches, tags, other meta data)获取属性,并获取 blob(例如 diffs,commits,files)

11、Sidekiq:后台核心服务,可以从redis队列中提取作业并对其进行处理。后台作业允许GitLab通过将工作移至后台来提供更快的请求/响应周期。Sidekiq任务需要来自Redis

12、prometheus:提供监控

二、常用命令

1.服务控制命令

1)启动/停止/重启所有 gitlab 组件:

gitlab-ctl start/stop/restart

2)启动指定模块组件:

 gitlab-ctl start redis/postgresql/gitlab-workhorse/logrotate/nginx/sidekiq/unicorn

3)停止指定模块组件:

gitlab-ctl stop 模块名

4)查看服务状态

gitlab-ctl status

5)生成配置并启动服务

 gitlab-ctl reconfigure

2.其他常用管理命令

1)查看版本

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 

2)检查gitlab

gitlab-rake gitlab:check SANITIZE=true --trace

3)实时查看日志

gitlab-ctl tail

4)关系数据库升级

gitlab-rake db:migrate

5)清理redis缓存

gitlab-rake cache:clear

6)升级gitlab-ce版本

# 关闭gitlab服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
# 备份gitlab
gitlab-rake gitlab:backup:create
# 升级rpm包
rpm -Uvh gitlab-ce-xxx.rpm
# 启动并查看gitlab版本信息
gitlab-ctl reconfigure
gitlab-ctl restart
head -1 /opt/gitlab/version-manifest.txt

# 常见报错
Error executing action `run` on resource 'ruby_block[directory resource: /var/opt/gitlab/git-data/repositories]'
# 解决方法:
sudo chmod 2770 /var/opt/gitlab/git-data/repositories

7)升级postgreSQL最新版本

gitlab-ctl pg-upgrade

3.日志

1)实时查看所有日志

gitlab-ctl tail

2)实时查看某个组件日志

gitlab-ctl tail [组件名称]

4.常用配置文件目录

主配置文件: /etc/gitlab/gitlab.rb
文档根目录: /opt/gitlab
默认存储库位置: /var/opt/gitlab/git-data/repositories
Nginx配置文件: /var/opt/gitlab/nginx/conf/gitlab-http.conf
Postgresql数据目录: /var/opt/gitlab/postgresql/data

5.gitlab管理员密码重置

[root@test bin]# gitlab-rails console production
-------------------------------------------------------------------------------------
 GitLab:       11.10.4 (62c464651d2)
 GitLab Shell: 9.0.0
 PostgreSQL:   9.6.11
-------------------------------------------------------------------------------------
Loading production environment (Rails 5.0.7.2)
irb(main):001:0> user = User.where(id:1).first
=> #<User id:1 @root>
irb(main):002:0> user.password = 'qwer1234'
=> "qwer1234"
irb(main):003:0> user.password_confirmation = 'qwer1234'
=> "qwer1234"
irb(main):004:0> user.save
Enqueued ActionMailer::DeliveryJob (Job ID: 4752a4a4-4e85-4e8b-9f27-72788abfe97c) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", #<GlobalID:0x00007f519e7501d8 @uri=#<URI::GID gid://gitlab/User/1>>
=> true
irb(main):005:0> exit

6.使用smtp来发送邮件通知

vim /etc/gitlab/gitlab.rb

 gitlab_rails['smtp_address'] = "smtp.yourdomain.com"
 gitlab_rails['smtp_port'] = 25
 gitlab_rails['smtp_user_name'] = "xxx"
 gitlab_rails['smtp_password'] = "xxx"
 gitlab_rails['smtp_domain'] = "smtp.yourdomain.com" 
 gitlab_rails['smtp_authentication'] = 'plain'
 gitlab_rails['smtp_enable_starttls_auto'] = true

7.置gitlab访问模式为https

# 创建ssl证书存放目录
    mkdir -p /etc/gitlab/ssl
    chmod 0700 /etc/gitlab/ssl

# 上传证书,修改证书访问权限
    chmod 600 /etc/gitlab/ssl/gitlab.xxx.com.crt

# 修改住配置,支持ssl访问
    vim /etc/gitlab/gitlab.rb
    external_url "[https://gitlab.bjwf125.com]            (https://gitlab.bjwf125.com)"
    nginx['redirect_http_to_https'] = true
    nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.xxx.com.crt"
    nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.xxx.com.key"

# 重启
    gitlab-ctl reconfigure

# 开启防火墙

  firewall-cmd --zone=public --add-port=443/tcp --permanent
  firewal-cmd reload

8.Gitlab备份

gitlab备份的默认目录是/var/opt/gitlab/backups

1)备份命令

gitlab-rake gitlab:backup:create
#该命令会在备份目录(默认:/var/opt/gitlab/backups/)下创建一个tar压缩包xxxxxxxx_gitlab_backup.tar,其中开头的xxxxxx是备份创建的时间戳,这个压缩包包括GitLab整个的完整部分。

2)自动备份

#通过任务计划crontab 实现自动备份
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create 
# 每天两点备份gitlab数据

3)备份配置文件

vim /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/gitlab/backups"    #指定gitlab备份目录
gitlab_rails['backup_archive_permissions'] = 0644       #生成的备份文件权限
gitlab_rails['backup_keep_time'] = 7776000              #备份保留天数为3个月(即90天,这里是7776000秒)

#重载生效
gitlab-ctl reconfigure

9.备份恢复

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitbab:backup:restore BACKUP=xxxxxx(恢复文件)
gitlab-ctl start 启动gitlab
posted @ 2022-06-09 18:18  秋风お亦冷  阅读(162)  评论(0编辑  收藏  举报