又到晚上黄金上网时间了,你还等什么?
登录注册
2022-09-21 12:54:37

把极狐 GitLab Runner 搬回家运行,指定专属 Runner

把极狐 GitLab Runner 搬回家运行,指定专属 Runner

本文内容使用 极狐GitLab SaaS 平台进行演示,同时适用于任何自托管的 GitLab。极狐GitLab SaaS 平台为我们提供了高可用的保障,所以我没有使用自建 GitLab。

为什么把极狐 GitLab Runner 搬回家

能搜索到这篇文章的你,相信也是科技爱好者或者是一名极客,当前 DevOps 的流行已经成为一种标准,是个项目都要自动化一下,那么在 GitLab 上运行自动化的操作就离不开 Runner 的执行,我为什么把极狐 GitLab Runner 搬回家?理由大致如下:

  • 极狐 GitLab SaaS 共享 Runner 有执行时间额度限制,一旦超过免费免费额度,快乐就没有了;当然你可以付费购买执行时间。在家运行私有 Runner 就可以任意挥霍了。
  • 极狐的 Runner 位于中国大陆境内,受到国际网络限制,很多依赖包、镜像都是需要到境外下载,一旦网络跨境速度非常缓慢或者失败,而在我家运行 Runner 的话,路由器上已经做了某些“你懂得”设置,所以跨境网络不是问题。
  • 敏感内容的安全性,如果你的程序中需要一些密码、秘钥、各种私有数据、敏感内容,使用共享的 Runner 就不太放心,你总担心自己的数据被泄露?用自己的私有 Runner 可以保证敏感数据一直留在自己这里。
  • 作为极客的你,家里肯定有属于你的小型数据中心吧?自己拼装的机器便宜、而且基本是性能过剩的,硬件闲着也是闲着,民用电费也不贵,在自己的数据中心里增加几个虚拟机来运行 Runner 这个成本是很低的。
  • 最后,作为极客的你,肯定热爱折腾,拥有属于自己的专属 Runner 是不是很酷,并且可以随意配置性能、网络,折腾也是一种快乐,明白其中运行原理以后,可以去社区帮助其他小伙伴解答问题了。

运行环境与准备

在开始之前,由于本文主要将 GitLab Runner,其他知识不再展开,我认为您已经具备了以下基础内容:

  • 具备 Linux、Docker 的基础知识,可使用命令行界面操作。
  • 拥有 极狐 GitLab SaaS 或者自托管的 GitLab 平台账号。
  • 具备 .gitlab-ci.yml 脚本的编写基础知识。
  • 拥有一台可以访问互联网的 Linux 主机或虚拟机,并安装好了 Docker 引擎。

我的硬件环境是在家里有一台物理PC机,通过 VMware ESXi 创建 Ubuntu 虚拟机,在虚拟机中安装 Docker 引擎,这样虚拟机的硬件资源可以快速的调整。

我的网络环境是物理PC机接入千兆交换机、再通过安装有 OpenWRT 系统的软路由、到运营商的光猫转光纤出户,下行 300Mbps,上行 35Mbps 的速度,并且在软路由上做了某些“你懂得”设置,解决跨境网络问题。

每个人的环境都不一样,就不啰嗦了,如果你还不具备上面的基础内容,请先准备运行环境。

个人数据中心

创建一个仓库

首先,我们先在极狐 GitLab SaaS 上创建一个自己的仓库,如果你已经有了也同样推荐新建一个仓库,用来练习和熟悉,当掌握以后再去真正的仓库中进行实施,我这里创建一个用于演示的仓库项目:https://jihulab.com/renfei/jihulab-runner-example

然后,我们到仓库的 Settings -> CI/CD -> Runners 设置页面,记录下注册地址和 Token 如下:

gitlab ci/cd runner

我们拿到注册地址:https://jihulab.com/,还有 Token:GR1348572tgG14Us9uxRMCw4T_9pr,注意保护你的 Token 令牌不要公开!否则其他人将可以把 Runner 注册到你的仓库,一旦运行 CI/CD Runner 将拿到你仓库中的代码!

安装 Runner

登录系统,先拉取 Runner 的镜像,这步比较慢,如果你网络不太好,执行完以后可以去喝茶了:

docker pull gitlab/gitlab-runner
docker pull gitlab-runner

当然,你也可以在结尾增加版本号来获取指定的版本,不过我每次都是最新的默认就是 latest,然后运行一个容器,执行下面的命令:

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

我大致解释一下命令含义,-d 是后台运行,-name 是命名,-v 是挂载目录,当然挂载卷也行,就不演示了。

这里注意一下 /srv/renfei-jihulab-runner-example/config,是将配置目录挂载到宿主机,所以你如果运行多个容器的话,这个目录需要分开,要设置成不一样的!这里记录一下这个路径,一会儿要用。

docker run gitlab-runner

注册 Runner

上一步已经启动了一个容器,下面我们将这个 Runner 注册到极狐 GitLab SaaS 上的仓库中,还记得上面的 Token 吗,接下来就用到了,执行这个命令:

docker run --rm -it \
  -v /srv/renfei-jihulab-runner-example/config:/etc/gitlab-runner \
  gitlab/gitlab-runner register

注意,这里 -v 的参数,是我们上面运行时的目录;然后就会启动下面的交互式的注册流程:

# 原版英文交互内容如下
Enter the GitLab instance URL (for example, https://gitlab.com/):
https://jihulab.com/
Enter the registration token:
GR1348572tgG14Us9uxRMCw4T_9pr
Enter a description for the runner:
[aa616f1b9146]: renfei jihulab runner example
Enter tags for the runner (comma-separated):
renfei-jihulab-runner-example
Registering runner... succeeded                     runner=GR134894
Enter an executor: parallels, shell, virtualbox, docker+machine, docker-ssh+machine, docker, docker-ssh, ssh, kubernetes, custom:
docker
Enter the default Docker image (for example, ruby:2.6):
ubuntu:latest
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

# 翻译中文交互内容如下:
输入GitLab实例URL(例如,https://gitlab.com/):
https://jihulab.com/
输入注册令牌:
GR1348572tgG14Us9uxRMCw4T_9pr
输入跑步者的描述:
[aa616f1b9146]:renfei jihulab runner example
输入runner的标签(逗号分隔):
renfei-jihulab-runner-example
正在注册runner…成功                     runner=GR134894
输入执行器:parallels, shell, virtualbox, docker+machine, docker-ssh+machine, docker, docker-ssh, ssh, kubernetes, custom:
docker
输入默认Docker镜像(例如,ruby:2.6):
ubuntu:latest
Runner注册成功。可以随时启动它,但如果它已经在运行,配置应该会自动重新加载!
docker gitlab-runner register

这里注意有一个“tags for the runner”的设置,这个标签要想好,后面我们会经常使用,来识别这个 runner。

然后,我们到仓库的 Settings -> CI/CD -> Runners 设置页面,刷新以后,是不是就可以看到了?

gitlab runner

这个时候,这个 Runner 是必须要在 .gitlab-ci.yml 中指定 tag 使用的,如果你想让这个 runner 在不指定 tag 时也工作,需要点编辑,然后勾选下面的选项:Indicates whether this runner can pick jobs without tags

我这里就不勾选了,因为在后面 .gitlab-ci.yml 中我会指定 tag 来使用我自己的专属 runner。

gitlab runner

在项目中使用指定的专属 Runner

在仓库中,创建 .gitlab-ci.yml 文件,注意在 job 中指定 tags 为我们 runner 的 tag:

image: busybox:latest

before_script:
  - echo "Before script section"
  - echo "For example you might run an update here or install a build dependency"
  - echo "Or perhaps you might print out some debugging details"
   
after_script:
  - echo "After script section"
  - echo "For example you might do some cleanup here"
   
build1:
  stage: build
  tags:
    - renfei-jihulab-runner-example
  script:
    - echo "Do your build here"
   
test1:
  stage: test
  tags:
    - renfei-jihulab-runner-example
  script: 
    - echo "Do a test here"
    - echo "For example run a test suite"
   
test2:
  stage: test
  tags:
    - renfei-jihulab-runner-example
  script: 
    - echo "Do another parallel test here"
    - echo "For example run a lint test"
   
deploy1:
  stage: deploy
  tags:
    - renfei-jihulab-runner-example
  script:
    - echo "Do your deploy here"

提交并推送到极狐 GitLab SaaS ,我们去流水线 pipeline 中看一下:https://jihulab.com/renfei/jihulab-runner-example/-/pipelines/529692,嗯,已经执行完成了:

gitlab runner

点击一个具体的 job 查看:https://jihulab.com/renfei/jihulab-runner-example/-/jobs/4559148,右侧已经显示使用的是我的专属私人 runner 执行的了:

gitlab runner

到这里,就完成了,祝各位极客玩的开心,顺便提一句,此篇文章正在参加《极狐GitLab创作营 JIHULAB 101》,请各位给我投一票哦~~

此文由任霏原创,非商用转载请注明来源与作者,商用转载请联系作者授权。

评论与留言

以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。
本站有缓存策略,时间约2小时后能看到您的评论。本站使用自动审核机制,如果您的内容包含广告/谩骂/恐怖/暴力/涉政等不和谐内容将无法展示!
微信订阅号
扫码关注「任霏博客」微信订阅号
反馈与讨论
感谢您的关注与反馈
如果您发现了BUG、安全漏洞、或者希望讨论技术内容,请点击下方链接对我进行反馈。
feedback