1. 前言

构建任务都会占用很多的系统资源,GitLab CIGitLab的一部分,如果由GitLab CI来运行构建任务的话,在执行构建任务的时候,GitLab的性能会大幅下降。

GitLab CI最大的作用是管理各个项目的构建状态,因此,运行构建任务这种浪费资源的事情就交给GitLab Runner来做。

GitLab Runner最好安装到单独的linux机器上,在构建任务运行期间并不会影响到GitLab的性能。

GitLab Runner 10中,名称从GitLab ci multi Runner变为GitLab Runner。如果想要了解GitLab ci multi Runner可查看https://docs.gitlab.com/runner/install/old.html

2. 安装Docker

如果要使用Docker executor,需要在GitLab Runner之前安装Docker。如果不使用此步骤可跳过。

curl -sSl https://get.docker.com/ | sh

3. 安装 gitlab ci runner

官方文档:GitLab Runner(https://docs.gitlab.com/runner/install/linux-repository.html)

GitLab Runner其实是将某台服务器,注册成为GitLab CI的任务执行单元,用于在CI过程中,执行相应的任。

Gitlab CIRunner并没有什么严格的要求,可以是一台linux实体机,也可以是个Docker容器。

针对不同的Runner,可以在注册时划分不同的固有角色(https://docs.gitlab.com/runner/executors/index.html),以及打上不同的自定义标签,以便于GitLab CI在调度时灵活分配任务,多个Runner并行执行任务等等。

GitLab针对免费用户,提供了每个月2000分钟的免费构建时间,在不超过这个时间时,可以直接使用GitLab提供的共享Runner。但是使用别人的服务器来进行构建任务,总是会暴露一些敏感信息出去,所以自建GitLab Runner,就是最佳选择了。

# 添加yum源
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
sudo yum install gitlab-runner
# 查看列表
yum list gitlab-runner --showduplicates | sort -r
# 安装10.0.0-1
sudo yum install gitlab-runner-10.0.0-1
gitlab-runner status

4. 注册

注册将runner与一个或多个GitLab实例绑定的过程,实例是指整个gitlabgroup组某个仓库

通过重复执行register命令,可以在同一台主机上注册多个运行程序,每个运行程序具有不同的配置。也就是可以生成多个runner

sudo gitlab-runner register

1. Please enter the gitlab-ci coordinator URL

输入要注册的gitlab网站的地址,必须是http或者https路径。可以是域名也可以是ip

2. Please enter the gitlab-ci token for this runner

输入token,可以是具体某个工程的token,也可以是某个组的token或者整个gitlabtoken

3. Please enter the gitlab-ci description for this runner

输入runner的描述信息,随便填写或者不填写都可以,主要用于标识。

4. Please enter the gitlab-ci tags for this runner

runner指派tags,之后可以在Gitlab网页的setting上修改, 这里的tags就是yml文件中指定的tags

5. Whether to run untagged builds

选择runner是否接收未指定tags的任务。

5. Whether to lock Runner to current project:

选择是否为当前项目锁定该 Runner,默认false,直接回车就可以。

6. Please enter the executor

选择runner类型,包括多种,可以是docker,也可以是shell,根据自己的需要进行选择。(docker-ssh, shell, ssh, virtualbox, docker+machine, custom, parallels, docker-ssh+machine, kubernetes, docker)这里我们选择的是shell。选择docker之后需要下一步配置这个runner默认的根镜像

7. Please enter the default Docker image (e.g. ruby:2.6):

选择docker之后,需要配置这个runner默认的根镜像, 默认是ruby

4. 设置docker权限

为了能让gitlab-runner正确的执行docker命令,需要把gitlab-runner用户添加到docker group里,然后重启dockergitlab ci runner

# 添加
usermod -aG docker gitlab-runner
# 重启
service docker restart
# 重启
gitlab-runner restart

5. 执行ci/cd

pipelines是一个构件的过程,想要使用的话需要在项目中有一个有一个.gitlab-ci.yml文件。

如下这个文件里面定义了两个阶段buildtesttestbuild里面的script就是脚本命令。

# 定义stages
stages:
    - build
    - test
# 定义job
job1:
    stage: test
    script:
        - echo "I am job1"
        - echo "I am in test stage"
# 定义job
job2:
    stage: build
    script:
        - echo "I am job2"
        - echo "I am in build stage"

这个时候pipelines菜单可是一个pending状态,还需要给任务添加docker容器,在job里面添加tags,在tags里面指定容器的名字。这里的tags就是上面指定的tag。

# 定义stages
stages:
    - build
    - test
# 定义job
job1:
    stage: test
    tags:
        - demo
    script:
        - echo "I am job1"
        - echo "I am in test stage"
# 定义job
job2:
    stage: build
    tags:
        - demo
    script:
        - echo "I am job2"
        - echo "I am in build stage"

这里的stage是有状态的,而且会按顺序执行,前面如果失败后面就不会继续执行了。

6. 修改host

确保两台机器可以ping通,gitlab-runner会通过gitlab.example.com域名访问gitlab-ci,如无域名可通过修改host完成。

vi  /etc/hosts

# 192.168.xx.xx gitlab.example.com

7. 更新gitlab runner

sudo yum update
sudo yum install gitlab-runner

8. 设置官方镜像源

cat <<EOF | sudo tee /etc/apt/preferences.d/pin-gitlab-runner.pref
Explanation: Prefer GitLab provided packages over the Debian native ones
Package: gitlab-runner
Pin: origin packages.gitlab.com
Pin-Priority: 1001
EOF

转载须知

如转载必须标明文章出处文章名称文章作者,格式如下:

转自:【致前端 - zhiqianduan.com】 gitlab-runner搭建和使用  "隐冬"
请输入评论...