翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南

本文主要是介绍翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!
  • 📢本文作者:由webmote 原创
  • 📢作者格言:新的征程,我们面对的不是技术而是人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !

序言

当格陵兰岛的雪山上还在漫天飞雪时,我已经安静的坐在空调房里,吹起了冰爽的风。为了满足组内的代码仓库实时编译的需求,我不得不部署了N个gitlab runner,来实现代码的编译工作。

当然编译代码是个很简单的事情,只需要我们了解我们的代码类型,然后选择适合他们的编译命令即可。

而难住我的不是这个,而是子模块的下载。

1. 拉取子模块

在这里插入图片描述

什么是git子模块?
子模块就是允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。为了拉取子模块,我们需要在流水线里配置子模块相关的变量即可,主要是.gitmodules文件,具体内容可以参考第三节。

如下所示是ci的配置:

variables:GIT_SUBMODULE_STRATEGY: normalGIT_SUBMODULE_DEPTH: 1

这样的配置,就是在告诉Gitlab的runner,在拉取代码时,顺便拉取下子模块。

2. 自签名问题

碰到的第一个问题就是因为我采用了https方式部署的gitlab,而签名证书使用的是自签名证书,那反馈的问题也是自签名不识别。

Synchronizing submodule url for 'apiserver'
Cloning into 'E:/GitLab-Runner/builds/BXnNsKsZ/0/apiserver'...
fatal: unable to access 'https://192.168.1.185/apiserver.git/': SSL certificate problem: self signed certificate

要解决自签名,我们需要登录到runner运行的服务器,配置证书。
这里分两种情况:windows runner 和 docker runner

2.1 windows runner

1.在Git Bash 窗口,键入 git config –list
查看证书地址,找Http.sslcainfo
在这里插入图片描述
2.增加git证书到这个证书内

$ cat d:/WorkSpace/git.crt >> "d:/Program Files (x86)/Git/mingw64/ssl/certs/ca-bundle.crt"

注意: d:/WorkSpace/git.crt 是我的证书放的位置,你更换成你的地址即可。

2.2 docker下的runner

docker下运行runner,一般会映射一个配置目录,如下

docker run -d --name gitlab-runner2 --restart always   -v /home/gitrunner/config2:/etc/gitlab-runner   -v /var/run/docker.sock:/var/run/docker.sock   runnerwithcert:latest

如果是这样,就可以修改config.toml文件了。

$ cat config.toml
# 以下是文件内容
concurrent = 1
check_interval = 0
shutdown_timeout = 0[session_server]session_timeout = 1800[[runners]]name = "runner"url = "https://192.168.1.185/"id = 3  token_obtained_at = 2023-03-16T06:48:52Ztoken_expires_at = 0001-01-01T00:00:00Ztls-ca-file = "/etc/gitlab-runner/git.crt"executor = "docker"[runners.cache]MaxUploadedArchiveSize = 0[runners.docker]tls_verify = falseimage = "maven:latest"privileged = falsedisable_entrypoint_overwrite = falseoom_kill_disable = falsedisable_cache = falsevolumes = ["/cache"]shm_size = 0

这里,主要增加配置项 tls-ca-file 和 tls_verify = false。

3. 配置子模块为相对位置

经过这些操作后,依然会有错误,那么这里主要是认证错误,如下:

fatal: could not read Username for 'https://192.168.1.185': No such device or address

这里需要考虑子模块配置修改为相对路径。
修改。gitmodules 文件代码如下:

[submodule "src/views/abc"]path = src/views/abc# url = https://192.168.1.185/abc.giturl = ../abc.gitbranch = main

依据仓库的位置,修改url为合适的相对路径。

如果出现类似这样的错误,大概率是路径设置错了。

fatal: unable to update url base from redirection:asked for: https://gitlab-ci-token:[MASKED]@192.168.1.185/abc.git/info/refs?service=git-upload-packredirect: https://192.168.1.185/users/sign_in

4. 增加拉取子模块的权限

虽然我们配置了上述步骤,依然在ci运行后得到了错误,这个时候就是考研耐心的时候,我们还有重要的一步需要去做。
对照错误如下:

remote: The project you were looking for could not be found or you don't have permission to view it.

因为ci使用 gitlab-ci-token进行拉取仓库,因此必须给予权限才能拉取到子模块。

在这里插入图片描述

我们在gitlab内导航到配置页面(仓库页面的设置 > CI/CD),
在这里插入图片描述
在输入框内填入项目名称,然后点击 增加项目,就可以给予权限了。

什么,添加不上去!!!

这个地址是有格式要求的,哎,就是项目顶端的导航,例如:

某项目是: A> B> C>d
那么我们就输入: A\B\C\d 就可以了。注意不要有空格,有空格也不认识。

再次运行ci,如果能看到如下内容,就配置成功了!

Updating/initializing submodules with git depth set to 1...
Synchronizing submodule url for 'abc'
Entering 'abc'

结语

反正自己走过的弯路,就不希望其他人再走了,技术分享就是这么纯粹!

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?

这篇关于翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/webmote/article/details/131325843
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/394772

相关文章

Redis指南及6.2.x版本安装过程

《Redis指南及6.2.x版本安装过程》Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSIC语言编写、支持网络、... 目录概述Redis特点Redis应用场景缓存缓存分布式会话分布式锁社交网络最新列表Redis各版本介绍旧

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Nacos日志与Raft的数据清理指南

《Nacos日志与Raft的数据清理指南》随着运行时间的增长,Nacos的日志文件(logs/)和Raft持久化数据(data/protocol/raft/)可能会占用大量磁盘空间,影响系统稳定性,本... 目录引言1. Nacos 日志文件(logs/ 目录)清理1.1 日志文件的作用1.2 是否可以删除

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

GitLab文件的上传与下载方式

《GitLab文件的上传与下载方式》:本文主要介绍GitLab文件的上传与下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录GitLab 项目拉取到本地GitLab 项目上传方法方法 1:本地项目未初始化Git方法 2:本地项目已初始化GitGitLab 上

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

Python FastAPI实现JWT校验的完整指南

《PythonFastAPI实现JWT校验的完整指南》在现代Web开发中,构建安全的API接口是开发者必须面对的核心挑战之一,本文将深入探讨如何基于FastAPI实现JWT(JSONWebToken... 目录一、JWT认证的核心原理二、项目初始化与环境配置三、安全密码处理机制四、JWT令牌的生成与验证五、

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录