本文描述了在Linux环境中搭建Gitlab+Gitlab-Runner实验环境的过程,可以在服务器端,也可以在自己的笔记本上搭建这个环境用来使用Gitlab的CI/CD流程。所有的软件运行在一台电脑上,我自己是在华为的笔记本上运行,配置为16G内存+512G固态硬盘,安装的Linux发行版是Deepin V20.8,供参考。
# 拉取Gitlab和Gitlab-runner镜像
docker pull registry.gitlab.cn/omnibus/gitlab-jh
docker pull gitlab/gitlab-runner
Gitlab容器需要挂载三个路径:etc
、log
、opt
,用来保存持久化数据,我们在当前用户的根目录中新建这三个路径,假定当前用户名为gitlab
。然后通过挂载这三个路径的方式启动gitlab。
# 创建挂载目录
cd ~
mkdir gitlab-ce
mkdir gitlab-ce/etc
mkdir gitlab-ce/log
mkdir gitlab-ce/opt
# 启动容器
docker run -itd -p 80:80 -p 9922:22 -v /home/gitlab/gitlab-ce/etc:/etc/gitlab -v /home/gitlab/gitlab-ce/log:/var/log/gitlab -v /home/gitlab/gitlab-ce/opt:/var/opt/gitlab --restart always --privileged=true --name gitlab registry.gitlab.cn/omnibus/gitlab-jh
参数 | 描述 |
---|---|
-i | 以交互模式运行容器 |
-t | 为容器重新分配一个伪输入终端,通常与 -i 同时使用 |
-d | 后台运行容器 |
-p 80:80 | 将容器内80端口映射至宿主机80端口,这是访问gitlab的端口 |
-p 9922:22 | 将容器内22端口映射至宿主机9922端口,这是访问ssh的端口 |
-v /home/gitlab/gitlab-ce/etc:/etc/gitlab | 将容器/etc/gitlab目录挂载到宿主机/home/gitlab/gitlab-ce/etc目录下,这里是gitlab的配置文件,挂载后可以直接在宿主机访问并修改 |
-v /home/gitlab/gitlab-ce/log:/var/log/gitlab | 将容器/var/log/gitlab目录挂载到宿主机/home/gitlab/gitlab-ce/log目录下,这里是gitlab的日志文件,挂载后可以直接在宿主机查看 |
-v /home/gitlab/gitlab-ce/opt:/var/opt/gitlab | 将容器的/var/opt/gitlab目录挂载到宿主机/home/gitlab/gitlab-ce/opt目录下,这里是XXX |
–restart always | 容器自启动 |
–privileged=true | 让容器获取宿主机root权限 |
–name gitlab | 设置容器名称为gitlab |
gitlab/gitlab-ce | 镜像的名称 |
之后需要在容器内进行修改参数。
# 首先看一下本机的IP地址,并且记录下来,这里假定是192.168.xxx.xxx
ifconfig
# 进入容器内部
docker exec -it gitlab bash
# 修改gitlab.rb
vi /etc/gitlab/gitlab.rb
# 修改下面的配置
# gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'http://192.168.xxx.xxx'
# ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.xxx.xxx'
# ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922
# 让配置生效
gitlab-ctl reconfigure
重新配置后会/etc/gitlab/gitlab.rb文件会更新gitlab.yml这个文件,如果gitlab访问地址不是80端口,要修改下面文件
# 修改http和ssh配置
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
gitlab:
host: 192.168.xxx.xxx
port: 80 # 如果使用非80端口,在这里修改
https: false
然后重启gitlab使配置生效
# 重启gitlab
gitlab-ctl restart
# 退出容器
exit
使用浏览器访问:http://192.168.xxx.xxx/
正常情况下会出现下面的登录界面
【注意】如果出现502错误,可能是电脑内存不足,可以等一下,一般会恢复正常
gitlab-ce安装以后,把root用户的初始密码放在了一个临时文件中了
/etc/gitlab/initial_root_password
打开这个文件,就可以看到Password:后面的一长串字符就是root用户的初始密码。建议登录后尽快修改密码。【注意】这个文件将在首次执行reconfigure后24小时自动删除。
使用root用户登录后,进入Admin界面
选择CI/CD-Runners菜单
拷贝Registration Token,在下面注册runner的时候需要使用
Gitlab-runner容器需要挂载一个路径:config
,用来保存配置数据。同时我们需要指定宿主机运行docker的sock文件,这样runner在启动docker容器的时候会调用宿主机的docker-daemon,不需要再Gitlab-runner中再安装docker-daemon
# 创建挂载目录
cd ~
mkdir gitlab-runner
mkdir gitlab-runner/config
# 启动容器
docker run -d --name gitlab-runner --restart always -v /home/gitlab/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner
进入Runner容器内
docker exec -it gitlab-runner bash
运行register命令开始注册
gitlab-runner register
输入Gitlab的地址,与上面第3节的external_url相同
Runtime platform arch=amd64 os=linux pid=41 revision=d540b510 version=15.9.1
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.xxx.xxx
输入Registration Token,参见第6节。
Enter the registration token:
xxxxxxxxxxxxxxxx
输入Runner的描述
Enter a description for the runner:
[hostname]: my-runner
输入与Runner关联的标签,标签对应于.gitlab-ci.yml脚本中的tags,可以选择一个或者多个Runner来执行,这里我们设置他的标签为test和prod,你们可以设置其他的
Enter tags for the runner (comma-separated):
test,prod
输入runner的描述文字,可选
Enter optional maintenance note for the runner:
my-runner
输入Runner的执行器
由于我们都是基于Docker,所以这里选择执行器为Docker
Enter an executor: custom, docker, parallels, shell, kubernetes, docker-ssh, ssh, virtualbox, docker+machine, docker-ssh+machine, instance:
docker
设置执行器的默认docker镜像,由于我们使用Docker作为执行器,因此在这里需要指定使用Docker:20.10.16镜像作为默认镜像。
Enter the default Docker image (for example, ruby:2.7):
docker:20.10.16
退出容器
exit
由于我们使用Docker启动了Gitlab-runner,又配置了在runner中使用docker作为基础镜像运行jobs,也就是我们使用了“Docker中的Docker”因此我们需要做对Gitlab-runner做一下附加配置。
进入gitlab-runner下/etc/gitlab-runner/,修改config.toml。
由于gitlab-runner的容器内没有预装vi,所以我们可以直接在宿主机修改这个文件/home/gitlab/gitlab-runner/config/config.toml
privileged = true
然后重启gitlab runner
docker restart gitlab-runner
再按照第6节的方法看一下runners,会出现一个已经注册的runner。