我的docker随笔34:gitlab服务部署
Posted 李迟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的docker随笔34:gitlab服务部署相关的知识,希望对你有一定的参考价值。
本文涉及一种在容器中部署 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.0
container_name: llgitlab
restart: always
volumes:
- ./gitlab_data/config:/etc/gitlab
- ./gitlab_data/logs:/var/log/gitlab
- ./gitlab_data/data:/var/opt/gitlab
ports:
- "8888:80"
- "8443:443"
#- "2222:22"
hostname: "10.0.10.11"
#command: /assets/wrapper
networks:
- llgitlab-net
networks:
llgitlab-net:
driver: bridge
脚本中将配置目录和数据目录映射到主机当前目录的gitlab_data
目录,方便后续修改。对外提供8888
端口。由于部署环境为内网,故设置hostname
为部署机器的IP
。
版本二,修改端口:
version: '2'
services:
llgitlab:
image: gitlab/gitlab-ce:13.10.0-ce.0
container_name: llgitlab
restart: always
volumes:
- ./gitlab_data/config:/etc/gitlab
- ./gitlab_data/logs:/var/log/gitlab
- ./gitlab_data/data:/var/opt/gitlab
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://10.0.153.12:8888'
nginx['listen_port']=8888
gitlab_rails['gitlab_shell_ssh_port']=8822
gitlab_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.0
container_name: llgitlab
restart: always
volumes:
- ./gitlab_data/config:/etc/gitlab
- ./gitlab_data/logs:/var/log/gitlab
- ./gitlab_data/data:/var/opt/gitlab
ports:
- "8888:80"
- "8443:443"
#- "2222:22"
hostname: "10.0.153.12"
#command: /assets/wrapper
networks:
- llgitlab-net
llgitlab-runner:
image: gitlab/gitlab-runner:alpine-v13.10.0
container_name: llgitlab-runner
restart: always
volumes:
- ./gitlab-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- llgitlab
networks:
- llgitlab-net
networks:
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服务部署的主要内容,如果未能解决你的问题,请参考以下文章
我的docker随笔37:使用gitlab和jenkins实现CICD