CI/CD 之 gitlab-runner 注册执行器与踩坑

前言

上一篇已经讲了 gitlab-runner 的部署方法,这一篇我们来讲一下如何注册 gitlab-runner 执行器并创建作业

一、添加 .gitlab-ci.yml 配置文件

在需要注册 CI/CD 的项目中,增加一个 .gitlab-ci.yml 的配置文件

基本模板配置如下:

stages:
  - build
  - test
  - deploy

build-job:
  stage: build
  script:
    - echo "Compiling the code..."
    - echo "Compile complete."

unit-test-job:
  stage: test
  script:
    - echo "Running unit tests... This will take about 60 seconds."
    - sleep 60
    - echo "Code coverage is 90%"

lint-test-job:
  stage: test
  script:
    - echo "Linting code... This will take about 10 seconds."
    - sleep 10
    - echo "No lint issues found."

deploy-job:
  stage: deploy
  script:
    - echo "Deploying application..."
    - echo "Application successfully deployed."

二、为项目注册 Runner

1. 打开 gitlab 中的需要注册 Runner 的项目

进入 设置 - CI/CD -Runner : 拿到 URL 和 token

2. 在部署 gitlab-runner 的服务器上执行注册指令

gitlab-runner register

  • 配置步骤详解
# 在gitlab的组或项目中的设置-cicd-runner或获取:GitLab 地址
Enter the GitLab instance URL (for example, https://gitlab.com/): 
> 输入gitlab的服务URL

# 输入 GitLab Token
Enter the registration token: 
> 输入令牌,参考图中绿色部分所示

# 输入 Runner 的描述
Enter a description for the runner: 
> 这里的描述也是 runner 的名称

# 设置 Tag,可以用于指定在构建规定的 tag 时触发 ci
Enter tags for the runner (comma-separated)
> test

# 输入可选维护说明
Enter optional maintenance note for the runner: 
> runner 的描述内容,随便写

# 选择 runner 执行器,通常选择 shell
Enter an executor: docker+machine, docker-ssh+machine, custom, docker-windows, docker-ssh, ssh, kubernetes, docker, parallels, shell, virtualbox:
> shell

# 回车结束,安装gitlab-runner文件夹下会自动生成config.toml

三、为项目添加执行器

1. runner 注册成功后返回仓库

  • 此时页面会新增一条可用的指定 Runner
  • 如果此时指示灯是绿色则表示正常

2. 修改设置

  • 点击编辑按钮
  • 选中 运行未标记的作业
  • 确认 启用、未标记的作业、锁定到当前项目都被选中后保存修改

如果不选中 运行未标记的作业, CI/CD 任务会一直被阻塞挂起

此时,即可运行 CI/CD 的作业了。

四、常见问题

1. git clone 地址不正确

这是因为 gitlab 私服部署时会默认使用主机名作为地址

这里需要修改 gitlab URL 的配置,重启后即可生效

2. git clone 连接超时

这里需要检查 gitlab 私服配置的 DNS / IP 地址 / 端口号 是否和外网请求地址一致

这里将上面的 git 仓库地址在浏览器上看看是否能直接打开,即可确认是否是地址有问题

3. 未找到 xxx 命令

这是因为所使用的命令在 runner 服务器上不存在,如:java , node , npm , maven 等

在部署 gitlab-runner 的服务器中安装好开发环境即可。

4. 权限不足

这是因为 gitlab-runner 安装时默认将用户设置为: gitlab-runner

该设置会使编写的 .gitlab-ci.yml 脚本在命令上受到权限限制问题.

  • 可以通过对 gitlab-runner 用户授权 sudo 的方式解决,但是还会有一个问题,就是需要启动服务时显性指定 gitlab-runner 用户,否则 CI/CD 任务不会执行,会一直处队列中
  • 避免麻烦,这里选择使用将 root 用户作为 gitlab-runner 的执行用户

  1. 查看gitlab-runner进程:ps aux | grep gitlab-runner

    可以查看到 gitlab-runner 的工作目录和默认用户等一系列相关信息。

  2. 卸载 gitlab-runner 默认用户:gitlab-runner uninstall

  3. 将用户设置为root:gitlab-runner install --working-directory /home/gitlab-runner --user roott

  4. 重启服务:gitlab-runner restart

  5. 再次查看gitlab-runner进程:ps aux | grep gitlab-runner

5. docker 中自动化部署build报错

  1. 检查 docker 是否已经启动
systemctl status docker
  1. 如果 docker 已启动可能是没有权限导致的,给 docker.sock 增加执行权限
sudo chmod 777 /var/run/docker.sock

6. docker apline temporary error (try again later) 错误

这是因为没有 DNS 导致的

在本机系统上创建daemon文件添加dns,然后重启docker

vim /etc/docker/daemon.json
{
"dns": ["8.8.8.8"]
}
sudo service docker restart

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/403314.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python笔记-设计模式】桥接模式

一、说明 桥接模式是一种结构型设计模式, 主要用于将抽象部分与它的实现部分分离, 从而能在开发时分别使用,使系统更加灵活,易于扩展。 (一) 解决问题 所有 组合类的数量将以几何级数增长 抽象和实现分离:桥接模式可…

音视频技术-声反馈啸叫的产生与消除

目录 1.均衡调节: 2.移频法: 3.移相法: 4.比较法: 在扩音系统中,产生啸叫危害很大,一方面影响会议、演出等活动的正常进行,另一方面严重的啸叫会导致音响设备的损坏。 “啸叫”是“声反馈”的俗称,形成的机制复杂,消除的手段多样,专业调音师也对

Spring Boot中实现列表数据导出为Excel文件

点击下载《Spring Boot中实现列表数据导出为Excel文件》 1. 前言 本文将详细介绍在Spring Boot框架中如何将列表数据导出为Excel文件。我们将通过Apache POI库来实现这一功能,并解释其背后的原理、提供完整的流程和步骤,以及带有详细注释的代码示例。最…

【笔记】深度学习入门:基于Python的理论与实现(二)

神经网络的学习(神经网络的学习阶段,不是我们学习神经网络) 从数据中学习 训练数据和测试数据 机器学习中,一般将数据分为训练数据和测试数据两部分来进行学习和 实验等。首先,使用训练数据进行学习,寻找最…

wondows10用Electron打包threejs的项目记录

背景 电脑是用的mac,安装了parallels desktop ,想用electron 想同时打包出 苹果版本和windows版本。因为是在虚拟机里安装,它常被我重装,所以记录一下打包的整个过程。另外就是node生态太活跃,几个依赖没记录具体版本&#xff0…

软考29-上午题-【数据结构】-排序

一、排序的基本概念 1-1、稳定性 稳定性指的是相同的数据所在的位置经过排序后是否发生变化。若是排序后,次序不变,则是稳定的。 1-2、归位 每一趟排序能确定一个元素的最终位置。 1-3、内部排序 排序记录全部存放在内存中进行排序的过程。 1-4、外部…

六.生成makefile文件 并基于makefile文件编译opencv

1.点击【Generate】 生成makefile文件 2.进入目录下编译opencv源码,mingw32-make -j 8 3..编译出现报错 4.取消[WITH_OPENCL_D3D11_NV]选项,再次【configure】【generate】 然后再次编译:mingw32-make -j 8

缓存篇—缓存雪崩

什么是缓存雪崩 通常我们为了保证缓存中的数据与数据库中的数据一致性,会给 Redis 里的数据设置过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,业务系统需要重新生成缓存,因此就会访问数据库,并…

【结合OpenAI官方文档】解决Chatgpt的API接口请求速率限制

OpenAI API接口请求速率限制 速率限制以五种方式衡量:RPM(每分钟请求数)、RPD(每天请求数)、TPM(每分钟令牌数)、TPD(每天令牌数)和IPM(每分钟图像数&#x…

1.CSS单位总结

CSS 单位总结 经典真题 px 和 em 的区别 CSS 中的哪些单位 首先,在 CSS 中,单位分为两大类,绝对长度单位和相对长度单位。 绝对长度单位 我们先来说这个,绝对长度单位最好理解,和我们现实生活中是一样的。在我们…

基于SSH打通隧道实现异地组网

前言 最近有异地组网的需求,我目前的是用蒲公英X1盒子来进行组网,但是蒲公英X1非会员账号有设备限制3个(这个是硬伤),虽然说可以打通P2P但是在复杂的网络环境下概率不是特别高 所以研究下SSH异地组网的方式&#xff…

《图解HTTP》笔记2:http的构成

1,查看浏览器上面一个具体的http请求 浏览器地址栏输入网址:https://news.baidu.com/ 使用浏览器的开发者工具,查看网络中发送和接受的数据。 可以看到输入一个网址,浏览器和服务器进行了很多的交互。(绿色部分&#…

Docker容器故障排查与解决方案

Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息: 1、通过docker run执行命令,或许返回信息 2、通过docker logs 去获取日志,做有针对性的筛选 3、通过systemctl status docker查看docker服务状态 4、通过…

详细分析Python中的unittest测试框架

目录 1. 基本知识2. API2.1 断言2.2 setUp() 和 tearDown() 3. Demo 1. 基本知识 unittest 是 Python 标准库中的一个单元测试框架,用于编写和执行测试用例以验证代码的正确性 提供了一种结构化的方法来编写测试,使得测试代码更加模块化和易于维护 以…

【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理(中)

↑↑↑↑接上一篇继续部署↑↑↑↑ 目录 一、k8s集群的三种接口 二、k8s的三种网络模式 1、pod内容器之间的通信 2、同一个node节点中pod之间通信 3、不同的node节点的pod之间通信 Overlay Network VXLAN 三、flannel网络插件 1、flannel插件模式之UDP模式&#xff0…

在 Windows 上使用 VC++ 编译 OpenSSL 源码的步骤

在 Windows 上使用 VC 编译 OpenSSL 源码的步骤如下: 准备工作 安装 Visual Studio 2017 或更高版本。安装 Perl 脚本解释器。安装 NASM 汇编器。 编译步骤 下载 OpenSSL 源码。解压 OpenSSL 源码。打开命令行工具,并进入 OpenSSL 源码目录。运行以下…

核密度分析

一.算法介绍 核密度估计(Kernel Density Estimation)是一种用于估计数据分布的非参数统计方法。它可以用于多种目的和应用,包括: 数据可视化:核密度估计可以用来绘制平滑的密度曲线或热力图,从而直观地表…

[HTML]Web前端开发技术27(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

C++力扣题目 647--回文子串 516--最长回文子序列

647. 回文子串 力扣题目链接(opens new window) 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 示例 1: 输入&#xff1a…

Velocity

引入 <dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version> </dependency> 加载 Test public void velo01() throws IOException {// 设置velocity资…