天行健,君子以自强不息;地势坤,君子以厚德载物。
每个人都有惰性,但不断学习是好好生活的根本,共勉!
文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。
Gitlab Runner作为一个开源的项目,使用Go语言编写,可运行在不同系统重
Gitlab Runner用于运行作业并将结果发给gitlab服务器
Gitlab Runner与Gitlab CI结合使用,Gitlab CI是gitlab的开源持续集成服务,用于协调作业
Gitlab Runner的版本安装时应注意与Gitlab版本尽量同步以防版本差异导致报错
Gitlab Runner包含三种类型,分别对应三种不同情况(或者说是作用范围)
Shared:共享类型,运行整个平台的项目的作业(gitlab)
Group:项目组类型,运行特定group下的所有项目的作业(group)
Specific:项目类型,运行指定的项目作业(project)
不同的类型有对应的token,可到对应的位置获取
区别在于左上角的名称不一样,平台-Admin Area,组-组名,项目-项目名称
平台Runner
组Runner
项目Runner
这里可以看到gitlab的url和token
本篇在平台类型注册runner,即 使用平台类型的token进行注册runner
Gitlab Runner有两种状态,locked和paused
locked:无法运行项目作业
paused:不会运行作业
gitlab-runner注册到gitlab,gitlab中的代码更新时gitlab就会通知gitlab-runner
gitlab-runner拉取本地最新代码后执行.gitlab-ci.yaml文件定义的脚本,具体的脚本可参考官网
gitlab-runner支持多种部署方式,如本地Windows部署、容器Docker中部署、K8S集群中以pod形式部署
本篇尝试以docker容器部署及k8s集群中部署
gitlab-runner可以选择以什么执行器来运行,如docker、kubernetes、shell等
在注册时可以选择一种执行器来指定,本篇以docker为例
注:以下说明只针对建立group组且未授权root权限的用户
由于gitlab账号并不是管理员权限,仅对group具备maintainer权限,所以gitlab-runner使用group作为绑定方式
绑定关系:gitlab–gitlab-runner–创建pod运行gitlab-runner中的stages
但是,我们安装gitlab后,使用的账号为root权限,没有权限限制,故,此步骤省略无需绑定
注:为避免注册失败或后续runner不可用,gitlab-runner与gitlab最好不要安装在相同的服务器
如果只是测试环境,可在同一台进行尝试,遇到问题再解决,一般不会出问题
本篇gitlab服务在woker2节点,runner安装的位置为master主节点
系统版本:Linux—centos
docker版本:24.0.7
gitlab版本:gitlab/gitlab-ce:15.6.0-ce.0
gitlab-runner版本:gitlab-runner:v15.6.0
注:gitlab-runner的版本号和gitlab的略有差异,runner的版本需加v前缀方可使用
为了挂载runner的配置文件,我们先创建一个文件夹用于后续挂载使用
mkdir -p /data/gitlab-runner/config
拉取gitlab-runner镜像,尽量与gitlab版本保持一致
docker pull gitlab/gitlab-runner:v15.6.0
运行容器
docker run -itd --restart always --name gitlab-runner \
-v /data/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:v15.6.0
查看运行的容器
docker ps | grep gitlab
进入容器查看查看版本
docker exec -it gitlab-runner bash
gitlab-runner -v
在gitlab的平台Runner中找到对应的URL地址和Token复制准备好,以备后续注册使用
主菜单–Admin–Runner
如图将其复制下来
RuUyXm9kDKxRLkeeCLXv
可通过gitlab-runner register命令进行交互式注册,也可通过命令行一次性将参数配置进行注册
首先进入容器,如果当前就在容器内可省略,gitlab-runner为容器名
docker exec -it gitlab-runner
在容器中输入注册指令
gitlab-runner register
或者直接在进入容器的命令后面加上注册指令可直接进入并开始注册
docker exec -it gitlab-runner gitlab-runner register
注:如果直接食用注册命令报错
ERROR: Registering runner... failed runner=RuUyXm9k status=couldn't execute POST against http://172.30.0.222/api/v4/runners: Post "http://172.30.0.222/api/v4/runners": dial tcp 172.30.0.222:80: connect: connection refused
可尝试后缀加入–clt
根据提示填写gitlab的URL地址,确保容器能够访问到该地址
此IP地址就是gitlab服务的地址,如我的gitlab服务器地址为172.30.0.224
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://172.30.0.222/
根据提示填写runner的Token,我们之前复制的是平台类型的共享型token,粘贴到这里
Enter the registration token:
RuUyXm9kDKxRLkeeCLXv
根据提示填写Runner的描述信息,也就是runner的名称,此处填gr01,会在Gitlab界面显示并可修改,可不填
Enter a description for the runner:
[5befda15d9b2]: gr01
根据提示填写Runner的Tag信息,会在Gitlab的界面显示并可修改,可不填
后续作业可通过tag指定在哪个runner上面运行构建
Enter tags for the runner (comma-separated):
01
根据提示填写用户权限备注,可不填
Enter optional maintenance note for the runner:
root
根据提示选择Runner使用的执行器种类并填写,建议docker
docker
根据提示填写docker镜像版本来运行job(可在.gitlab-ci.yml中修改需要的image)
docker:latest
执行完以上内容即可生成一个runner的配置文件,位置为/etc/gitlab-runner/config.toml
由于我们创建runner
容器时挂载了目录,该文件会同步出现在我们创建的本地挂载目录中/data/gitlab-runner/config/config.toml
gitlab-runner restart
gitlab-runner list
注册失败
ERROR: Registering runner... failed runner=RuUyXm9k status=couldn't execute POST against http://172.30.0.222/api/v4/runners: Post "http://172.30.0.222/api/v4/runners": dial tcp 172.30.0.222:80: connect: connection refused
PANIC: Failed to register the runner.
原因:
创建gitlab服务的时候使用的是自注册的证书,在gitlab-runner节点无法识别,将gitlab上的证书下载到gitlab-runner节点,并在注册时执行命令
gitlab-runner register --tls-ca-file 证书路径
除了上面的提示信息进行填充参数注册,也可使用一次性参数填充注册
docker exec -it 容器名 /bin/bash
在容器中执行以下命令即可完成注册,如果在容器外,需添加–non-interacitive,下方已加,如已进入容器可省略此参数
gitlab-runner register \
--non-interactive \
--url "http://ip:30021" \
--registration-token "xxxxxxxx" \
--executor "docker" \
--docker-image maven:latest \
--description "runner-test01" \
--tag-list "runner-test" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
token和url需要在gitlab的runner界面获取
executor是执行器,表示runner中pipeline以什么方式运行,支持多种类型的执行器
docker-image表示runner中pipeline以哪个镜像为基础来执行executor
tag-list表示runner的tag,后续作业可通过tag指定在哪个runner上面运行构建
runner注册成功后会出现在gitlab的CICD界面
生成的配置文件config.toml中的参数解释如下
concurrent =1 #可并行运行作业的数量,0表示无限制
check_interval = 0 #检查新作业的时间间隔,0表示默认3秒
[session_server] #允许用户与作业交互
session_timeout = 1800
[[runners]]
name = "my runner" #Runner名称
url = "http://ip/" #gitlab server地址
token = "asdfjasldkjtelsjsdfl" #Runner Token
executor = "docker" #Runner的执行器,表示runner中pipeline以什么方式运行,支持多种类型的执行器
[runners.custom_build_dir] #允许用户为作业定义自定义构建目录
[runners.cache] #分布式缓存目录
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
配置runner是通过修改此配置文件,文件修改后不需要重启,每隔五分钟(也有说三秒的)gitlab-runner会检查配置是否修改并重新加载
注册完成后runner为锁定状态,需要使用时可右边点编辑然后锁定到当前项目取消勾选,将运行未标记的作业勾选即可运行
gitlab-runner命令汇总
默认交互模式下使用即在容器内使用,非交互模式需添加–non-interactive
gitlab-runner register
列举保存在配置文件中的所有运行程序
gitlab-runner list
检查注册的runner是否可以正常连接,不能验证gitlab服务是否在使用runner
gitlab-runner verify
取消已注册的runner
gitlab-runner unregister
使用令牌注销已注册的runner
gitlab-runner unregister --url http://gitlab.xxxx.com/ --token xxxxx
使用名称注销,同名则删除第一个
gitlab-runner unregister --name runner名称
直接注销所有runner
gitlab-runner unregister --all-runners
如何使用Runner来进行项目代码的打包等作业
首先需要有一个项目代码,然后再项目代码根目录需要有一个.gitlab-ci.yml文件用来定义CICD流程
主要是这个.gitlab-ci.yml文件
模拟:
项目代码就一个文件index.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CICD测试title>
head>
<body>
<h1>Gitlab CICD 测试!!!h1>
body>
html>
.gitlab-ci.yml
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job1:
stage: test
script:
- echo "This job tests something"
test-job2:
stage: test
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
deploy-prod:
stage: deploy
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
build阶段启动一个作业,输出一段文本,test阶段并行启动两个作业,分别输出一段文本,deploy阶段启动一个作业,输出一段文本,三个阶段模拟构建、测试、部署流程
将项目推送到gitlab后,后续任意提交内容都可触发流水线执行,当然也可以手动执行,项目中的CICD,选择运行流水线即可执行
同样的,在项目的根目录中创建一个.gitlab-ci.yml文件并填充内容
stages:
- maven
- build
- deploy
maven_job:
stage: maven
tags:
- default
only:
- master
script:
- echo "This is the first maven job"
build_job:
stage: build
tags:
- default
only:
- master
script:
- echo "This is the first build job"
deploy_job:
stage: deploy
tags:
- default
only:
- master
script:
- echo "This is the first deploy job"
https://blog.csdn.net/yejingtao703/article/details/83065591
https://blog.csdn.net/zyy247796143/article/details/123842374
系统版本:Linux—centos
集群版本:k8s–1.23.0
docker版本:24.0.7
gitlab版本:gitlab/gitlab-ce:14.0.0-ce.0
gitlab-runner版本:gitlab-runner:14.0.1-ce.0
安装方式有多种
https://www.jianshu.com/p/fd00a9cc87ef
https://zhuanlan.zhihu.com/p/441581000
https://blog.csdn.net/yejingtao703/article/details/83065591
https://blog.csdn.net/zyy247796143/article/details/123842374
https://zhuanlan.zhihu.com/p/630393918
https://blog.csdn.net/qq_37084490/article/details/126478452
https://www.jianshu.com/p/0ca2174e34ad
https://www.cnblogs.com/tcy1/p/16320660.html
感谢阅读,祝君暴富!