Docker Compose部署GitLab

44 阅读7分钟

今天我们将向你展示如何在一小时内安装 GitLab 服务器,并在其中运行第一个 CI/CD 过程。本文是 “如何开始使用流行的 CI/CD 工具 ”系列文章的一部分。在本文中,将向你展示如何安装 CI/CD 工具,以及如何准备基于 Maven 构建和测试一个简单项目的流程。

什么是 GitLab?

Gitlab是一款支持使用持续集成和持续交付流程进行软件开发的工具。它的主要组件是 Git 版本控制系统。此外,它还提供许多功能,支持程序员在各种环境下持续构建、测试和自动安装项目。本文部署为GitLab 17版本

所需工具
开始工作前,请准备好所需工具。你可以在网站上找到这些工具的说明: 如何使用 Docker Compose 安装 Jenkins?

Docker Compose 的配置

我们将创建一个专门的目录来存储数据和 Gitlab 配置,然后开始安装工作。下一步,我们创建包含以下内容的 docker-compose.yml 文件:

version: "3.7"
services:
   web:
     image: "gitlab/gitlab-ce:latest"
     restart: always
     hostname: "localhost"
     container_name: gitlab-ce
     environment:
       GITLAB_OMNIBUS_CONFIG: |
         external_url 'http://192.168.0.107:8080'
     ports:
       - "8080:80"
       - "8443:443"
     volumes:
       - "/home/docker/gitlabce/config:/etc/gitlab"
       - "/home/docker/gitlabce/logs:/var/log/gitlab"
       - "/home/docker/gitlabce/data:/var/opt/gitlab"
     networks:
       - gitlab
   gitlab-runner:
     image: gitlab/gitlab-runner:alpine
     container_name: gitlab-runner
     restart: always
     depends_on:
       - web
     volumes:
       - /var/run/docker.sock:/var/run/docker.sock
       - "/home/docker/gitlabce/gitlab-runner:/etc/gitlab-runner"
     networks:
       - gitlab
networks:
   gitlab:
     name: gitlab-network

按实际部署环境修改 external_url 'http://192.168.0.107:8080', 其中192.168.0.107在这儿是我的虚拟机IP

该配置定义了我们要运行的容器。在我们的例子中,将是 GitLab 服务和一个 GitLab runner(运行 CI / CD 任务的独立模块)。最重要的配置参数有

  • image - 我们想在服务器中使用的 docker 镜像
    端口--我们在容器外提供的端口列表。在我们的配置中,我们提供了 80、443(网站)端口
  • container_name - 容器名称
  • volumes - 指定容器使用的卷。在我们的配置中,我们有与系统共享的目录($ GITLAB_HOME 中的子目录)和一个允许从 GitLab 运行程序访问 Docker 环境的额外卷。
  • networks - 定义容器运行的虚拟网络。在我们的例子中,www 门户和运行程序在一个 “gitlab-network ”中运行。

安装 Gitlab

使用以下命令启动容器

docker-compose up –d

启动后,Docker 会从服务器上下载 GitLab 和 GitLab Runner 映像。在我的电脑上是这样的

image

docker compose up

首次登录 GitLab 需要一个临时密码,该密码在安装过程中自动生成。我们使用以下命令获取密码

docker exec -it gitlab-ce grep 'Password:' /etc/gitlab/initial_root_password

GitLab 启动

我们的 GitLab 网址是:http://192.168.0.107:8080。访问该地址后,会出现以下界面:

image

GitLab Login

注意:首次启动门户网站可能需要几分钟时间。要登录门户,我们必须在用户名一栏输入 “root”,并在密码一栏输入之前获得的临时密码。

登录后,会出现以下界面:

image

Login Success

恭喜您,GitLab 已成功启动!

门户的初始配置

在继续之前,我们需要更改一些门户设置。首先,我们要关闭所有人的开放注册。为此,请单击上栏带有警告的 “查看设置 ”按钮(面板地址;http://localhost:8080/admin/application_settings/general#js-signup-settings )。在新页面上,取消选中已启用注册,然后保存更改。 image

下一步应该是更改根用户。为此,请访问网站:http://localhost:8080/-/profile/account 然后在更改用户名字段中输入名称。点击 “更新用户名 ”进行批准

image

Settings

最后一项更改是修改密码。为此,请进入以下页面:OST:8080/-/profile/password/edit 并输入临时密码和新密码。点击 “保存密码 ”批准更改。

GitLab Runner配置

要在 GitLab 中使用 GitLab 运行程序,需要对其进行配置。为了正确配置,我们需要从门户网站复制一个令牌。为此,请访问地址:http://localhost:8080/admin/runners

点击 “复制令牌 ”按钮。

image Runner token

下一步,它将进入控制台并运行以下命令:

docker exec -it gitlab-runner gitlab-runner register --url "http://192.168.0.107:8080" --clone-url "http://192.168.0.107:8080" --token glrt-QPPVLqd7-ZD7eFwAXVbZ

启动后,将出现一个配置模块。该模块提供以下信息:

输入 GitLab 实例 URL:确认输入值(点击回车键)
输入注册令牌:输入之前复制的令牌。
输入运行程序的描述:输入运行程序的名称,例如 docker-runner
输入运行程序的标记:此处留空
输入执行器:在此处输入 docker
输入默认的 Docker 镜像:在这里我们提供默认的 Docker 镜像,例如 maven: latest
正确配置后,我们应该会看到 Runner 注册成功的确认信息:

image

Runner register

Gitlab runner config配置文件

config.toml 节中增加如下 network_mode = "gitlab-network" , 重启Gitlab runner容器实例

concurrent = 1
check_interval = 0
connection_max_age = "15m0s"
shutdown_timeout = 0
[session_server]
   session_timeout = 1800
[[runners]]
   name = "devu\bbu\b\b"
   url = "http://192.168.0.107:8080"
   id = 1
   token = "glrt-C7xexPtY4yfa39wHo3pn"
   token_obtained_at = 2024-10-15T01:07:57Z
   token_expires_at = 0001-01-01T00:00:00Z
   executor = "docker"
   clone_url = "http://192.168.0.107:8080"
   [runners.custom_build_dir]
   [runners.cache]
     MaxUploadedArchiveSize = 0
     [runners.cache.s3]
     [runners.cache.gcs]
     [runners.cache.azure]
   [runners.docker]
     tls_verify = false
     image = "ruby:2.7"
     privileged = false
     disable_entrypoint_overwrite = false
     oom_kill_disable = false
     disable_cache = false
     volumes = ["/cache"]
     network_mode = "gitlab-network"
     shm_size = 0
     network_mtu = 0
[[runners]]
   name = "javv3"
   url = "http://192.168.0.107:8080"
   id = 3
   token = "glrt-QPPVLqd7-ZD7eFwAXVbZ"
   token_obtained_at = 2024-10-15T01:47:35Z
   token_expires_at = 0001-01-01T00:00:00Z
   executor = "docker"
   clone_url = "http://192.168.0.107:8080"
   [runners.custom_build_dir]
   [runners.cache]
     MaxUploadedArchiveSize = 0
     [runners.cache.s3]
     [runners.cache.gcs]
     [runners.cache.azure]
   [runners.docker]
     tls_verify = false
     image = "maven:latest"
     privileged = false
     disable_entrypoint_overwrite = false
     oom_kill_disable = false
     disable_cache = false
     volumes = ["/cache"]
     shm_size = 0
     network_mtu = 0
     network_mode = "gitlab-network"

注册成功可以在Runner控制台查看

Runner http://192.168.0.107:8080/admin/runners clipboard

Runners status

配置runner

http://192.168.0.107:8080/admin/runners/3/edit

勾选 Run untagged jobs: Use the runner for jobs without tags in addition to tagged jobs.

clipboard

Use the runner for jobs without tags in addition to tagged jobs.

创建第一个仓库

设置运行程序后,我们就可以创建第一个仓库了。为此,请转到 http://localhost:8080/projects/new 页面,然后单击导入项目在下一个屏幕中,选择从以下地址导入项目: Repo from URL。然后提供 Git 仓库 URL 地址:github.com/czerniga/he…

最后点击 “创建项目 ”确认

image

Import project

创建 CI/CD 管道

要为项目创建 CI/CD 管道,请单击左侧主菜单的 CI/CD,然后点击编辑器。屏幕上将显示创建  .gitlab-ci.yml 文件的选项,该文件将包含我们的管道定义。该文件将在 Git 仓库中创建

image: maven:latest
stages:
   - build
   - test
build-job:
   stage: build
   script:
     - echo "Compiling the code..."
     - mvn clean package
     - echo "Compile complete."
   artifacts:
     paths:
     - target  
test-job:
   stage: test
   dependencies:
     - build-job 
   script:
     - ls -al
     - echo "Running tests"
     - java -cp target/helloworld-1.1.jar com.coveros.demo.helloworld.HelloWorld

上述定义描述了 CI / CD 流程应如何运作。其中最重要的元素是

  • image:用于构建项目的 docker 映像
  • stage:流程步骤列表
  • build-job:构建项目流程的第一步。此外,我们还要保存工件,以便在下一步中使用
  • test-job:运行项目的第二步

粘贴文件后,单击 “提交更改 ”确认更改。批准后,GitLab 将启动流程。要查看其结果,请转到左侧菜单中的 CI/CD -> Pipelines。在屏幕上,我们会看到第一个任务已经启动

CI中Build构建成功

clipboard

CI中Build构建成功日志

恭喜您,您刚刚在 GitLab 中创建了第一个 CI/CD 作业!

停止容器
包含我们服务的容器是通过开关在后台启动的。如果你想停止门户,请执行以下命令:

docker-compose down

总结

在本教程中,介绍了如何使用一个 GitLab 运行程序来运行 GitLab。这里给出的配置会导致所有网站数据都保存在你的计算机/服务器上的目录中。因此,当容器停止或移除时,数据不会被删除。