配置git runner
想法: 其实gitlab-runner 和 jenkins 是一样的作用,那么它也只是一个单独的 用来 build 项目的服务器,所以为了操作方便就不使用Docker 镜像来安装
gitlab-runner 的工作能力
- 它只是用来执行脚本、调度、协调的工作能力,类似安装环境这种是不是它应该做的
- 因为gitlab-runner 账户没有太多的权限,所以项目依赖的环境是我在服务器上使用root账户进行安装的
- 网上有很多文章说改变 gitlab-runner账户的权限改为root权限; 这个我已经试过了即使改了也是不被允许的gitlab-runner的组必须是 gitlab-runner❌993:
- 所以要记住,不要让gitlab-runner去安装环境或依赖,它只负责执行脚本
安装 gitlab-runner (不使用 Docker 镜像安装,不好控制)
[root@k8s-master ~]# curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
[root@k8s-master ~]#
[root@k8s-master ~]# yum install gitlab-runner
[root@k8s-master ~]#
[root@k8s-master ~]# gitlab-runner -v
Version: 9.5.1
Git revision: 96b34cc
Git branch: 9-5-stable
GO version: go1.8.3
Built: Wed, 04 Oct 2017 16:26:27 +0000
OS/Arch: linux/amd64
[root@k8s-master ~]#
注册 gitlab-runner
导航 > 管理区域(扳手图标) > Runners
- 安装一个与 GitLab CI 兼容的 Runner (如需了解更多的安装信息,请查看 GitLab Runner)
- 在 Runner 设置时指定以下 URL: http://git.dev-share.top/
- 在安装过程中使用以下注册令牌: 96JQ25HHmmC6n9Ez9Qzf
- 启动 Runner!
[root@k8s-master ~]# gitlab-runner register
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://git.dev-share.top/
Please enter the gitlab-ci token for this runner:
96JQ25HHmmC6n9Ez9Qzf
Please enter the gitlab-ci description for this runner:
[k8s-master]:
Please enter the gitlab-ci tags for this runner (comma separated):
tag-nodejs
Whether to run untagged builds [true/false]:
[false]: true
Whether to lock Runner to current project [true/false]:
[false]: true
Registering runner... succeeded runner=96JQ25HH
# 注意这个 选择要应用的模板
Please enter the executor: shell, kubernetes, parallels, ssh, virtualbox, docker+machine, docker-ssh+machine, docker, docker-ssh:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
[root@k8s-master ~]#
将 .gitlab-ci.yml
文件加入到项目的根目录,Runner它会去读取这里面的配置
需求:whois项目是一个使用Node.js开发的服务器用来查询域名的,因此必须需要有node.js环境才能运行
配置 .gitlab-ci.yml
# 创建一个名为pages的任务
pages:
# 要执行的脚本
script:
# 初始化Node.js项目的依赖
- cnpm i
# 执行脚本
- sudo /home/gitlab-runner/kubectl-get-pods.sh
# 告诉 Runner 这个名为pages的任务,只在master分支上执行
only:
- master
# GitLab CI有三个默认阶段:构建(build)、测试(test)、部署(deploy)。
# 告诉 Runner 这个名为pages的任务,只在测试阶段执行
stage: deploy
# 告诉 Runner 我们应用哪个标签
tags:
- tag-nodejs
# 创建一个名为test的任务
test:
# 要执行的脚本
script:
- cnpm i
# 告诉 Runner 告诉它测试除master分支之外的其他分支的每次推送
except:
- master
# GitLab CI有三个默认阶段:构建(build)、测试(test)、部署(deploy)。
# 告诉 Runner 这个名为test的任务,只在测试阶段执行
stage: test
# 告诉 Runner 我们应用哪个标签。 如果不写会报错:(此作业被卡住,因为没有任何该项目指定标签的 runner 在线)
tags:
- tag-nodejs
在gitlab-runner 中执行 .sh 脚本
前置条件:
- gitlab-runner 与 k8s-master 安装在同一台主机
- k8s-master 只有 root权限才可以使用 kubectl 命令
- 希望使用 gitlab-runner用户来执行 kubectl 命令来操作 k8s-master
# 在root用户下为 gitlab-runner用户做 sudo免密
[root@k8s-master ~]# visudo
# 改变 Defaults !visiblepw
Defaults visiblepw
# 追加 用户免密
gitlab-runner ALL=(ALL) NOPASSWD:ALL
# 在gitlab-runner用户下编写脚本
[gitlab-runner@k8s-master ~]$ pwd
/home/gitlab-runner
[gitlab-runner@k8s-master ~]$
# 编写测试脚本
[gitlab-runner@k8s-master ~]$ cat <<EOF > kubectl-get-pods.sh
#!/bin/bash
kubectl get pods -A -o wide
EOF
# 授权
[gitlab-runner@k8s-master ~]$ chmod -R 777 kubectl-get-pods.sh
[gitlab-runner@k8s-master ~]$ ll
total 8
drwxrwxr-x 3 gitlab-runner gitlab-runner 4096 Jun 5 16:10 builds
-rwxrwxrwx 1 gitlab-runner gitlab-runner 40 Jun 5 17:22 kubectl-get-pods.sh
[gitlab-runner@k8s-master ~]$
gitlab-runner 常用命令
[root@k8s-master ~]# gitlab-runner status
gitlab-runner: Service is running!
[root@k8s-master ~]# gitlab-runner stop
[root@k8s-master ~]# gitlab-runner status
gitlab-runner: Service is not running.
[root@k8s-master ~]# gitlab-runner start
[root@k8s-master ~]# gitlab-runner status
gitlab-runner: Service is running!
[root@k8s-master ~]#
常用问题及解决方法
此作业被卡住,因为没有任何该项目指定标签的 runner 在线
这个原因就是在创建 .gitlab-ci.yml的时候没有给任务指定标签,或者指定的标签不存在而导致的