GitLab CI/CD 基础入门 Runner注册配置使用

article/2025/10/15 4:19:12

特点


  • 开源: CI/CD是开源GitLab社区版和专有GitLab企业版的一部分。(极狐)
  • 易于学习: 官方具有详细的学习操作文档。
  • 无缝集成: CI/CD是GitLab的一部分,支持从计划到部署,具有出色的用户体验。
  • 可扩展: 可以根据需要添加任意数量的构建节点。(从架构上有gitlab server和gitlab runner,类似于slave构建节点)
  • 更快的结果: 每个构建可以拆分为多个作业,这些作业可以在多台计算机上并行运行。
  • 针对交付进行了优化: 多个阶段,手动部署, 环境和变量。

点开一个项目就可以看到流水线的CI/CD管道信息,包含了流水线的状态,流水线的ID,后面就是分支,谁触发的,流水线每个步骤的状态。

可以看到gitlab自带了CI/CD的功能,不需要额外的安装。gitlab提供了完整的CI/CD功能,不要额外的安装工具链来实现,如果公司的项目不是特别多,可以使用gitlab,就不需要安装太多的工具链,减少运维成本。

GitLab部署


image.png

版本: 14.0.0

RPM参考文档:https://www.yuque.com/zeyangli/bqsigl/rgdrnw

## 下载镜像
docker pull gitlab/gitlab-ce:14.0.0-ce.0## 创建数据目录
mkdir -p /data/cicd/gitlab/{config,logs,data}
chmod 777 -R /data/cicd/gitlab/## 运行
docker run -d  -p 443:443 -p 80:80 -p 222:22 --name gitlab \
--restart always \
-v /data/cicd/gitlab/config:/etc/gitlab \
-v /data/cicd/gitlab/logs:/var/log/gitlab \
-v /data/cicd/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:14.0.0-ce.0
  •  222端口 ssh协议
  • 80端口 http端口
  • 443端口 https端口

FAQ

[root@zeyang-nuc-service ~]# git clone http://927c154cfffa/devops/demo-hello-service.git
Cloning into 'demo-hello-service'...
fatal: unable to access 'http://927c154cfffa/devops/demo-hello-service.git/': Could not resolve host: 927c154cfffa[root@zeyang-nuc-service ~]# docker ps | grep gitlab
927c154cfffa        gitlab/gitlab-ce:13.10.0-ce.0         "/assets/wrapper"        21 minutes ago      Up 21 minutes (healthy)   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:222->22/tcp   gitlab[root@zeyang-nuc-service ~]#

解决方法

docker exec -it gitlab bashroot@927c154cfffa:/# vi /etc/gitlab/gitlab.rb

root@927c154cfffa:/# gitlab-ctl reconfigure

image.png

GitLab Runner配置管理


gitlab是一个项目,gitlab runner也是一个单独的项目,runner类似于Jenkins的slave节点,也是server去调度,然后分配作业。

  • GitLab Runner是一个开源项目,用于运行作业并将结果发送回GitLab。
  • 与GitLabCI结合使用,GitLabCI是GitLab随附的用于协调作业的开源持续集成服务。
  • GitLab Runner是用Go编写的,可以在Linux,macOS和Windows操作系统上运行。
  • 容器部署需使用最新Docker版本。GitLab Runner需要最少的Docker v1.13.0。
  • GitLab Runner版本应与GitLab版本同步。(避免版本不一致导致差异化)
  • 可以根据需要配置任意数量的Runner。

image.png

建议runner和server是分开的,因为它们安装在一起可能无法工作,而且对server可能产生性能方面的影响,所以分为两台机器去管理。

当你在server上面提交代码的时候,触发ci/cd其实就是在runner上面去运行的。 

GitLab Runner 14.9 下载
https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el8-x86_64/gitlab-runner-14.9.1-1.x86_64.rpmhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el8-x86_64/gitlab-runner-14.9.1-1.x86_64.rpm

gitlab里面有项目组,项目组里面还有project,你可以在group里面注册runner,也可以在project里面注册runner。

如果是每个项目组去管理自己的构建机器,那么注册group类型的就可以了,这样组里面的人都可以使用runner。如果所有的资源都是集中去配置管理的,那么就是去全局注册runner,这就不分什么项目组去使用,所有都可以使用。

类型 

  • shared 共享类型:运行整个平台项目的所有作业(gitlab  点开Menu----》admin)下面可以看到在后台拿到的token基本上都是shared类型的token

  •  group 项目组类型:运行特定group下的所有项目的作业(group)这是注册一个group级别的token,那么就是这个组的runner,不能让其他组去使用(直接去项目下面的CI/CD里面去创建runner)

  •  specific项目类型:运行指定的项目作业(project)

状态

  • locked: 锁定状态,无法运行项目作业
  • paused: 暂停状态,暂时不会接受新的作业

步骤:

  • 安装gitlab-runner工具
  • 使用gitlab-runner工具向GitLab Server注册Runner节点。

 Runner部署包下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7-x86_64/

[root@gitlab-dockerhub ~]# ls
gitlab-runner-14.0.0-1.x86_64.rpm [root@gitlab-dockerhub ~]# rpm -ivh gitlab-runner-14.0.0-1.x86_64.rpm
warning: gitlab-runner-14.0.0-1.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 35dfa027: NOKEY
error: Failed dependencies:git is needed by gitlab-runner-14.0.0-1.x86_64
[root@gitlab-dockerhub ~]# yum install git -y[root@gitlab-dockerhub ~]# rpm -ivh gitlab-runner-14.0.0-1.x86_64.rpm
warning: gitlab-runner-14.0.0-1.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 35dfa027: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...1:gitlab-runner-14.0.0-1           ################################# [100%]
GitLab Runner: creating gitlab-runner...
Home directory skeleton not used
Runtime platform                                    arch=amd64 os=linux pid=7771 revision=3b6f852e version=14.0.0
gitlab-runner: the service is not installed
Runtime platform                                    arch=amd64 os=linux pid=7781 revision=3b6f852e version=14.0.0
gitlab-ci-multi-runner: the service is not installed
Runtime platform                                    arch=amd64 os=linux pid=7811 revision=3b6f852e version=14.0.0
Runtime platform                                    arch=amd64 os=linux pid=7847 revision=3b6f852e version=14.0.0Check and remove all unused containers (both dangling and unreferenced) including volumes.
------------------------------------------------------------------------------------------Total reclaimed space: 0B#/etc/gitlab-runner/config.toml这个为其配置文件
[root@gitlab-dockerhub ~]# ps aux  | grep -v grep | grep runner
root      7857  0.0  0.2 151960 17388 ?        Ssl  10:27   0:00 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner

这个就说明你的runner已经安装好了。 

[root@jenkins ~]# gitlab-runner -v
Version:      13.7.0
Git revision: 943fc252
Git branch:   13-7-stable
GO version:   go1.13.8
Built:        2020-12-21T13:47:06+0000
OS/Arch:      linux/amd64

可以看到是使用gitlab-runner用户启动的,同时是使用/etc/gitlab-runner/config.toml这个作为其配置文件的。

[root@jenkins ~]# ps -ef | grep runner
root      13227      1  0 14:42 ?        00:00:00 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner

工作目录

[root@jenkins ~]# cd /home/gitlab-runner/
[root@jenkins gitlab-runner]# ls

 

Runner注册配置使用


  1. 获取GitLab地址和Runner 注册token(和Jenkins类似,下载一个通用的jar包,然后传不同都没密钥信息,就可以启动不同的slave)现在要去找gitlab的token

1ssCE2ri76RiinkMGKgj

注册的时候有一系列的命令,注册的过程是一个交互的过程,需要填一些信息

gitlab url地址-----》token-----》备注,也就是描述信息

标签信息就像Jenkins一样

[root@gitlab-dockerhub ~]# cat /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0[session_server]session_timeout = 1800[root@gitlab-dockerhub ~]# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=22183 revision=3b6f852e version=14.0.0
Running in system-mode.                            Enter the GitLab instance URL (for example, https://gitlab.com/):
http://139.198.166.235:81   
Enter the registration token:
1ssCE2ri76RiinkMGKgj
Enter a description for the runner:
[gitlab-dockerhub]: devops01
Enter tags for the runner (comma-separated):
build,k8sbuild,go,java
Registering runner... succeeded                     runner=1ssCE2ri
Enter an executor: docker-ssh, virtualbox, docker-ssh+machine, shell, ssh, docker+machine, kubernetes, custom, docker, parallels:

runner执行器有很多种类型,这次注册的是shell类型的。

Enter an executor: docker+machine, virtualbox, docker-ssh+machine, custom, docker, docker-ssh, parallels, shell, ssh, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

现在还是锁定状态,这样runner就注册好了。后面就要写执行器了,执行器概念和Jenkins类似,运行的作业,执行器就是帮我们去运行作业的,gitlab执行器有很多种,有docker类型如下:

Enter an executor: docker-ssh, virtualbox, docker-ssh+machine, shell, ssh, docker+machine, kubernetes, custom, docker, parallels:
  • docker 类型:这时候来了一个作业,运行在docker类型的runner上面,那么会要你输入就像的ID,比如maven的镜像,这个时候在运行作业的时候,就会以设置的这个镜像起来一个容器,然后在容器里面进行构建
  • shell 类型:执行shell命令
  • kubernetes类型:启动一个pod

 这里选择shell类型执行器

Enter tags for the runner (comma-separated):
build,k8sbuild,go,java
Registering runner... succeeded                     runner=1ssCE2ri
Enter an executor: docker-ssh, virtualbox, docker-ssh+machine, shell, ssh, docker+machine, kubernetes, custom, docker, parallels:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

 可以看到执行器注册好了

[root@gitlab-dockerhub ~]# gitlab-runner list
Runtime platform                                    arch=amd64 os=linux pid=26860 revision=3b6f852e version=14.0.0
Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
devops01                                            Executor=shell Token=Tt2yusRjFFFDPQ87Rvsd URL=http://139.198.166.235:81

查看一下现在的状态

Indicates whether this runner can pick jobs without tags:在运行作业的时候会分配一个标签,这个标签会指定在哪个runner上面执行,但作业没有指定这个标签,如果想让其执行勾选就行了。

 因为是共享类型的runner,那些作业可以使用这个runner可以在这里启用

上面就一个一个runner的注册过程就完成了。

上面是使用交互模式进行配置,使用非交互模式注册(有的时候需要加入很多runner,那么可以写脚本)

gitlab-runner register \--non-interactive \--url "http://192.168.1.200/" \--registration-token "Bd6gzBK5evJqa9wN99Nf" \--executor "shell" \--description "buildrunner" \--tag-list "build,k8s,go" \--run-untagged="true" \--locked="false" \--access-level="not_protected"

如果需要修改gitlab的url

[root@localhost ~]# vim /etc/gitlab/gitlab.rb 
external_url 'http://192.168.11.129'[root@localhost ~]# gitlab-ctl reconfigure

 runner里面有些状态是可以去设置的,

这里有untagged jobs,运行一个作业,这个作业没有去指定runner,也就是这个runner是否能够去运行没有指定runner的作业。

下面是runner的配置文件。 

[root@jenkins ~]# cat /etc/gitlab-runner/config.toml 
concurrent = 1
check_interval = 0[session_server]session_timeout = 1800[[runners]]name = "build runner"url = "http://192.168.11.129/"token = "kjUu3xQuafYXnEy3YRQE"executor = "shell"[runners.custom_build_dir][runners.cache][runners.cache.s3][runners.cache.gcs][runners.cache.azure]

最重要的就是runner可以并行运行作业的数量,并行运行是多个作业同时去运行,如果有多个作业过来了就得排队。可以改大点,0代表不限制。

有些时候提交代码触发ci、cd很慢,取决于你这个时间,它默认是3s检查一次,提交代码最少等3s之后runner才能去运行。所以这里是检查作业的时间间隔,这里使用默认的就可以了。

Jenkins有个workspace,那个目录也可以改,使用node的标签作为自定义的workspace,它也有一个自定义的目录。[runners.custom_build_dir]

同时也支持缓存,这个缓存就是为了帮助我们去加速构建。有分布式缓存和本地缓存。分布式缓存就是多个runner可以使用一个缓存,当你的作业不管调用到哪个runner,都可以快速的去运行。

本地缓存就只能在本地了。

[root@jenkins ~]#  gitlab-runner list
Runtime platform                                    arch=amd64 os=linux pid=17382 revision=943fc252 version=13.7.0
Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
build runner                                        Executor=shell Token=kjUu3xQuafYXnEy3YRQE URL=http://192.168.11.129/[root@jenkins ~]#  gitlab-runner verify
Runtime platform                                    arch=amd64 os=linux pid=17391 revision=943fc252 version=13.7.0
Running in system-mode.                            Verifying runner... is alive                        runner=kjUu3xQu

Runner常用命令


gitlab-runner register  #默认交互模式下使用,非交互模式添加 --non-interactive
gitlab-runner list      #此命令列出了保存在配置文件中的所有运行程序
gitlab-runner verify    #此命令检查注册的runner是否可以连接,但不验证GitLab服务是否正在使用runner。 --delete 删除
gitlab-runner unregister   #该命令使用GitLab取消已注册的runner。#使用令牌注销
gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3n#使用名称注销(同名删除第一个)
gitlab-runner unregister --name test-runner#注销所有
gitlab-runner unregister --all-runners

http://chatgpt.dhexx.cn/article/lPBaQto2.shtml

相关文章

记部署gitlab出现的问题

一、创建gitlab用户时,用户没收到邮件 排除步骤: 使用 gitlab.rb 里面配置的邮件地址向创建 gitlab 用户时配置的邮件地址发送邮件 收件方能正常收到邮件,排除收件方配置了拒收邮件的可能性。使用 gitlab-rails 命令进行测试 gitlab-rails …

Gitlab和gitlab-runner安装和注册

目录 Git和SVN的区别 Gitlab CI/CD工作原理及使用步骤 Gitlab安装 gitlab-runner安装和注册 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。 公司内部一般会在自己的内网进行搭建Gitlab服务管理…

gitlab如何创建用户并登录

为了大家后期能方便创建用户和使用gitlab,先给大家设置为中文 设置为中文后保存然后刷新页面即可设置为中文 接下来教大家怎么创建git用户并进行登录 创建完用户后需要配置一次密码 配置完密码后退出用户测试进行新用户登录 这里用刚创建的新用户来登录 第一次登…

Gitlab-Runner安装并注册

本文介绍Gitlab-Runner的安装运行(包括docker方式安装运行及二进制直接运行),并介绍如何将Gitlab注册到Gitlab。同时还介绍了gitlab-runner的一些常用操作命令。 安装Gitlab-Runner gitlab-runner可以使用docker方式运行,也可以在…

通过docker搭建gitlab

通过docker搭建gitlab 一、安装 拉取docker镜像 docker pull gitlab/gitlab-ce启动容器 docker run -d -p 4443:443 -p 8080:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/dat…

gitlab-runner 注册失败

问题: 用docker启动gitlab-runner,注册runner 时报错:PANIC: Failed to register the runner. You may be having network problems。 不仅如此,我用gitlab-runner verify命令,也是报错:ERROR: Verifying r…

gitlab:(二)gitlab注册用户和邀请进入项目的问题

.新注册用户无法在管理员界面激活 在管理员界面无法进行管理,找不到相关的操作界面 当前gitlab版本 尝试降低gitlab版本 卸载之后删除残留文件 安装指定的低版本:gitlab-ce-12.7.5-ce.0.el7.x86_64.rpm yum install policycoreutils openssh-server op…

注册gitlab-runner

注册gitlab-runner 一、注册gitlab-runner(shared)二、注册gitlab-runner(group)三、注册gitlab-runner(specific) 使用管理员账号登录gitlab 一、注册gitlab-runner(shared) shared类型的gitlab-runner会运行整个gitlab平台项目中的作业; 二、注册gitlab-runne…

gitLab注册There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.

目录 解决方案:第一步:第二步: Gitlab注册时报错:There was an error with the reCAPTCHA. Please solve the reCAPTCHA again. 今天注册时碰到以下问题: 提交后,给出如下图示 上面的错误是因为注册时有一…

gitlab-runner配置与注册

(1)启动gitlab-runner #创建volume docker volume create gitlab-runner-my-config #docker启动runner docker run -d --name gitlab-my-runner --restart always --nethost \-v /var/run/docker.sock:/var/run/docker.sock \-v gitlab-runner-my-conf…

gitLab账号注册,登陆,配置SSH,验证

文章目录 前言注册账号登陆添加SSH验证配置 前言 本文主要目的是讲述gitlab账号注册,登陆功能,以及如何生成ssh key,并添加ssh key到gitlab中。通过git工具将gitlab上的代码拉取到本地来验证ssh功能是否进行了有效的配置 注册账号 第一步&…

Servlet 过滤器( Filter )

Servlet 过滤器( Filter ) 原理图: 过滤器的使用场景 登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换过滤器的优势 便于代码重用,不必每个servlet中还要进行相应的操作配置方式 web配置方式 <!--过滤器的xml配置 --> <filter><!--名称-->…

servlet过滤器中的注解配置详解

文章目录 注解配置WebFilter中的属性1. urlPatterns2. initParams3. dispatcherTypes 多个过滤器的执行顺序销毁阶段的触发机制 注解配置WebFilter中的属性 1. urlPatterns 指定一组过滤器的 URL 匹配模式。等价于 标签。 例1&#xff1a;将所有的请求都过滤掉 配置如果是指定…

Servlet过滤器与SpringMVC拦截器

Servlet API中提供了一个Filter接口&#xff0c;开发web应用时&#xff0c;如果编写的Java类实现了这个接口&#xff0c;则把这个java类称之为过滤器Filter。Web开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静…

JavaWeb Servlet过滤器概述

Servlet过滤器 1、什么是过滤器 Servlet过滤器具有拦截浏览器端请求的功能&#xff0c;Servlet过滤器可以改变请求中的内容来满足实际开发中的需求。 实质上Servlet过滤器就是在web应用服务器中的一个web应用组件&#xff0c;用于拦截浏览器与目标资源的请求&#xff0c;并对…

Servlet+过滤器

一、Servlet 1.1 概念 Servlet&#xff1a;Server Applet的简称&#xff0c;是服务器端的程序&#xff08;代码、功能实现&#xff09;&#xff0c;可交互式的处理客户端发送到服务端的请求&#xff0c;并完成操作响应。动态网页技术JavaWeb程序开发的基础&#xff0c;JavaEE…

java servlet过滤器简解及实例

在整个概念中&#xff0c;个人觉得有一篇文章写得不错&#xff0c;通俗易懂&#xff0c;这里就直接套用以上原博文&#xff0c; 一、概念&#xff1a; Filter也称之为过滤器&#xff0c;它是Servlet技术中比较激动人心的技术&#xff0c;WEB开发人员通过Filter技术&#xff0c;…

Servlet过滤器案例-自动登录

使用过滤器实现自动登录 登录的jsp页面 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head> <title&g…

Servlet过滤器拦截器

文章目录 1、什么是Servlet&#xff1f;2、过滤器与拦截器的区别 1、什么是Servlet&#xff1f; 参考&#xff1a;https://blog.csdn.net/wozaibohaibian/article/details/124778494 ​ servlet就是一个组件,需要符合servlet规范,并且需要部署到servlet容器里面才能运行 注&…

servlet过滤器原理及使用

原理 首先了解什么是过滤器&#xff0c;各种文章已经写的很清楚了 引用来自这篇大牛的博客 是Servlet技术中最激动人心的技术&#xff0c;WEB开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静态 html 文件等进…