002-Gitlab 图形页面版本控制系统

1、 Gitlab简介

Git有三个类:
Git:本地版本控制工具。
Github,Gitee:公共代码托管仓库,对互联网用户开放。
GitLab:主要用于企业内部自建代码版本管理系统。

2、 Gitlab部署

服务器配置要求:建议2C4G以上

rpm部署:

例如安装:gitlab-ce-13.2.3

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

#安装完成之后启动
gitlab-ctl reconfigure

#等待启动完成之后检查服务状态
gitlab-ctl status

该版本登录的时候设置root的密码
包括的服务:

run: alertmanager: (pid 1852) 22615s; run: log: (pid 1850) 22615s
run: gitaly: (pid 1818) 22615s; run: log: (pid 1816) 22615s
run: gitlab-exporter: (pid 1835) 22615s; run: log: (pid 1834) 22615s
run: gitlab-workhorse: (pid 1823) 22615s; run: log: (pid 1822) 22615s
run: grafana: (pid 1853) 22615s; run: log: (pid 1851) 22615s
run: logrotate: (pid 19303) 1014s; run: log: (pid 1836) 22615s
run: nginx: (pid 1827) 22615s; run: log: (pid 1826) 22615s
run: node-exporter: (pid 1839) 22615s; run: log: (pid 1838) 22615s
run: postgres-exporter: (pid 1849) 22616s; run: log: (pid 1845) 22616s
run: postgresql: (pid 1813) 22617s; run: log: (pid 1812) 22617s
run: prometheus: (pid 1847) 22616s; run: log: (pid 1846) 22616s
run: puma: (pid 1815) 22616s; run: log: (pid 1814) 22616s
run: redis: (pid 1810) 22617s; run: log: (pid 1809) 22617s
run: redis-exporter: (pid 1844) 22616s; run: log: (pid 1843) 22616s
run: sidekiq: (pid 1829) 22616s; run: log: (pid 1828) 22616s

Docker部署:

参考官方文档:https://docs.gitlab.com/ee/install/docker.html
:::warning
注意:ee版本和ce版本的区别,ee版本为企业,ce版本为社区版本
gitlab/gitlab-ce:latest为最新版本,版本信息为: 14.6.1
:::

mkdir /opt/gitlab
GITLAB_HOME=/opt/gitlab

sudo docker run --detach \
--hostname gitlab.exp02.com \
--publish 443:443 --publish 80:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ce:latest

# 检查容器内的服务是否启动完成
docker logs gitlab

涉及服务:

run: alertmanager: (pid 289) 2553s; run: log: (pid 288) 2553s
run: gitaly: (pid 315) 2553s; run: log: (pid 296) 2553s
run: gitlab-exporter: (pid 298) 2553s; run: log: (pid 297) 2553s
run: gitlab-workhorse: (pid 291) 2553s; run: log: (pid 290) 2553s
run: grafana: (pid 2226) 1795s; run: log: (pid 301) 2553s
run: logrotate: (pid 287) 2553s; run: log: (pid 286) 2553s
run: nginx: (pid 2220) 1795s; run: log: (pid 292) 2553s
run: postgres-exporter: (pid 300) 2553s; run: log: (pid 299) 2553s
run: postgresql: (pid 295) 2553s; run: log: (pid 294) 2553s
run: prometheus: (pid 318) 2553s; run: log: (pid 317) 2553s
run: puma: (pid 2194) 1815s; run: log: (pid 316) 2553s
run: redis: (pid 329) 2553s; run: log: (pid 311) 2553s
run: redis-exporter: (pid 321) 2553s; run: log: (pid 320) 2553s
run: sidekiq: (pid 2171) 1823s; run: log: (pid 325) 2553s
run: sshd: (pid 31) 2564s; run: log: (pid 30) 2564s

:::warning
#启动完成后获取默认密码,该密码为默认密码
cat /opt/gitlab/config/initial_root_password
image.png
002-Gitlab 图形页面版本控制系统_第1张图片
:::

3、 Gitlab基本配置(ce版本信息为: 14.6.1)

系统配置:管理中心->设置->通用

设置中文

002-Gitlab 图形页面版本控制系统_第2张图片

了解git访问协议

002-Gitlab 图形页面版本控制系统_第3张图片
002-Gitlab 图形页面版本控制系统_第4张图片

关闭注册

002-Gitlab 图形页面版本控制系统_第5张图片
002-Gitlab 图形页面版本控制系统_第6张图片

关闭外部获取头像

002-Gitlab 图形页面版本控制系统_第7张图片
去掉启用 Gravatar
保存修改之后头像显示效果,但可以自己上传
image.png

登录页面信息

002-Gitlab 图形页面版本控制系统_第8张图片
002-Gitlab 图形页面版本控制系统_第9张图片

配置SMTP(gitlab发邮件)

以163邮箱作为发送邮箱作为例子
:::warning
部署方式为docker,版本信息为:** 14.6.1**
:::
编辑配置文件: gitlab.rb
需要修改的参数,在配置文件已存在

vi /opt/gitlab/config/gitlab.rb

gitlab_rails['time_zone'] = 'Asia/Shanghai'

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "[email protected]"
gitlab_rails['smtp_password'] = "OHWEZLEYPTWJSARG"  #邮箱的授权码
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_pool'] = false  #是否作为smtp池连接,选择false则为单连接

gitlab_rails['gitlab_email_from'] = '[email protected]'

进入docker容器gitlab

#进入gitlab容器
docker exec -it gitlab bash

# 重新加载配置信息
gitlab-ctl reconfigure
# 重新启动服务
gitlab-ctl restart

验证邮件发送服务是否可用:

gitlab-rails console
Notify.test_email('[email protected]', 'gitlab', 'Hello World').deliver_now
root@gitlab:/# gitlab-rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]
 GitLab:       14.6.1 (661d663ab2b) FOSS
 GitLab Shell: 13.22.1
 PostgreSQL:   12.7
--------------------------------------------------------------------------------
Loading production environment (Rails 6.1.4.1)
irb(main):001:0> Notify.test_email('[email protected]', 'gitlab', 'Hello World').deliver_now
Delivered mail [email protected] (1940.2ms)
=> #, >, >, , >, , , , , , >
irb(main):002:0>

配置HTTPS(ce版本信息为: 14.6.1,为docker部署

1、自签证书

1、准备cfssl证书生成工具
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

2、创建证书签名请求(CSR)
mkidr /tmp-ca
cd /tmp-ca
cat > csr.json <<EOF
{
  "CN": "gitlab.exp02.com",
  "hosts": [
    "gitlab.exp02.com"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Guangdong",
      "L": "Shenzhen",
      "O": "Example Company",
      "OU": "IT Department"
    }
  ]
}
EOF

3、生成CA证书
cat > ca-csr.json <<EOF
{
  "CN": "My CA",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Guangdong",
      "L": "Shenzhen",
      "O": "Example Company",
      "OU": "IT Department"
    }
  ]
}
EOF

cfssl gencert -initca ca-csr.json | cfssljson -bare ca

4、签署域名证书

使用自签名的CA证书为域名gitlab.exp02.com签署证书

cfssl gencert \
  -ca=ca.pem \
  -ca-key=ca-key.pem \
  -config=ca-config.json \
  -profile=www \
  csr.json | cfssljson -bare gitlab.exp02.com

2、上传证书文件到/etc/gitlab/ssl目录

mkdir -p /opt/gitlab/config/ssl
cp -p gitlab.exp02.com.pem /opt/gitlab/config/ssl
cp -p gitlab.exp02.com-key.pem /opt/gitlab/config/ssl

#宿主机 /opt/gitlab/config 目录下的配置与gitlab容器内的/etc/gitlab 目录配置为映射关系

3、修改配置文件指定证书

1、修改配置文件 gitlab.rb
vim /opt/gitlab/config/gitlab.rb
external_url 'https://gitlab.exp02.com'
nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.exp02.com.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.exp02.com-key.pem"

2、重启
#方法1
##进入gitlab容器
docker exec -it gitlab bash
##重新加载配置信息
gitlab-ctl reconfigure

#方法2
#重启容器
docker restart gitlab

3、验证效果

:::warning
注意:修改windows的hosts文件
C:\Windows\System32\drivers\etc\hosts
参考:image.png
:::
效果:为正常访问https,访问http或ip都将跳转https
002-Gitlab 图形页面版本控制系统_第10张图片

4、 Gitlab常用管理命令

gitlab-ctl Gitlab管理工具
gitlab-ctl常用指令

start 启动所有服务
restart 重启所有服务
status 查看所有服务状态
tail 查看日志
service-list 列出所有启动的服务
graceful-kill 平滑停止一个服务
reconfigure 重新加载配置
show-config 查看所有服务的配置文件
uninstall 卸载这个软件
cleanse 删除gitlab数据,重新白手起家

gitlab-rails
gitlab-redis-cli 访问Redis数据库
gitlab-psql 访问PGSQL数据库
gitlab-rake 备份与恢复
gitlab-backup 12.1版本以后增加的备份与恢复工具

5、 Gitlab使用

1、创建用户

:::warning
菜单->管理员-> 概览->用户
:::
设定好邮箱,会给用户发送设置密码的邮件,如果忘记密码,可以由管理员重新设定密码
002-Gitlab 图形页面版本控制系统_第11张图片

修改密码:

002-Gitlab 图形页面版本控制系统_第12张图片
002-Gitlab 图形页面版本控制系统_第13张图片

2、创建群组、群组邀请添加成员

菜单->管理员-> 概览->群组

1、添加群组:

:::warning
群组有三种访问权限:(可见级别)
Private:只有组成员才能访问,企业内部一般都用这个。
Internal:只要登录的用户就能看到。一般用于对IT部门公开的项目
Public:不用登录也能看到。一般用于开源项目
:::
002-Gitlab 图形页面版本控制系统_第14张图片

2、添加组员:

:::warning
Gitlab用户在群组中有五种权限:
Guest:可以创建issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
Developer:可以克隆代码、开发、提交、push,RD开发者可以赋予这个权限
Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限
Owner:可以设置项目访问权限-删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限
:::

002-Gitlab 图形页面版本控制系统_第15张图片
002-Gitlab 图形页面版本控制系统_第16张图片

例:添加demo1用户进入demo66群组,权限为Developer

002-Gitlab 图形页面版本控制系统_第17张图片
demo1用户登录gitlab界面 **菜单->Groups -> 浏览群组 **可以查看到群组
002-Gitlab 图形页面版本控制系统_第18张图片

3、在群组里创建项目

:::warning
菜单->管理员-> 概览->项目
新建项目->选定URL(群组的url)
:::
002-Gitlab 图形页面版本控制系统_第19张图片
002-Gitlab 图形页面版本控制系统_第20张图片
:::warning
添加完成之后,可以在
菜单->项目->您的项目->点击对应的项目,查看项目详情
:::
002-Gitlab 图形页面版本控制系统_第21张图片
002-Gitlab 图形页面版本控制系统_第22张图片

管理员角色可以直接添加项目的文件
002-Gitlab 图形页面版本控制系统_第23张图片

6、 Gitlab开发流程(ce版本信息为: 14.6.1,为docker部署

1、克隆版本库

1、SSH克隆:

gitlab主机配置

1、修改配置文件指定gitlab对外暴露SSH端口

# docker exec -it gitlab bash
# vi /etc/gitlab/gitlab.rb
gitlab_rails['gitlab_shell_ssh_port'] = 2222

##重新加载配置信息
gitlab-ctl reconfigure

开发设备侧操作(需要提前安装好git)

2、ssh-keygen生成密钥对(一直回车确认,也可自我配置)
3、点击用户头像->设置个人资料->SSH密钥->添加公钥(id_rsa.pub
002-Gitlab 图形页面版本控制系统_第24张图片
4、测试:**git clone **免认证,从项目获取克隆的ssh链接

002-Gitlab 图形页面版本控制系统_第25张图片
克隆项目

git clone ssh://[email protected]:2222/demo66/demo66-01.git


Cloning into 'demo66-01'...
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 15 (delta 2), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (15/15), done.
Resolving deltas: 100% (2/2), done.

002-Gitlab 图形页面版本控制系统_第26张图片

2、HTTP克隆:

002-Gitlab 图形页面版本控制系统_第27张图片

开发服务器侧操作:每次操作都需要输入用户名和密码
git clone --config http.sslVerify=false https://gitlab.exp02.com/demo66/demo66-01.git  #--config http.sslVerify=false该参数为不校验ssl证书

Cloning into 'demo66-01'...
Username for 'https://gitlab.exp02.com': demo1
Password for 'https://[email protected]':
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 15 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (15/15), done.


异常问题:

git clone https://gitlab.exp02.com/demo66/demo66-01.git
Cloning into 'demo66-01'...
fatal: unable to access 'https://gitlab.exp02.com/demo66/demo66-01.git/': Issuer certificate is invalid.

#原因:ssl的证书有问题,git拉取采用不校验ssl证书的方式,但是降低了安全性。

2、配置使用者

开发服务器侧操作:

#配置使用者信息:
git config --global user.name test
git config --global user.email [email protected]

#查询使用者信息:
git config --list

#删除使用者信息:
git config --global --unset user.name
git config --global --unset user.email

3、新建开发分支

开发服务器侧操作:

#新建分支test
git branch test

#查看有哪些分支
git branch

#切换test分支
 git checkout test

#列出本地仓库中的所有分支以及远程仓库中的所有分支
git branch -a 

4、将本地代码推送到远程服务器

开发服务器侧操作:

#将修改的文件添加到当前分支暂存区
git add

#提交暂存区到当前分支仓库区,并添加注解
git commmit -m '新增页面'

#将本地代码当前分支推送到远程服务器
git push origin dev

5、获取别人提交的最新代码

开发服务器侧操作:

#获取所有分支的最新代码
git fetch

#从远程仓库 origin 下载 dev 分支的最新代码到本地仓库中,但不会将代码合并到当前分支中。
git fetch origin dev
#从远程仓库 origin 下载的 dev 分支的最新代码合并到当前分支中
git merge origin/dev

#将所有分支的最新代码下载并合并到本地分支
git pull --all

#从远程仓库 origin 下载 dev 分支的最新代码并合并到当前本地分支中。
##用于更新当前本地分支的代码,以便与远程仓库上的 dev 分支同步
git pull origin dev

7、 Gitlab备份与恢复

1、备份

手动备份:

#备份数据
gitlab-rake gitlab:backup:create

#备份配置文件
gitlab-ctl backup-etc

命令详解:

gitlab-rake gitlab:backup:create
该命令由两部分组成:gitlab-rake和gitlab:backup:create。 gitlab-rake 是运行在GitLab服务器上的命令行工具,用于管理和维护GitLab实例。
gitlab:backup:create是GitLab备份命令的名称,告诉gitlab-rake要执行的操作。

  1. 创建一个备份文件夹,文件夹的名称以当前日期和时间为标识,例如:/var/opt/gitlab/backups/20220312_152339
  2. 停止 GitLab 相关的进程,包括 Sidekiq、Unicorn、Puma、Workhorse 等。
  3. 使用 pg_dump 命令备份 GitLab 数据库,生成一个以当前日期和时间为标识的 SQL 文件,例如:/var/opt/gitlab/backups/20220312_152339_gitlab_backup.tar
  4. 启动 GitLab 相关的进程。
  5. 将备份文件夹中的文件压缩为一个以当前日期和时间为标识的 tar.gz 文件,例如:/var/opt/gitlab/backups/20220312_152339_gitlab_backup.tar.gz。备份文件夹将在压缩后被删除,只保留压缩文件。

备份的目的是为了保证在系统出现故障或者需要迁移 GitLab 服务器时能够快速地恢复原有的数据,避免因为数据丢失或者不正确导致的问题。因此,建议定期备份 GitLab 数据库,并将备份文件存放在安全可靠的地方。

除了 gitlab-rake gitlab:backup:create 命令外,GitLab 还提供了其他备份相关的命令,包括:

  • gitlab-rake gitlab:backup:restore: 用于恢复 GitLab 数据库备份文件。
  • gitlab-rake gitlab:backup:delete: 用于删除指定的 GitLab 数据库备份文件。
  • gitlab-rake gitlab:backup:list: 用于列出所有可用的 GitLab 数据库备份文件。

:::info
gitlab-ctl backup-etc

  1. 创建一个备份文件夹,文件夹的名称以当前日期和时间为标识,例如:/etc/gitlab/backup/20220312_152339
  2. 将 GitLab 的配置文件复制到备份文件夹中,包括:如果你的 GitLab 配置文件存放在其他目录中,需要在执行该命令前修改 /etc/gitlab/gitlab.rb 文件中的 gitlab_rails[‘etc_path’] 配置项。
    • /etc/gitlab/gitlab.rb
    • /etc/gitlab/gitlab-secrets.json
    • /etc/gitlab/gitlab.crt
    • /etc/gitlab/gitlab.key
    • /etc/gitlab/trusted-certs/*.pem
  3. 压缩备份文件夹,生成一个以当前日期和时间为标识的 tar.gz 文件,

例如:/etc/gitlab/backup/20220312_152339.tar.gz备份文件夹将在压缩后被删除,只保留压缩文件。

  1. 将压缩文件移动到 /var/opt/gitlab/backups 目录下,这是 GitLab 默认的备份目录。如果你希望将备份文件存放在其他目录中,可以在执行该命令前修改 /etc/gitlab/gitlab.rb 文件中的 gitlab_rails[‘backup_path’] 配置项。
    :::

自动备份:

# crontab -l
* * * * * docker exec -it gitlab gitlab-rake gitlab:backup:create
* * * * * docker exec -it gitlab gitlab-ctl backup-etc

##策略建议:本地保留7天,异地备份永久保存,注意充足的磁盘空间,根据实际情况而定

配置自动清理本地备份:

vim /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_keep_time'] = 604800

#重新加载配置信息
gitlab-ctl reconfigure
#重启服务
gitlab-ctl restart

参数详解:
:::info

  1. gitlab_rails[‘manage_backup_path’]: 该参数指示 GitLab 是否自动管理备份文件夹。

如果设置为 true,GitLab 会自动创建备份文件夹,并在备份过程中使用该文件夹。如果设置为 false,则需要手动创建备份文件夹,并在 GitLab 配置中设置备份路径。默认值为 false

  1. gitlab_rails[‘backup_path’]: 该参数指定 GitLab 备份文件的存放路径。

如果 manage_backup_path 参数为 false,则需要设置该参数。默认值为 /var/opt/gitlab/backups

  1. gitlab_rails[‘backup_keep_time’]: 该参数指定备份文件的保留时间,单位为秒。

在默认情况下,GitLab 会保留最近 7 天的备份文件。可以使用该参数来更改备份文件的保留时间。例如,将该参数设置为 604800 表示保留最近 7 天的备份文件。默认值为 604800
:::

2、恢复(ce版本信息为: 14.6.1,为docker部署

环境信息:

原来的环境为:ce版本信息为: 14.6.1,为docker部署,参考docker部署
宿主机备份的数据文件路径:/opt/gitlab/data/backups
容器内备份的数据文件路径:/var/opt/gitlab/backups
备份的数据文件名:1678607043_2023_03_12_14.6.1_gitlab_backup.tar
宿主机备份的配置文件路径:/opt/gitlab/config/config_backup
容器内备份的配置文件路径:/etc/gitlab/config_backup
备份的配置文件名:gitlab_config_1678607094_2023_03_12.tar

恢复流程:

:::info
1、在新服务器上安装相同版本的Gtilab
2、将备份文件发送到新服务器的相同目录下,即备份目录
3、停止数据处理服务,防止再写库
4、使用gitlab-rake恢复数据
5、手动恢复配置文件
6、访问验证
:::

1、在新服务器上安装相同版本的Gtilab

清除原来的环境

docker stop gitlab
docker rm -f gitlab
mv /opt/gitlab /opt/gitlab.bak

创建新的容器环境

mkdir /opt/gitlab
GITLAB_HOME=/opt/gitlab

sudo docker run --detach \
--hostname gitlab.exp02.com \
--publish 443:443 --publish 80:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ce:latest

2、将备份的数据文件和配置文件复制到新服务器的相同目录下,即备份目录
cd /opt/gitlab.bak/
cp -p data/backups/1678607043_2023_03_12_14.6.1_gitlab_backup.tar /opt/gitlab/data/backups/
cp -p config/config_backup/gitlab_config_1678607094_2023_03_12.tar /opt/gitlab/config/

3、停止数据处理服务,防止再写库
#进入gitlab容器内
docker exec -it gitlab bash

#更改备份数据文件权限
chown -R git:git /etc/gitlab/config_backup

#停止写库服务
gitlab-ctl stop unicorn
gitlab-ctl stop puma
gitlab-ctl stop sidekiq

4、使用gitlab-rake恢复数据
#进入gitlab容器内
docker exec -it gitlab bash

#使用gitlab-rake恢复数据
gitlab-rake gitlab:backup:restore BACKUP=1678607043_2023_03_12_14.6.1

5、手动恢复配置文件
#进入gitlab容器内
docker exec -it gitlab bash

#恢复配置文件
cd /etc/gitlab/
mkdir config_backup
mv gitlab_config_1678607094_2023_03_12.tar config_backup/
cd config_backup
tar xvf gitlab_config_1678607094_2023_03_12.tar
cp -rf etc/gitlab/* /etc/gitlab/

#重新加载配置信息
gitlab-ctl reconfigure
#重启服务
gitlab-ctl restart

6、访问验证(需要等待一会)所有用户和密码还是原来的密码包括root用户

002-Gitlab 图形页面版本控制系统_第28张图片

8、 Gitlab CI/CD初探

CI/CD介绍

:::info
持续集成(Continuous Integration,CI):代码合并、部署、自动化测试都在一起,不断地执行这个过程,并对结果反馈。
持续交付(ContinuousDelivery,CD):是一种软件工程方法,让软件的产出过程在一个短周期内完成,以保障软件可以稳定、持续的保持在随时可以发布的状态。与持续集成相比,持续交付偏重点在于可交付的产物。
持续部署(ContinuousDeployment,CD):通过自动化部署的手动将软件频繁的交付,部署到期望的环境。
:::
002-Gitlab 图形页面版本控制系统_第29张图片

Runner是GitLab CI/CD的一种执行者,它是一个可执行的工作进程,可以在GitLab CI/CD的流水线中执行特定的作业。

1、安装Runner

服务器安装:
Linux安装文档:https://docs.gitlab.com/runner/install/linux-repository.html

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash

sudo yum install gitlab-runner

Docker安装:
docker安装文档:https://docs.gitlab.com/runner/install/docker.html

docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest

2、注册Runner

执行命令:gitlab-runner register
步骤描述:
1、输入gitlab访问地址,例如
2、输入token(从管理中心->概述->Runner获取)
3、输入描述
4、输入标签,流水线脚本根据标签来使用runner,如果多个,例如web,deploy
5、输入维护说明
6、(Enter an executor) 输入执行方式,输入shell,这个是要用什么方式来执行脚
( 可选方式 docker-ssh+machine, custom, docker, docker-ssh, ssh, docker+machine, parallels, shell, virtualbox, instance, kubernetes)

免交互注册:

gitlab-runner register \
--non-interactive \
--executor "shell" \
--url "https://gitlab.exp02.com/" \
--registration-token "xxxxxxxxxxx" \
--description "test1" \
--tag-list "web,deploy" \
--run-untagged="true" \
--locked="false"

参数详解:

  • –non-interactive:以非交互模式运行注册命令,避免需要人工干预。
  • –executor “shell”:使用 shell 执行器来执行任务。
  • –url “https://gitlab.exp02.com/”:GitLab 服务器的 URL 地址。
  • –registration-token “xxxxxxxxxxx”:用于注册 Runner 的令牌。
  • –description “test1”:描述 Runner 的字符串。
  • –tag-list “web,deploy”:为 Runner 指定标签,标签可以用来过滤任务。
  • –run-untagged=“true”:如果没有匹配 Runner 标签的任务,是否运行不带标签的任务。
  • –locked=“false”:是否锁定 Runner,锁定后 Runner 不能被其他项目使用。

注册相关命令

gitlab-runner register # 交互配置注册信息
gitlab-runner list # 保存在配置文件中的所有运行程序
gitlab-runner verify # 检查注册的runner是否可以连接
gitlab-runner unregister --url https://gitlab.exp02.com --token xxxxxxxxxxx # 取消已注册的runner

异常问题:

问题1:找不到注册
:::info
ERROR: Registering runner… failed runner=KMd2f29j status=couldn’t execute POST against https://gitlab.exp02.com/api/v4/runners: Post https://gitlab.exp02.com/api/v4/runners: dial tcp: lookup gitlab.exp02.com on 8.8.4.4:53: no such host
PANIC: Failed to register the runner. You may be having network problems.
:::
这个错误是由于 GitLab Runner 没有找到 GitLab 服务器的 主机而导致的
解决方法:
:::warning
echo “192.168.31.80 gitlab.exp02.com” >>/etc/hosts
:::
问题2:证书校验无法通过
:::info
WARNING: Support for registration tokens and runner parameters in the ‘register’ command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872
ERROR: Registering runner… failed runner=KMd2f29j status=couldn’t execute POST against https://gitlab.exp02.com/api/v4/runners: Post "https://gitlab.exp02.com/api/v4/runners": x509: certificate signed by unknown authority
PANIC: Failed to register the runner.
:::
这个错误可能是由于 GitLab Runner 没有信任 GitLab 服务器的 SSL 证书而导致的
解决方法:
:::warning

  1. 在 GitLab Runner 的主机上下载 GitLab 服务器的 SSL 证书。可以使用以下命令:
    openssl s_client -showcerts -connect gitlab.exp02.com:443 /dev/null|openssl x509 -outform PEM >gitlab-exp02.crt
    2. 将证书复制到 GitLab Runner 的证书存储中。具体路径取决于操作系统和 GitLab Runner 的安装方式。在 Linux 系统上,证书存储通常位于 /etc/ssl/certs 目录下。可以使用以下命令:
    sudo cp gitlab-exp02.crt /etc/ssl/certs/
    3. 重新启动 GitLab Runner 以使更改生效。可以使用以下命令:
    sudo gitlab-runner restart
    4. 重新注册 GitLab Runner。可以使用以下命令:
    sudo gitlab-runner register
    :::

3、编写流水线脚本

环境说明:192.168.31.52服务器已安装了nginx服务,并正常启用

在需要的分支编写ci脚本: **.gitlab-ci.yml **

stages:
- build
- test
- deploy
build:
  stage: build
  tags:
  - web
  script:
  - echo "代码编译..."
test:
  stage: test
  tags:
  - web
  script:
  - echo "测试代码..."
deploy:
  stage: deploy
  tags:
  - web
  script:
  - echo $USER  #为测试查看登录的使用哪个账户
  - echo "部署项目..."
  - scp index.html [email protected]:/usr/share/nginx/html/

流水线脚本说明

:::tips

  • stages:CI步骤
  • job:具体执行逻辑,例如build
  • tags:runner标签
  • script:shell命令
  • 最后一步scp还需要runner主机与目标主机配置免交互认证
    :::

异常问题:

问题1:证书颁发无效

fatal: unable to access 'https://gitlab-ci-token:[MASKED]@gitlab.exp02.com/demo66/demo66-01.git/': Issuer certificate is invalid.

解决方法:禁用runner的ssl校验

su - gitlab-runner
git config --global http."sslVerify" false


cat .gitconfig
[http]
sslVerify = false
-bash-4.2$ exit

#需要重启 gitlab-runner服务

问题2:无法登录测试服务器

$ scp index.html [email protected]:/usr/share/nginx/html/
Host key verification failed.
lost connection
Cleaning up project directory and file based variables
ERROR: Job failed: exit status 1

解决方法:
1、 在脚本 .gitlab-ci.yml 的script部分添加 echo $USER

  script:
  - echo $USER  #为测试查看登录的使用哪个账户
  - echo "部署项目..."
  - scp index.html [email protected]:/usr/share/nginx/html/

2、在gitlab-runner服务器生成密钥,设置免密登录

su - gitlab-runner

#生成密钥
ssh-keygen

#把密钥复制到目标服务器
ssh-copy-id [email protected]

#重新执行流程即可

你可能感兴趣的:(运维,Linux,gitlab,git)