GitLab 配置

Docker 安装

# 拉取gitlab-ce源
docker pull gitlab/gitlab-ce:latest
# 运行
docker run \
-d \
--publish 40433:443 --publish 40080:80 --publish 40022:22 \
--name gitlab-ce \
--restart always \
-v /volume1/docker/gitlab-ce/config:/etc/gitlab \
-v /volume1/docker/gitlab-ce/logs:/var/log/gitlab \
-v /volume1/docker/gitlab-ce/data:/var/opt/gitlab \
-e GITLAB_ROOT_PASSWORD=Wsad.8246GITLAB \
gitlab/gitlab-ce
宿主机位置 容器位置 作用
/volume1/docker/gitlab-ce/config /etc/gitlab 用于存储 GitLab 配置文件
/volume1/docker/gitlab-ce/logs /var/log/gitlab 用于存储日志
/volume1/docker/gitlab-ce/data /var/opt/gitlab 用于存储应用数据

GitLab 配置

修改 ssh 克隆地址

打开 /volume1/docker/gitlab-ce/config/gitlab.rb 修改 GitLab 配置

字段 举例 描述
gitlab_rails[‘gitlab_ssh_host’] 192.168.0.6 ssh 克隆地址
gitlab_rails[‘gitlab_shell_ssh_port’] 40022 ssh 克隆端口
# 修改后重启
$ docker exec -it gitlab-ce bash
$ gitlab-ctl reconfigure
$ gitlab-ctl restart

修改 http 克隆地址

若要修改 http 克隆地址,需要修改文件 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml。 (当然也可以在挂载盘中修改 /volume1/docker/gitlab-ce/data/gitlab-rails/etc/gitlab.yml)

注意:如果修改了 gitlab.rb, 需要在 reconfigure 之后重新修改 gitlab.yml 因为修改 gitlab.rbgitlab.yml 的内容会变化

# 修改后重启
$ docker exec -it gitlab-ce bash
$ vi /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

  gitlab:
    ## Web server settings (note: host is the FQDN, do not include http://)
    host: 192.168.0.6
    port: 40080
    https: false

$ gitlab-ctl restart

最后

不要轻易尝试修改,试过出问题,可以参考 docker安装gitlab后的配置修改

Gitlab Runner 安装

gitlab-runner 版本要 <= gitlab-ce 的版本,可以在 amind 中查看。 推荐使用 交互方式 创建,可以查看创建过程的错误。(注册后,可以关闭容器)

注册

# 非交互式
$ docker run -itd --rm \
-v /volume1/docker/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:v15.2.1 \
register \
  --non-interactive \
  --executor "shell" \
  --url "http://192.168.0.6:40080/" \
  --registration-token "mbXzCrVhN3ry8AYM-SE8" \
  --description "devops-runner" \
  --tag-list "build,deploy" \
  --run-untagged="true" \
  --locked="false" \
  --access-level="not_protected"
  
  
# 交互式
$ docker run --rm -t -i \
-v /volume1/docker/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:v15.2.1 register

# --输出内容如下--
Runtime platform                                    arch=amd64 os=linux pid=6 revision=32fc1585 version=15.2.1
Running in system-mode.                            
                                                   
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.0.6:40080/
Enter the registration token:
mbXzCrVhN3ry8AYM-SE8
Enter a description for the runner:
[ff193cbdf4fc]: devops-gitlab-runner
Enter tags for the runner (comma-separated):
build
Enter optional maintenance note for the runner:
shell
Registering runner... succeeded                     runner=mbXzCrVh
Enter an executor: ssh, virtualbox, docker-ssh+machine, kubernetes, custom, docker, parallels, docker-ssh, shell, docker+machine:

运行

上一环节注册的所有 runner 信息都在 /volume1/docker/gitlab-runner/config/config.toml 下,可以手动删除、增加 (如果发现有很多不必要的 runner 可以进入文件删除后,重启容器)

$  docker run -d \
--restart always \
-v /volume1/docker/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
--name gitlab-runner \
gitlab/gitlab-runner:v15.2.1

进入 https://gitlab-ce.liruwei.cn/admin/runners 查看是否正常运行。

/var/run/docker.sock 本机 docker 通信的 socker 文件,mac 系统文件位置上网查找 增加这个挂载,主要用于 runner 中使用 docker 容器进行打包

增加 node 环境的 runner (docker 运行)

有时候我们需要用到其他环境打包项目,比如 React 需要 node,可以创建一个 Docker executor 的 runner。这里以 node 为例

# 进入 gitlab-runner
$ docker exec -it gitlab-runner bash

# 注册 node 环境的 docker executor runner
$ gitlab-runner register -n \
  --url http://192.168.0.6:40080/ \
  --registration-token mbXzCrVhN3ry8AYM-SE8 \
  --executor "docker" \
  --tag-list "node" \
  --description "node:18.7.0" \
  --docker-image "node:18.7.0"

再次打开 Gitlab 页面,就可以看到多出一个 runner。这里设置 --tag-list "node", ci 任务中设置 tag: -node 即可在这个 runner中执行,如下。

test:
  stage: build
  tags:
    - node

gitlab-runner 中执行 ssh

如果 script 中需要用到 ssh,需要进入 gitlab-runner 容器中创建密钥,利用 ssh-copy-id 上传到服务器。

由于 gitlab-runner 默认是使用 gitlab-runner 用户执行的,所以需要切换用户

$ docker exec -it gitlab-runner bash
$ su gitlab-runner
$ ssh-keygen -t rsa -C "469922730@qq.com"
$ ssh-copy-id -i ~/.ssh/id_rsa root@liruwei.cn
# 验证是否成功
$ ssh root@liruwei.cn

举例 pipeline

数据迁移

方法一:gitlab-rake

前提条件 GitLab 正常运行。使用 gitlab-rake 备份。在 /var/opt/gitlab/backups 目录下创建一个名称类似为 1530156812_2018_06_28_10.8.4_gitlab_backup.tar 的压缩包

# 进行备份
gitlab-rake gitlab:backup:create

方法二:shell 脚本

transfer.sh

参考