环境安装
升级本机 Git 版本,否则会有异常报错
#安装源 yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm #安装git yum install git #更新git yum update git
下载与安装
下载 gitlab-runner 路径
官方没有明确目录树提供下载,需要自行寻找及输入对应版本号,或直接下载latest
https://gitlab-runner-downloads.s3.amazonaws.com/latest/index.html
下载二进制
cd /usr/local/bin # 指定版本 wget https://s3.amazonaws.com/gitlab-runner-downloads/v14.1.0/binaries/gitlab-runner-linux-amd64 mv gitlab-runner-linux-amd64 gitlab-runner-14.1.0 # 最新版 wget https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
添加可执行权限
chmod +x /usr/local/bin/gitlab-runner-14.1.0
创建 GitLab CI 用户
useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
安装并作为服务运行
# 安装,像系统注册service信息 /usr/local/bin/gitlab-runner-14.1.0 install --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner # 启动 service gitlab-runner start
- 如果希望 gitlab-runner 的工作目录非 /home/gitlab-runner ,可以在 install 时修改 –working-directory 参数。
Debug 模式排错运行
/usr/local/bin/gitlab-runner-14.1.0 --debug run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner
- 此时,已完成gitlab-runner的安装,后续可进行 runner 注册。
注册使用 Gitlab-runner
首先找到自己的gitlab项目下设置,CI/CD,Runner
可以看到如下:
URL,和注册令牌一会在注册runner的时候需要用到,
在自己的runner服务器上,输入如下命令,开始注册runner:
gitlab-runner register
上面这里,红框,填写刚刚上面看到的URL
回车后,输入URL下面的gitlab-ci token
输入完token后,回车
填写runner描述,这里自己填写
之后填写runner的tags,用于在之后CI/CD操作时标识使用哪个runner来进行流水线
之后选择需要以哪种方式运行runner,这里我选择用shell方式运行runner,大家可以自行根据自己需要选择
到此,runner就注册完毕了。可以到gitlab上看下,刚刚注册的runner是否存在
可以看到,这里就是我们刚刚注册的runner。
编写 CI 配置
仓库根目录下,创建
.gitlab-ci.yml
文件cache: paths: - node_modules/ before_script: - sudo npm install hexo-cli -g - sudo npm install pages: script: - /usr/local/node-14.17.5/lib/node_modules/hexo-cli/bin/hexo generate # change private key - sed -i 's/ssh\ -p/ssh\ -i\ \/home\/gitlab-runner\/.ssh\/id_rsa\ -p/g' /home/gitlab-runner/builds/susd9DxR/0/neshomelab/nes_hexo_blog/node_modules/hexo-deployer-rsync/lib/deployer.js - /usr/local/node-14.17.5/lib/node_modules/hexo-cli/bin/hexo deploy artifacts: paths: - public only: - master
此时将该文件推上 gitlab 后,就会触发流水线自动运行
可能遇到的问题
- working-directory没有权限创建目录
解决方法
- 修改working-directory目录权限
chown -R gitlab-runner:gitlab-runner web-gitlab-runner
- Missing /usr/local/bin/gitlab-runner. Uploading artifacts is disabled.
解决方法
- 将 /usr/local/bin/gitlab-runner 所属用户改为 install 传入的 –user 值
chown gitlab-runner:gitlab-runner /usr/local/bin/gitlab-runner
- sudo 执行提示 Command not found
- 在普通用户下运行命令可行,切换到root用户依然可行,但在普通用户下使用sudo执行时,提示Command not found。
# 修改/etc/sudoers文件,找到类似下面的一行:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
# 将要执行的命令所在的目录添加到后面,即可,如:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
- 执行 runner 失败,提示如下
fatal: unable to access 'xxx.git/': Peer reports incompatible or unsupported protocol version.
因为系统中没有相关的库,git协议使用的是强加密有所依赖,因此更新相关服务即可。
# nss为名称解析和认证服务 curl为网络请求库 yum update -y nss curl libcurl
- Gitlab CI 失败,出现 fatal: git fetch-pack: expected shallow list 的错误:
Reinitialized existing Git repository in /home/gitlab-runner/builds/susd9DxR/0/neshomelab/nes_hexo_blog/.git/
fatal: git fetch-pack: expected shallow list
fatal: The remote end hung up unexpectedly
原因是 git 版本太老不持之新 API ,需要升级一下 git 。( 文章刚开始部分 )
- CI任务卡住无法运行,且无日志输出,提示 “job is stuck check runner”
在runner以debug模式运行后,任无监听到任务分发状态
此时需要编辑runner,并勾选 “Run untagged jobs” 即可Checking for jobs... nothing runner=pR7zPsED Feeding runners to channel builds=0 Checking for jobs... nothing runner=pR7zPsED Feeding runners to channel builds=0