GitLab-Runner安装

标签: Git 分类: 软件 创建时间:2020-03-03 14:29:40 更新时间:2025-01-17 10:39:22

1.前言

刚刚熟悉了如何使用AzureDevops,但是遇到收费的问题,又想用这种持续集成和交付的工具,辗转又来到了GitLab。微软的东西,就有一个好处,就是会有图型界面,连Pipeline也有Web界面可以简简单单的配置完成。但是到了GitLab这里,就没有这么幸运了,任何一条任务,都要写配置文件进行配置。对于配置文件的学习,又是一个不小的成本。虽然AzureDevops也支持yml格式配置文件,但是既然有控制台,谁还会去花时间学习配置文件如何编写呢?

第一个问题就是,A机器安装了GitLab服务器,保存了仓库,B机器呢是要进行代码部署的机器,两者如何进行通信呢?类比于Azure Devops,B机器会安装一个代理软件之类的东西。安装的时候,AzureDevops也给了命令行,可以直接拷贝然后安装就可以了。但是GitLab好像没有这么方便了。

2.GitLabRunner

一台电脑上可以安装(其实叫注册更贴切)一个Runner,也可以安装(其实叫注册更贴切)多个Runner。可以安装一个通用的Runner,也可以安装一个特定于某个项目的Runner。参考文章中说:

(1) 什么情况下需要注册Shared Runner?
比如,GitLab上面所有的工程都有可能需要在公司的服务器上进行编译、测试、部署等工作,这个时候注册一个Shared Runner供所有工程使用就很合适。

(2) 什么情况下需要注册Specific Runner?
比如,我可能需要在我个人的电脑或者服务器上自动构建我参与的某个工程,这个时候注册一个Specific Runner就很合适。

(3) 什么情况下需要在同一台机器上注册多个Runner?
比如,我是GitLab的普通用户,没有管理员权限,我同时参与多个项目,那我就需要为我的所有项目都注册一个Specific Runner,这个时候就需要在同一台机器上注册多个Runner。

3.windows下安装GitLab Runner

这个就比较厉害了,类似于AzureDevops的在代理服务器或者是部署服务器上安装的代理软件。在哪台机器上安装了它,它就可以和安装GitLab的主服务器之间进行通信,并执行主服务器上定义的pipeline任务。摘自官网的描述,在windows上安装gitlab-runner。
(1) 在系统上创建一个文件夹,比如:C:\GitLab-Runner

(2) 下载 x86 或者是 amd64 版本的二进制文件,将它放到刚刚创建的文件夹中。重新命名这个二进制文件为 gitlab-runner.exe。

(3) 打开命令提示符

(4) 在GitLab服务器上注册Runner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
## 1.命令行运行:
./gitlab-runner.exe register

## 2.Enter your GitLab instance URL:(输入gitlab的主机地址)
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://192.168.1.60 (比如我在ip地址为60的服务器上安装了GitLab)

## 3.Enter the token you obtained to register the Runner:(输入获取到的token)
Please enter the gitlab-ci token for this runner
xxx

## 4.Enter a description for the Runner, you can change this later in GitLab’s UI:(输入一段描述,可以在GitLab上改)
Please enter the gitlab-ci description for this runner
[hostname] my-runner

## 5.Enter the tags associated with the Runner, you can change this later in GitLab’s UI:(输入与Runner相关的标签,稍后您可以在GitLab的U中进行更改)
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag

## 6.Enter the Runner executor:(执行器的概念是什么,还有待深入)
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker

## 7.If you chose Docker as your executor, you’ll be asked for the default image to be used for projects that do not define one in .gitlab-ci.yml:(如果您选择Docker作为执行程序,则会要求您为未在.gitlab-ci.yml中定义一个的项目使用默认映像:)
Please enter the Docker image (eg. ruby:2.6):
alpine:latest

(5) 将Runner安装为windos服务,并开机启动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## 安装
cd C:\GitLab-Runner
.\gitlab-runner.exe install
.\gitlab-runner.exe start

## 卸载
cd C:\GitLab-Runner
.\gitlab-runner.exe stop
.\gitlab-runner.exe uninstall
cd ..
rmdir /s GitLab-Runner

## 更新,就是停止服务之后重新安装
cd C:\GitLab-Runner
.\gitlab-runner.exe stop

3.Executors执行器

gitlab-runner的执行器主要分为SSH、Shell、Parallels、VirtualBox、Docker等很多种。

4.CentOS 8 安装GitLab-Runner

(1) 手动安装gitlab-runner,需要下载指定版本的runner,可以在 官网 查看有哪些可用的 runner 的名字,比如我这里安装gitlab-runner_amd64.rpm 的版本。还有一点,安装gitlab-runner之前,要先安装git,如果已经安装了 git 还是没有找到git,请看问题(3)

1
2
3
4
5
6
7
8
9
10
11
12
## 安装git依赖
yum install git

## 手动安装gitlab-runner,下载指定版本的 gitlab-runner,如果不翻墙的话,可能很慢,可以翻墙下载后上传到服务器上
curl -LJO https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpm

## 安装gitlab runner
rpm -ivh gitlab-runner_amd64.rpm

## 启动、停止、重启
gitlab-runner start
gitlab-runner stop

(2) 注册gitlab-runner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
## 注册gitlab runner
gitlab-runner register

## 输入 gitlab 地址
http://192.168.1.60

## 这里的token分为两种 一种是 Shared Runner ,该 Runner 所有项目都可以使用 位置:顶部设置图标🔧 -> 左侧栏Overview -> Runner
## 另一种是 Specific Runner ,该 Runner 指定具体某个项目才可使用 位置:进入某个项目 -> 左侧栏Setting -> CI/CD -> 在内容区域找到Runners一项,点击展开
9FH5nFzd6NVZzKPZruRn

## 输入描述(我这里随便输入的)
agent_65

## 输入tags(随便吧)
agent_65

## 选择类型执行器的类型(选择docker,还需要选择docker镜像),我选择了docker,因为我本机已经安装了docker并且有一个centos的镜像
docker

## 填入镜像的名称
centos

注册成功:

刷新 gitlab 站点,可以查看已经注册成功了一个runner

参考文章:
【1】.centos 安装 Gitlab Runner
【2】.Install GitLab Runner using the official GitLab repositories
【3】.Gitlab自动部署之二:安装GITLAB-RUNNER 1.安装Gitlab-runner;2.注册Runner;3.创建项目与 .gitlab-ci.yml 文件;
【4】.Install GitLab Runner manually on GNU/Linux
【5】.如何在CentOS 8上安装Git
【6】.Executors
【7】.GitLab Runner Docs

(3) 删除注册信息

1
2
3
4
5
## 查看注册过的信息
gitlab-runner list

## 删除(其中–url参数可查看上面的URL=后面的值填写,–token参数就是上面的Token=后面的值,复制粘贴即可。)
gitlab-runner unregister --url http://192.168.1.60 --token 9FH5nFzd6NVZzKPZruRn

(4) 卸载gitlab-runner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## 卸载服务
gitlab-runner uninstall

## 怎么装的,就怎么卸载,比如我使用的是rpm安装的,那就使用rpm -e命令,然后删除相关的文件及文件夹

## 列出所有安装的包
rpm -qa

## 查看gitlab-runner软件安装时的全名
rpm -qa |grep gitlab-runner

## 查看rpm包安装到那里去了
rpm -ql gitlab-runner-12.9.0-1.x86_64

## 卸载gitlab-runner
rpm -e gitlab-runner-12.9.0-1.x86_64

问题

(1) 为 repo ‘runner_gitlab-runner’ 下载元数据失败

在CentOS8上安装gitlab-runner,执行命令:curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash 时出现问题,无法下载元数据。

看来使用仓库自动安装gitlab-runner 是不行了,只能手动安装了。

(2) gitlab-runner-linux-amd64:不是 rpm 软件包 (或者没有 manifest)
无法自动安装,只能手动安装了,手动安装的时候,执行:curl -LJO https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm64 命令下载rpm包,结果执行:rpm -i gitlab-runner-linux-amd64.rpm 安装时,又提示不是rpm软件包。

问题是我下载错误了,应该下载 rpm/gitlab-runner_amd64.rpm (https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpm) 而不是上面的那一个 binaries/gitlab-runner-linux-arm64 二进制的文件。

(3) 已经安装了git,但是找不到git-runner还是提示没有git
我的系统了已经安装了git(编译安装),使用 git 命令查看,有相关的软件,但是还是无法被git-runner识别,应该是依赖的问题。意思就是手动编译安装的git,没有在系统的依赖库中注入信息,那么git-runner在检查依赖的时候,就出现了找不到相关的git依赖了。

加上参数–test,就可以检查依赖关系

我发现了这个gitlab-runner值依赖git,既然是依赖的问题,但是又没法解决,那只能强行忽略依赖进行安装了。

1
2
3
4
5
## 测试安装及依赖
rpm -ivh gitlab-runner_amd64.rpm --test

## 忽略依赖强制安装
rpm -ivh gitlab-runner_amd64.rpm --nodeps

(4) Registering runner… failed runner=9FH5nFzd status=couldn’t execute POST against http://xxxx/api/v4/runners:
执行注册的时候,出现了问题。无法连接主机,但是通过浏览器访问,是可以访问到主机的gitlab地址的。

奇怪的问题,我将外网的地址映射端口由8080改为8012就可以了。意思就是说,我外网ip地址为202.202.202.202,通过在ASUS(华硕)路由器上进行端口映射,将8080端口映射到内容192.168.1.60:80,从外网访问202.202.202.202:8080及可以访问到内容192.168.1.60:80,问题就出现在这个8080端口映射。我将8080映射,改为8012映射,便可以通过注册了。显然问题就出现在ASUS路由器的8080端口上了。

5.修改执行用户

本来我想着要设置 gitlab-runner 账号密码的,后来发现无效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看执行用户
ps aux | grep gitlab-runner

# 切换root,
sudo su -
# 设置密码
passwd gitlab-runner

# 卸载服务
gitlab-runner uninstall

# 切换执行用户
gitlab-runner install --user root
gitlab-runner install --working-directory /home/gitlab-runner --user root

# 重启
systemctl restart gitlab-runner

# 将用户加入root组
usermod -g root gitlab-runner
# 默认的组就是gitlab-runner,将用户加入 gitlab-runner 组
usermod -g gitlab-runner gitlab-runner
参考文章:
【1】.修改 gitlab-runner 的执行用户 安装 gitlab-runner 构建机默认会将用户设置为 gitlab-runner,该设置会导致.gitlab-ci.yml 脚本运行时出现一些权限问题。为了解决这些权限问题,杜老师将 gitlab-runner 构建机上的默认用户设置为 root。
【2】.Default password for gitlab-runner user account when using a shell executor
【3】.修改 gitlab runner 默认用户 (gitlab-runner) 为 root 修改 /etc/systemd/system/gitlab-runner.service
【4】.让gitlab-runner直接用root运行脚本…这样就不受权限的烦闹
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。