使用 docker 部署 gitlab-ce 和 gitlab-runner

676 阅读5分钟

一、 部署 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 浏览已经部署好的项目。