利用Gitlab-runner实现自动部署


环境安装

  • 升级本机 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 后,就会触发流水线自动运行


可能遇到的问题

  1. working-directory没有权限创建目录
  • 解决方法

    • 修改working-directory目录权限
    chown -R gitlab-runner:gitlab-runner web-gitlab-runner
  1. 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
  1. 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  
  1. 执行 runner 失败,提示如下
fatal: unable to access 'xxx.git/': Peer reports incompatible or unsupported protocol version.
  • 因为系统中没有相关的库,git协议使用的是强加密有所依赖,因此更新相关服务即可。

    # nss为名称解析和认证服务 curl为网络请求库
    yum update -y nss curl libcurl
  1. 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 。( 文章刚开始部分 )

  1. CI任务卡住无法运行,且无日志输出,提示 “job is stuck check runner”
    在runner以debug模式运行后,任无监听到任务分发状态
    Checking for jobs... nothing                        runner=pR7zPsED
    Feeding runners to channel                          builds=0
    Checking for jobs... nothing                        runner=pR7zPsED
    Feeding runners to channel                          builds=0
    此时需要编辑runner,并勾选 “Run untagged jobs” 即可

文章作者: NesTeaLin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 NesTeaLin !
  目录