一、 部署 gitlab-ce
1. 使用 docker 下载 gitlab-ce 镜像
docker pull gitlab/gitlab-ce:latest
2. 创建 gitlab-ce 的数据存储文件
mkdir gitlab # 创建一个文件,用来存储 gitlab 运行时产生的数据
mkdir gitlab/etc #
mkdir gitlab/log #
mkdir gitlab/opt #
mkdir gitlab gitlab/etc gitlab/log gitlab/opt # 合并上面四条命令
3. 生成 gitlab-ce 镜像的容器 gitlab-container
docker run -p 6000:80 -p 6001:22 -p 6002:443 -v G:/docker/gitlab/etc:/etc/gitlab -v G:/docker/gitlab/log:/var/log/gitlab -v G:/docker/gitlab/opt:/var/opt/gitlab --privileged=true --name gitlab-container gitlab/gitlab-ce
-p 6000:80 -p 6001:22 -p 6002:443
:-p
或--publish
: 映射端口。这里将主机的 6000 端口映射到容器的 80 端口,使得外部可以访问容器内的服务。
--name gitlab-container
:--name
: 为容器指定一个名称,便于后续管理和引用。
gitlab/gitlab-ce
:- 这是之前构建的镜像名称,
gitlab/gitlab-ce
,告诉 Docker 使用哪个镜像来启动容器。
- 这是之前构建的镜像名称,
-v G:/docker/gitlab/etc:/etc/gitlab -v G:/docker/gitlab/log:/var/log/gitlab -v G:/docker/gitlab/opt:/var/opt/gitlab
:-v
或--volumes
: 创建一个卷挂载。这意味着 gitlab 的数据将存储在主机上,即使容器被停止或删除,数据也能保持持久化。
4. 修改配置
4.1 修改 gitlab.rb 文件
- 打开第二步创建的文件夹
gitlab/etc
,在其中找到文件gitlab.rb
。 - 修改 32 行的代码:
# external_url 'GENERATED_EXTERNAL_URL'
。 - 将其修改为:
external_url 'http://192.168.8.110:6000'
,其中192.168.8.110
为本机IP。 external_url
表示的是 gitlab 的访问地址,它的值也可以是一个域名,端口不写默认80
。
4.2 修改 gitlab.yml 文件
- 打开第二步创建的文件夹
gitlab/opt
,在其中找到文件/gitlab-rails/etc/gitlab.yml
。 - 修改 14 行的代码:
host: 08c01c844f1a
,将其修改为host 192.168.8.110
。 - 修改 15 行的代码:
port 80
,将其修改为port 6000
。 - 此处的 host 和 port 表示的是 gitlab 克隆代码时的地址。
4.3 重启容器
- 在控制台输入:
docker exec -it gitlab-ce-container /bin/bash
,进入容器。 - 重启容器:
gitlab-ctl restart
。 - 退出容器:
exit
。
5. 查看 gitlab 初始化默认密码
此时,在浏览器中输入 http://192.168.8.110:6000
就可以进入 gitlab 的登录页面。
首次登录时,账号是 root,密码需要在第二步创建的 gitlab/etc
文件夹下找到 initial_root_password
文件。
有时,输入了用户名:root
密码:initial_root_password['Password']
,依然会显示账号密码错误,此时就需要执行以下代码:
docker exec -it gitlab-ce-container /bin/bash # 进入容器
gitlab-rake "gitlab:password:reset[root]" # 修改 root 账户的密码
Enter password: # 新密码
Confirm password: # 确认新密码
# 当出现 Password successfully updated for user with username root 时
gitlab-ctl reconfigure # 使用新密码
6. 创建一个项目,并提交至 gitlab
创建一个前端项目,并添加 Dockerfile 。然后将其长传到 gitlab 上,为 CICD 备用。
创建 Dockerfile 详细操作可前往: 使用 docker 部署前端项目
二、部署 gitlab-runner
1. 使用 docker 下载 gitlab-runner 镜像
docker pull gitlab/gitlab-runner:latest
2. 创建 gitlab-runner 的数据存储文件
mkdir gitlab-runner # 创建一个文件,用来存储 gitlab-runner 运行时产生的数据
mkdir gitlab-runner/config
mkdir gitlab-runner/docker.sock
mkdir gitlab-runner/sock
mkdir gitlab-runner gitlab-runner/config gitlab-runner/docker.sock gitlab-runner/sock
3. 生成 gitlab-runner 镜像的容器 gitlab-runner-container
docker run -d --name gitlab-runner-container --restart always -v G:/docker/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
-v /var/run/docker.sock:/var/run/docker.sock
: 此文件映射必须一致,如果不一致可能会出现问题,具体原因目前不明,可在评论区@。
4. 注册项目的 runner
- 进入 gitlab-runner-container(gitlab-runner镜像的容器名称) 注册环境:
docker exec -it gitlab-runner-container /bin/bash
。 - 开始注册 gitlab-runner:
gitlab-runner register
。 - 输入 gitlab 的部署地址:
Enter the GitLab instance URL (for example, https://gitlab.com/)
:- 示例:
http://192.168.8.110:6001/
。
- 输入 gitlab 中 CICD 设置 -> Runner -> 注册令牌的 token。
Enter the registration token
:- 示例:
GR1348942rujJPqLRud7BZJTXuU4N
。
- 输入 gitlab-runner 的名称
Enter a description for the runner
:- 示例:
vitepress
。
- 输入 gitlab-runner 的 tag 的名称,可以用于指定在构建规定的 tag 时触发 ci
Enter tags for the runner (comma-separated)
:- 示例:
vitepress_cicd
。
- 输入 gitlab-runner 可选维护说明
Enter optional maintenance note for the runner
:- 示例:
自动部署 vitepress 文档项目
。
- 选择 runner 执行器,这里我们选 docker
Enter an executor: docker+machine, docker-ssh+machine, custom, docker-windows, docker-ssh, ssh, kubernetes, docker, parallels, shell, virtualbox
:- 示例:
docker
。
- 输入 docker 镜像的版本
Enter the default Docker image (for example, ruby:2.7):
:- 示例:
docker:26.0.0
。
三、基于 gitlab-ce 和 gitlab-runner 的 CICD
修改创建 gitlab-runner 时创建的 gitlab-runner/config/config.toml
文件
将其中的 volumes = ["/cache"]
修改为 volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
1. 创建一个 .gitlab-ci.yml 文件
# 指定运行的环境
image: node:20.11.0
# 指定要执行的步骤,并确定步骤的顺序
stages:
- install
- build
- deploy
# 缓存文件
cache:
paths:
- node_modules
# 作业名称
install-job:
# 指定当前的作业的步骤是哪一步
stage: install
# 要执行的 shell 命令
script:
- npm install
build-job:
stage: build
script:
- npm run docs:build
deploy-job:
stage: deploy
image: docker:26.0.0
# 在 docker 中运行 docker
services:
- docker:dind
# 指定使用 gitlab-runner 中的那个标签
tags:
- vitepress_cicd
script:
# 停止 docker 中的容器 vitepress-doc-container
- docker stop vitepress-doc-container || true
# 删除 docker 中的容器 vitepress-doc-container
- docker rm vitepress-doc-container || true
# 删除 docker 中的镜像 vitepress-doc
- docker rmi vitepress-doc || true
# 构建 docker 镜像 vitepress-doc
- docker build -t vitepress-doc .
# 启动 docker 容器 vitepress-doc-container
- docker run -itd -p 5001:5001 --name vitepress-doc-container vitepress-doc
2. 同步 gitlab
将 gitlab-ci.yml
文件同步到 gitlab 中,就可以在 gitlab 中的流水线中查看实时构建的日志。
如果所有的作业都成功,则可以在 docker 中查看容器 vitepress-doc-container 是否启动。
在浏览器中输入 http://192.168.8.110:5001
浏览已经部署好的项目。