本文涉及一种在容器中部署 gitlab 服务的方法,并结合其自带的 gitlab-runner 实现 CICD 功能。其目的是为了在实际工作中使用代码托管及自动化操作。

一、引言

因工作需要,需部署 gitlab 服务器进行数据测试。与网上几分钟即可部署的文章相比,本文更注重个人的实践记录,故不会完整地将过程记录下来。

二、技术小结

  • gitlab 有官方的 Docker 镜像。
  • 建议将数据和配置目录映射到主机上,方便编辑和备份。
  • 如果使用非默认端口,需要配置自定义端口。
  • 在首次登录时,需要设置 root 密码,后面不再出现此提示,因此需记住密码。
  • gitlab-runner本文未有深入研究,等后续有时间再着手。

三、部署gitlab服务

3.1 部署脚本

本文使用 docker-compose 部署,在测试阶段,使用了多个版本。

版本一,使用默认端口,如下:

version: '2'
services:llgitlab:image: gitlab/gitlab-ce:13.10.0-ce.0container_name: llgitlabrestart: alwaysvolumes:- ./gitlab_data/config:/etc/gitlab- ./gitlab_data/logs:/var/log/gitlab- ./gitlab_data/data:/var/opt/gitlabports:- "8888:80"- "8443:443"#- "2222:22"hostname: "10.0.10.11"#command: /assets/wrappernetworks:- llgitlab-netnetworks:llgitlab-net:driver: bridge

脚本中将配置目录和数据目录映射到主机当前目录的gitlab_data目录,方便后续修改。对外提供8888端口。由于部署环境为内网,故设置hostname为部署机器的IP

版本二,修改端口:

version: '2'
services:llgitlab:image: gitlab/gitlab-ce:13.10.0-ce.0container_name: llgitlabrestart: alwaysvolumes:- ./gitlab_data/config:/etc/gitlab- ./gitlab_data/logs:/var/log/gitlab- ./gitlab_data/data:/var/opt/gitlabenvironment:TZ: 'Asia/Shanghai'GITLAB_OMNIBUS_CONFIG: |external_url 'http://10.0.153.12:8888'nginx['listen_port']=8888gitlab_rails['gitlab_shell_ssh_port']=8822gitlab_rails['time_zone']='Asia/Shanghai'ports:- "8888:8888"- "8443:443"- "8822:8822"hostname: "10.0.153.12"networks:- llgitlab-net
networks:llgitlab-net:driver: bridge

注意几点:

  • git 的访问方式,http默认为80,ssh默认为22,版本一未修改,但主机做了映射,此版本将 gitlab 默认端口修改了,分别为8888和8822,再将其映射到相同的主机端口。
  • 使用 GITLAB_OMNIBUS_CONFIG 环境变量进行一些参数的修改,相当于修改容器内的/etc/gitlab/gitlab.rb文件(当然,本文已经将目录映射到主机上了)。external_url从名称上看,其必须为一个 url 地址,可以是IP或域名,但不能是单纯的 IP,本文加了端口。
  • 当已经存在了本地数据时,使用 GITLAB_OMNIBUS_CONFIG 修改参数,也会生效。比如原先没有修改端口,修改端口后重启容器,即可生效。
  • 虽然设置了 TZ,容器的时间也为 CST,但查看 gitlab 的日志,依旧使用 UTC 时间。或许是一个特性。
  • hostname 不能加端口。

3.2 运行

运行命令如下:

docker-compose up -d

注意:启动耗时较长,大概数分钟(笔者使用性能较强的服务器测试,也要3~4分钟),需耐心等待。

停止命令如下:

docker-compose down

初次登录时,会提示设置管理员root密码,如图1所示:

设置完毕后需重新登录。在首页可以看到注册的提醒。默认开放注册,但需管理员确认,如内部使用,则该功能可去掉。如图2所示。

默认情况下,新用户注册,会有如图3的提示:

至此,已经将 gitlab 部署完毕,且已可正常使用。 如使用其 CICD 功能,则需要继续部署 gitlab-runner。

四、gitlab-runner

准备工作

使用管理员登录 gitlab,并获取token,如图4所示:

图4右侧给出了URL地址以及 token,后续将使用到。

准备docker-compose文件:

version: '2'
services:llgitlab:image: gitlab/gitlab-ce:13.10.0-ce.0container_name: llgitlabrestart: alwaysvolumes:- ./gitlab_data/config:/etc/gitlab- ./gitlab_data/logs:/var/log/gitlab- ./gitlab_data/data:/var/opt/gitlabports:- "8888:80"- "8443:443"#- "2222:22"hostname: "10.0.153.12"#command: /assets/wrappernetworks:- llgitlab-netllgitlab-runner:image: gitlab/gitlab-runner:alpine-v13.10.0container_name: llgitlab-runnerrestart: alwaysvolumes:- ./gitlab-runner/config:/etc/gitlab-runner- /var/run/docker.sock:/var/run/docker.sockdepends_on:- llgitlabnetworks:- llgitlab-netnetworks:llgitlab-net:driver: bridge

注意, gitlab-runner 和 gitlab 版本应相近。

注意,此时查看gitlab-runner容器,会不断提示 config.toml找不到:

Runtime platform                                    arch=amd64 os=linux pid=7 revision=54944146 version=13.10.0
Starting multi-runner from /etc/gitlab-runner/config.toml...  builds=0
Running in system-mode.                            Configuration loaded                                builds=0
listen_address not defined, metrics & debug endpoints disabled  builds=0
[session_server].listen_address not defined, session endpoints disabled  builds=0
ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory  builds=0
ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory  builds=0
....

因为未注册原故。注册方法有2种,一是根据提示一一填写,二是直接指定参数。

手动注册:

docker run --rm -it -v $PWD/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:alpine-v13.10.0 register
之后出现提示,根据提示填写内容
下面是示例
Runtime platform                                    arch=amd64 os=linux pid=7 revision=54944146 version=13.10.0
Running in system-mode.                            Enter the GitLab instance URL (for example, https://gitlab.com/):
http://10.0.153.12:8888/
Enter the registration token:
FXKUC2HtxFuICBC9961024
Enter a description for the runner:
[a2d8dbc3c305]: my-gitlab-runner
Enter tags for the runner (comma-separated):
gitlab
Registering runner... succeeded                     runner=FXKUC2H
Enter an executor: parallels, virtualbox, docker+machine, docker-ssh+machine, custom, docker, docker-ssh, shell, ssh, kubernetes:
docker
Enter the default Docker image (for example, ruby:2.6):
latelee/ubuntu
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

直接指定参数注册。

docker run --rm -v $PWD/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:alpine-v13.10.0 register \--non-interactive \--executor "docker" \--docker-image latelee/ubuntu \--url "http://10.0.153.12:8888/" \--registration-token "FXKUC2HtxFuICBC9961024" \--description "docker-runner" \--tag-list "docker,aws" \--run-untagged="true" \--locked="false" \--access-level="not_protected"

生成的配置在/etc/gitlab-runner/config.toml文件。

说明:

  • 运行器 executor 选择 docker 即可,镜像使用自建的 latelee/ubuntu, 方便后续添加软件。

成功后,在 Runners 界面(与图4为同一界面)可以看到已注册的实例,如图5所示。

注意,注册之后,还是可以再编辑文件gitlab-runner/config/config.toml的,但需要重启容器。

过程记录

管理员登录,在Runners中找到项目,绑定到指定runner。(存疑:只有一个runner,是否不需要一一绑定项目?太麻烦了)

设置好 ci 脚本,提交,提示This job is stuck, because the project doesn‘t have any runners online assigned to it.。解决:在Settings->CI/CD找到对应的runner,将Indicates whether this runner can pick jobs without tags打勾。

执行 CI 后,提示:

fatal: repository 'http://10.0.153.12/latelee/ci_test.git/' not found
ERROR: Job failed: exit code 1

原因:仓库带端口,但此处没有,何解?

遗留问题/思考

如果切换 gitlab,如果更新或添加?——由于是 docker 部署,在测试阶段容易重新启动新的 gitlab 服务。

五、进阶配置

这里列出一些配置,有空再研究

# 这个是针对请求钩子的,还有针对Git的这些
gitlab_rails['webhook_timeout'] = 60 #默认是10s# 若是大体都需要求延长的,可以配置全局,后者是进程数
unicorn['worker_timeout'] = 100
unicorn['worker_processes'] = 8# gitlab_rails['smtp_enable'] = true
# gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
# gitlab_rails['smtp_port'] = 465
# gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
# gitlab_rails['smtp_password'] = "password"
# gitlab_rails['smtp_authentication'] = "login"
# gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = true
# gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'

参考

https://docs.gitlab.com/runner/register/index.html#docker

https://docs.gitlab.com/runner/install/docker.html

使用默认端口时,gitlab 仓库下载地址示例:

容器内部改了端口并做了映射,相应的下载地址示例:

我的docker随笔34:gitlab服务部署相关推荐

  1. 我的docker随笔19:Nextcloud部署

    一.背景 Nextcloud是个人云存储服务,提供云存储服务,内置了Office文档.图片相册.日历联系人.两步验证.文件管理.RSS阅读等丰富的应用.可安装在本地或云主机,本文使用Docker进行部 ...

  2. 将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

    介绍 本文的目的是:通过使用 DockerHub 和 Azure Kubernetes Service (AKS) 将之前 使用 .NET 和 Docker 构建的微服务 部署到微软 Azure 云上 ...

  3. 从零开始一步一步搭建Ubuntu Server服务器、修改数据源、安装Docker、配置镜像加速器、Compose部署Gitlab服务

    场景 最终目的是使用Docker Compose部署一个Gitlab服务. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程 ...

  4. Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  5. 我的docker随笔35:jenkins服务部署

    本文涉及一种在容器中部署 jenkins 服务的方法,后续将其与 gitlab 配合以实现 CICD 功能.其目的是为了在实际工作中使用代码托管及自动化操作. 一.引言 因工作需要,需部署 jenki ...

  6. Docker 上 gitlab私有化部署及邮箱配置

    一.前言 git作为目前最流行的代码管理工具,已经成为了程序员必备的技能.虽然目前有 github(对国人不太友好) .gitee 两个比较大的代码托管平台.但是出于各种原因,搭建自己的私有代码平台也 ...

  7. 新一代微服务全家桶AlibabaCloud+Docker+JDK11阿里云容器部署零基础到项目实战

    新一代微服务全家桶AlibabaCloud+Docker+JDK11阿里云容器部署零基础到项目实战 近年来,微服务架构已经成为企业标配,它以更加灵活的部署方式和高度解耦的架构设计,为企业带来了极大的业 ...

  8. 利用Docker/Ansible实现轻量集群服务部署(视频演示+彩蛋)

    周良伟 网易云信系统架构师 负责云信IM平台的架构设计和服务器研发团队 作者简介 今天和大家分享的主题是如何用Docker/Ansible来做轻量私有化的技术方案.首先,简单介绍一下所谓轻量私有化到底 ...

  9. Docker GitLab镜像部署

    环境说明 系统环境: CentOS Linux release 7.4docker Version: 18.03.1-ce 运行镜像 docker run --detach \--hostname g ...

最新文章

  1. 思科路由器DHCP基础配置
  2. HDU 4539郑厂长系列故事――排兵布阵(状压DP)
  3. 六款小巧的HTTP Server
  4. pip3 install face_recognition
  5. 重磅风控干货:如何用数据分析监测交易欺诈
  6. 好文转发《我现在是这样编程的》
  7. 本想试试看,结果却拿到了京东的Offer
  8. Swift基础语法: 30 - Swift的基类, 子类, 重写, 重写方法, 重写属性, 防止重写
  9. Spring MVC 反射对象和依赖注入
  10. JS小游戏-极速快跑
  11. OpenSSL API: SSL对象和SSL_CTX对象的使用
  12. Flink本地安装教程
  13. axure rp8.1 注册码
  14. 0.99元用7天,金山云大米云主机给你这个机会!
  15. 低层次数论书籍大杂烩
  16. Linux 中动态链接库的版本号以及ldconfig
  17. Android安卓原生实现微信登陆
  18. python 配对t检验_配对t检验的python实现
  19. Word分栏出现空白怎么解决
  20. 数学建模常用算法—优劣解距离法(TOPSIS)

热门文章

  1. 苹果推出Apple Pay防欺诈功能 目前仅限于Visa
  2. 微信支付携手云闪付APP上线支付立减新优惠
  3. 首发骁龙898!小米12系列屏幕方案曝光:双曲面屏+全新封装工艺
  4. 荣耀Magic3相机界面公布:提供专业“电影”功能
  5. 疫情之下困难的设备维护工作该如何解决? ​
  6. 苹果赢了!iOS14隐私功能并不违反法国反垄断法
  7. 蚂蚁之江要退地?官方回应:假的
  8. 中国信通院:二季度83款5G手机申请入网 款型数占比已过半
  9. 华为一所英国研发中心建设项目获当地批准 计划总投资4亿英镑
  10. 神州租车:陆正耀辞任公司董事会主席及非执行董事职务