我的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随笔35:jenkins服务部署

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

我的docker随笔37:使用gitlab和jenkins实现CICD

我的docker随笔37:使用gitlab和jenkins实现CICD

我的docker随笔32:sftp服务部署

gitlab-docker安装部署(postgresqlredis分离)