配置git runner

想法: 其实gitlab-runner 和 jenkins 是一样的作用,那么它也只是一个单独的 用来 build 项目的服务器,所以为了操作方便就不使用Docker 镜像来安装
gitlab-runner 的工作能力
  1. 它只是用来执行脚本、调度、协调的工作能力,类似安装环境这种是不是它应该做的
  2. 因为gitlab-runner 账户没有太多的权限,所以项目依赖的环境是我在服务器上使用root账户进行安装的
  3. 网上有很多文章说改变 gitlab-runner账户的权限改为root权限; 这个我已经试过了即使改了也是不被允许的gitlab-runner的组必须是 gitlab-runner❌993:
  4. 所以要记住,不要让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

  1. 安装一个与 GitLab CI 兼容的 Runner (如需了解更多的安装信息,请查看 GitLab Runner)
  2. 在 Runner 设置时指定以下 URL: http://git.dev-share.top/
  3. 在安装过程中使用以下注册令牌: 96JQ25HHmmC6n9Ez9Qzf
  4. 启动 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 脚本

前置条件:

  1. gitlab-runner 与 k8s-master 安装在同一台主机
  2. k8s-master 只有 root权限才可以使用 kubectl 命令
  3. 希望使用 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的时候没有给任务指定标签,或者指定的标签不存在而导致的