搭建GitLab并使用CI/CD自动部署流程

8/25/2021 GitLab

基于GitLab(CE)的CI/CD自动部署

# 安装GitLab-CE

系统Centos7,Docker Version 20.10.6,可以看之前的Docker安装

查看本机IP

ifconfig
1

下载镜像 首先需要先下载 GitLab CE 的镜像,使用下面的命令进行下载,因为文件较大,所以可能需要一点时间,耐心等待即可。

# 不加 tag 则默认为最新版本 latest
$ docker pull gitlab/gitlab-ce
1
2

创建目录 通常会将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data) 放到容器之外, 便于日后升级, 因此请先准备这三个目录。建议放到挂载分区,docker占用空间较大

mkdir -p /docker/gitlab/config \
/docker/gitlab/logs \
/docker/gitlab/data
1
2
3

启动运行

docker run --detach \
   --hostname  gitlab  \
   --publish 10443:443  \
   --publish  8888:8888 \
   --publish  2222:22 \
   --privileged=true  \
   --name gitlab \
   --restart always \
   --volume /docker/gitlab/config:/etc/gitlab \
   --volume /docker/gitlab/logs:/var/log/gitlab \
   --volume /docker/gitlab/data:/var/opt/gitlab \
   --volume  /docker/gitlab/logs/reconfigure:/var/log/gitlab/reconfigure \
   gitlab/gitlab-ce:latest
1
2
3
4
5
6
7
8
9
10
11
12
13

说明:

  • hostname gitlab.example.com: 设置主机名或域名
  • publish 10443:443:将http:443映射到外部端口8443
  • publish 8888:8888:将web:80映射到外部端口8880
  • publish 8222:22:将ssh:22映射到外部端口8222
  • name gitlab: 运行容器名
  • restart always: 自动重启
  • volume /srv/gitlab/config:/etc/gitlab: 挂载目录
  • volume /srv/gitlab/logs:/var/log/gitlab: 挂载目录
  • volume /srv/gitlab/data:/var/opt/gitlab: 挂载目录
  • privileged=true 使得容器内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限

运行成功之后,可以使用下面的命令查看容器运行状态,可以看到 GitLab 已经在运行了,有一个属性 STATUS 为 health: starting,说明 gitlab 的服务正在启动中,还没有启动完毕。等这个状态变成 healthy 时则说明已经部署完成,可以访问了。

docker ps -a
1

但是这个时候还是没办法访问gitlab的,需要修改gitlab.rb的ip,然后重启即可

vim /docker/gitlab/config/gitlab.rb


# 修改以下配置
external_url 'http://192.168.115.184:8888'
nginx['listen_port'] = 8888
gitlab_rails['gitlab_ssh_host'] = '192.168.115.184'
gitlab_rails['gitlab_shell_ssh_port'] = 2222



# 重启
docker restart gitlab
1
2
3
4
5
6
7
8
9
10
11
12
13

注意事项:external_url 和gitlab_rails这两个ip参数建议固定操作系统的静态不变的IP或说是域名进行配置,假设IP变得的话在GitLab新建项目的时候,生成的IP还是原来的IP,此时就无法推送代码在Gitlab里面

image 访问页面

打开浏览器进入http://192.168.90.128:8888/

默认是root账号,进入页面后修改密码,登陆即可

# 使用GitLab-Runner

# 安装

  1. 下载 gitlab-runner (opens new window)

  2. 安装程序

mv gitlab-ci-multi-runner-linux-amd64 /usr/local/bin/gitlab-runner
chmod +x /usr/local/bin/gitlab-runner
useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/java/gitlab-runner
1
2
3
4

# 注册

  1. gitlab中注册runner
sudo gitlab-runner register
1

注册过程中根据提示输入如下信息:

  • 输入gitlab的服务URL,获取方式参考下图
  • 输入gitlab-ciToekn,获取方式参考下图
  • 关于集成服务中对于这个runner的描述
  • 给这个gitlab-runner输入一个标记,这个tag非常重要,在后续的使用过程中需要使用这个tag来指定gitlab-runner
  • 是否运行在没有tagbuild上面。在配置gitlab-ci的时候,会有很多job,每个job可以通过tags属性来选择runner。这里为true表示如果job没有配置tags,也执行
  • 是否锁定runner到当前项目
  • 选择执行器,gitlab-runner实现了很多执行器,可用在不同场景中运行构建,详情可见GitLab Runner Executors,这里选用Shell模式

IP令牌从下图位置获取 获取令牌示例图 注册完毕后 输入命令查看

cat /etc/gitlab-runner/config.toml
1

示例图1

同时也可以在GitLab页面上查看 示例图2



# 使用GitLab-CI

在项目的根目录,创建CI脚本文件,文件名:.gitlab-ci.yml 示例图3

上传CI脚本文件后,在GitLab上查看流水线作业 示例图4

若流水线作业暂停,显示暂无可用runner
需要前往以下地方配置
示例图5 示例图6

# 配置详解

推荐三篇文章,这里不过多解读

# git报错

重新初始化现存的 Git 版本库于 /home/gitlab-runner/builds/yygZdKcz/0/root/api-adapter/.git/
fatal: git fetch-pack: expected shallow list
fatal: The remote end hung up unexpectedly
1
2
3

原因是git版本太老不持之新API,需要升级一下git:

# 重新配置安装源
yum install -y http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
# 安装git
yum install -y git
# 更新git
yum update git
1
2
3
4
5
6

# 示例代码

stages:
  - test
  - build
  - deploy

test:
  stage: test
  script: echo "Running tests"

build:
  stage: build
  script: echo "Building the app"

deploy_staging:
  stage: deploy
  script:
    - echo "Deploy to staging server"
  environment:
    name: staging
    url: https://staging.example.com
  only:
  - master
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22


# nginx代理配置

前端项目部署需要nginx代理域名 查看nginx配置文件

cd /usr/local/nginx/conf/   # 切换路径
vim nginx.conf              # 查看配置文件
1
2

墙裂建议修改配置之前先备份一份配置文件 修改nginx配置文件示例图

重启nginx

cd /usr/local/nginx/sbin  # 切换路径
./nginx -t                # 测试
./nginx -s reload         # 重启服务
1
2
3


# 注意事项

eladmin-web项目部署之前的部分修改
修改访问域名 修改前端访问域名

修改访问路径 修改前端访问路径 路径要和nginx配置中的location /对应



# GitLab备份与更新

针对与yum安装用户,docker用户请直接更新镜像

# 数据备份

设置备份路径、权限、保留时常,防止每天执行备份,有目录被爆满的风险,打开/etc/gitlab/gitlab.rb配置文件,找到如下配置

vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"     #备份的路径,建议不要放到系统下
gitlab_rails['backup_archive_permissions'] = 0644           #备份文件的默认权限
gitlab_rails['backup_keep_time'] = 604800                   #保留时长,秒为单位
1
2
3
4

执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效

gitlab-ctl reconfigure
1

执行备份命令进行备份,这个时候一定要保持gitlab是启动状态

/opt/gitlab/bin/gitlab-rake gitlab:backup:create
# 查看备份 
ls /var/opt/gitlab/backups
1585221706_2020_03_26_12.9.0_gitlab_backup.tar
1
2
3
4

可以到/var/opt/gitlab/backups找到备份包,解压查看,会发现备份的还是比较全面的,数据库、repositories、build、upload等分类还是比较清晰的。

备份完成,会在备份目录中生成一个当天日期的tar包。

# 数据恢复

特别注意:

备份目录和gitlab.rb中定义的备份目录必须一致 GitLab的版本和备份文件中的版本必须一致,否则还原时会报错。 首先删除 image1 image2 此时已经没有项目了 qSAYcg

然后在服务器执行:

gitlab-rake gitlab:backup:restore BACKUP=1585221706_2020_03_26_12.9.0
1

数据已经恢复: P71Rwo

# 升级命令

yum install -y gitlab-ce
1
Last Updated: 8/28/2021, 8:13:13 PM
我再没见过 像你一般的星空
Seto