Docker Compose部署GitLab


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

什么是 GitLab?

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


什么是 Docker Compose?
要了解什么是 Docker Compose,请访问文章: 如何使用 Docker Compose 安装 Jenkins?

所需工具
开始工作前,请准备好所需工具。你可以在网站上找到这些工具的说明: 如何使用 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 映像。在我的电脑上是这样的

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

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


GitLab 启动

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

注意:首次启动门户网站可能需要几分钟时间。

要登录门户,我们必须在用户名一栏输入 “root”,并在密码一栏输入之前获得的临时密码。

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

恭喜您,GitLab 已成功启动!

门户的初始配置


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

下一步应该是更改根用户。为此,请访问网站:http://localhost:8080/-/profile/account

然后在更改用户名字段中输入名称。点击 “更新用户名 ”进行批准

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

GitLab Runner配置

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

点击 “复制令牌 ”按钮。

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

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 注册成功的确认信息:

gitlab runner config配置文件

config.toml 中增加如下network_mode = "gitlab-network"

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


配置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.

创建第一个版本库


设置运行程序后,我们就可以创建第一个版本库了。为此,请转到
http://localhost:8080/projects/new 页面,然后单击导入项目

在下一个屏幕中,选择从以下地址导入项目: Repo from URL。然后提供 Git 仓库 URL 地址:https://github.com/czerniga/helloworld.git

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


创建 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 映像
阶段:流程步骤列表
build-job:构建项目流程的第一步。此外,我们还要保存工件,以便在下一步中使用
test-job:运行项目的第二步

粘贴文件后,单击 “提交更改 ”确认更改

批准后,GitLab 将启动流程。要查看其结果,请转到左侧菜单中的 CI/CD -> Pipelines。在屏幕上,我们会看到第一个任务已经启动

CI中Build构建成功

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

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

docker-compose down


总结

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



今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,信息安全,团队建设 有参考作用 , 您可能感兴趣的文章:
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变

如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。