GitLab CI & GitLab Runner

概念

持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

持续集成的好处

  • 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
  • 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

简介 & 原理

自动部署涉及了若干个角色,主要介绍如下

  • GitLab-CI
    这个是一套配合GitLab使用的持续集成系统,是GitLab自带的,也就是你装GitLab的那台服务器上就带有的。无需多考虑。.gitlab-ci.yml的脚本解析就由它来负责。
  • GitLab-Runner
    这个是脚本执行的承载者,.gitlab-ci.yml的script部分的运行就是由runner来负责的。GitLab-CI浏览过项目里的.gitlab-ci.yml文件之后,根据里面的规则,分配到各个Runner来运行相应的脚本script。这些脚本有的是测试项目用的,有的是部署用的。

GitLab简单原理图

GitLab-CI与GitLab-Runner关系示意图

Runner类型

  • Shared Runner:这种Runner(工人)是所有工程都能够用的。只有系统管理员能够创建Shared Runner
  • Specific Runner:这种Runner(工人)只能为指定的工程服务。拥有该工程访问权限的人都能够为该工程创建Shared Runner

.gitlab-ci.yml

这个是在git项目的根目录下的一个文件,记录了一系列的阶段和执行规则。GitLab-CI在push后会解析它,根据里面的内容调用runner来运行。

安装 GitLab Runner

# https://gitlab.com/gitlab-org/gitlab-runner

# For RHEL/CentOS/Fedora
sudo yum install gitlab-runner

# For RHEL/CentOS/Fedora(找不到再执行这个)
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

注册GitLab Runner

docs:https://docs.gitlab.com/runner/register/index.html

安装好gitlab-ci-multi-runner这个软件之后,我们就可以用它向GitLab-CI注册Runner了。

向GitLab-CI注册一个Runner需要两样东西:GitLab-CI的url注册token。其中,token是为了确定你这个Runner是所有工程都能够使用的Shared Runner还是具体某一个工程才能使用的Specific Runner。

如果要注册Shared Runner,你需要到管理界面的Runners页面里面去找注册token。

如果要注册Specific Runner,你需要到项目的设置的Runner页面里面去找注册token。

# 查看帮助
gitlab-runner register -h

# 手动按提示创建
gitlab-runner register

# 一条命令执行方式
gitlab-runner register \
  --non-interactive \
  --url "https://gitlab.com/" \
  --registration-token "PROJECT_REGISTRATION_TOKEN" \
  --executor "shell" \
  --description "cbs-runner" \
  --tag-list "cbs,autopush" \
  --run-untagged \
  --locked="false" \

执行完成后,我们会在 设置 - CI/CD - Runner 下看到我们注册的Runner

Runners

运行Runner

Runner注册完成之后还不行,还必须让它运行起来,否则它无法接收到GitLab-CI的通知并且执行软件集成脚本。怎么让Runner运行起来呢?

gitlab-runner提供了这样一个命令,你可以通过他来处理。

gitlab-runner run-single --help

编写 .gitlab-ci.yml

stages:
  - pushtonewhope

pushtonewhope:
  stage: pushtonewhope
  script:
    - ./pushtonewhope.sh
  only:
    - cbs
  tags:
    - autopush

将.gitlab-ci.yml放入项目根目录,这样就ok了

There are no comment yet.

HTML tag cannot be used in this comment.