基于Docker GitLab 搭建 GitLab runner 搭建 GitLab CI/CD

最近需要在研究GitLab的CI,所以自己基于Docker搭建了一个GitLab环境, 在此做下记录...

搭建过程十分简单, 我是在自己电脑的虚拟中搭建的gitlab, 切记配置不能太低, gitlab比较耗资源, ,官方要求至少4G内存。

一、GitLab 的搭建

1.获取镜像

# gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本
$ docker pull gitlab/gitlab-ce

我使用的是汉化版的镜像,docker pull twang2218/gitlab-ce-zh:latest

2.运行gitlab镜像

$ docker run -d  -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
# -d:后台运行
# -p:将容器内部端口向外映射
# --name:命名容器名称
# -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录

3.配置

按上面的方式,gitlab容器运行没问题,但在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb(宿主机路径:/home/gitlab/config/gitlab.rb)。

# gitlab.rb文件内容默认全是注释
$ vim /home/gitlab/config/gitlab.rb

# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://宿主机IP'

# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '宿主机IP'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口
:wq #保存配置文件并退出

# 重启gitlab容器
$ docker restart gitlab

此时就可以通过浏览器,使用IP+端口的方式访问GitLab了

4.其他配置

由于GitLab十分消耗资源,所以这里贴出来一些降低资源消耗的配置,仅供参考,因为我的目的仅仅是启动GitLab做实验,所有资源配置都很低。需要修改的是宿主机 /home/gitlab/config/gitlab.rb文件(注:路径需根据自己自定的数据卷位置修改)

# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://10.106.127.128:8088'

# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '10.106.127.128:8088'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口

unicorn['worker_memory_limit_min'] = "100 * 1 << 20"
unicorn['worker_memory_limit_max'] = "150 * 1 << 20" #减小内存

sidekiq['concurrency'] = 5 # 减小sidekiq的并发数
postgresql['shared_buffers'] = "64MB" #数据库缓存
postgresql['max_worker_processes'] = 2 #数据库并发数

unicorn['worker_timout'] = 60

unicorn['worker_processes'] = 2

二、GitLab runner 搭建

1. 拉取镜像

 docker pull gitlab/gitlab-runner:latest 

2.运行镜像

docker run -d --name gitlab-runner --restart always \
  -v /docker/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

注意:这里docker.sock文件路径要确定, 之前就指定错路径导致后面使用容器exectuor的时候报错。

3.注册runner

这里使用的是specific Runner方式。在gitlab中 设置 --> CI/CD --> Runner(展开) 找到对应的配置信息。如图:

配置信息

运行命令:

docker run --rm -t -i -v /docker/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register

#输入GitLab URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https:// ***.***.com/

#输入你的注册token
Please enter the gitlab-ci token for this runner  
***

#输入对这个Runner的描述
Please enter the gitlab-ci description for this runner  
my-runner

#输入Runner的[tag] 
Please enter the gitlab-ci tags for this runner (comma separated):
test

#输入Runner的[executor] ,这里使用容器
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker

#如果你选择Docker作为Runner的executor,你还要选择默认的docker image来运行job
Please enter the Docker image (eg. ruby:2.1):
alpine:latest

至此GitLab runner已经搭建启动。

4、其他配置

  • 使用本地镜像
# 修改配置文件 :/docker/gitlab-runner/config/config.toml
# 在对应runner下增加如下配置, 防止重复拉取镜像
pull_policy = "if-not-present"
  • maven本地仓库缓存
# 修改配置文件 :/docker/gitlab-runner/config/config.toml
# 在对应runner下挂载数据卷
volumes = ["/cache","/root/.m2/:/root/.m2/"]

三、Hello Word

在项目的根路径添加配置文件 .gitlab-ci.yml
这里我们选择了一个maven的镜像作为executor的执行环境。执行了单元测试的任务。

image: hub.c.163.com/library/maven:latest  
test:
  stage: test
  script:
    - mvn test

还有一种比较常见的场景,我们需要对代码在CI阶段进行代码扫描。
比如使用GolangCI-Lint进行扫描,扫描后我们将扫描结果进行上传。
比如进行单元测试,当运行失败将结果上传。

image: hub.c.163.com/library/maven:latest
test:
  stage: test
  script:
    - mvn test
  artifacts:
    name: test.json #为上传的文件起名
    when: on_failure #当失败的时候进行
    paths:
      - test.json #上传文件路径

四、踩过的坑

  • 期初在注册的时候不清楚tags的含义,随便输入了个名字,在执行pipline时一直等待找不到可执行的runner。 遇到此问题,在.gitlab-ci.yml中配置指定 tags 即可。
  • 使用 shell 作为executor 执行用户是gitlab-runner如遇到权限问, 可以从此出发及决问题。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容