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

这篇具有很好参考价值的文章主要介绍了翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

序言

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

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

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

1. 拉取子模块

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

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

如下所示是ci的配置:

variables:
  GIT_SUBMODULE_STRATEGY: normal
  GIT_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
翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南
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:52Z
  token_expires_at = 0001-01-01T00:00:00Z
  tls-ca-file = "/etc/gitlab-runner/git.crt"
  executor = "docker"
  [runners.cache]
    MaxUploadedArchiveSize = 0
  [runners.docker]
    tls_verify = false
    image = "maven:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/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.git
	url = ../abc.git
	branch = 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-pack
   redirect: 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流水线任务疑难之编译有子模块的项目指南

我们在gitlab内导航到配置页面(仓库页面的设置 > CI/CD),
翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南
在输入框内填入项目名称,然后点击 增加项目,就可以给予权限了。

什么,添加不上去!!!

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

某项目是: 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'

结语

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

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

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

👓都收藏了,还在乎一个评论吗?文章来源地址https://www.toymoban.com/news/detail-500163.html

到了这里,关于翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线

    本文来自: 杨洪丽 极狐GitLab 高级网站可靠性工程师(SRE) 只使用极狐GitLab 存放代码? 那你就 OUT 啦! 如果你也遇到了如图 A / B / C / D 各位同学的烦恼,不要错过这篇能够让你日常工作更高效的内容。 关于 A 和 B 同学的烦恼,可以使用  Webhook 触发 Pipeline ,打通工作消息通知

    2024年02月04日
    浏览(51)
  • 使用 Jenkins、Gitlab、Harbor、Helm、k8s 来实现流水线作业

    使用 Jenkins、Gitlab、Harbor、Helm、Kubernetes 来实现一个完整的持续集成和持续部署的流水线作业 开发人员提交代码到 Gitlab 代码仓库 通过 Gitlab 配置的 Jenkins Webhook 触发 Pipeline 自动构建 Jenkins 触发构建构建任务,根据 Pipeline 脚本定义分步骤构建 先进行代码静态分析,单元测试

    2024年04月27日
    浏览(41)
  • 1.6流水线:流水线、流水线周期、流水线执行时间、流水线吞吐率、流水线加速比

    相关参数计算:流水线执行时间计算、流水线吞吐率、流水线加速比等。 流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均

    2024年02月09日
    浏览(50)
  • 8位加法器的流水线设计(2级流水、四级流水)

    思考:流水线的设计是为了提高频率,在一个耗时比较长的组合逻辑中,加入寄存器, 可以将这个较长的组合逻辑分裂几份,从而提升主频,缺点是增加了寄存器的资源。 二级流水线的加法器的设计思想如下: 在第一个周期完成低四位的加法计算,使用一个四位加法器即可

    2024年02月11日
    浏览(43)
  • jenkins流水线

    1、 二、 三、 四、 五、 六、  

    2024年02月05日
    浏览(53)
  • 云效-流水线(基本教程)

    阿里云效地址: https://accountid-devops.aliyun.com/ 代码在码云, 服务器在腾讯云, 代码是个聚合代码 1. 选择适合自己的模板 2. 创建码云链接 3. 选择代码仓库, 分支即可下一步 4. 部署,主机部署 5. 保存运行(获取打包路径) 6. 完善部署命令 按自己的需求进行填写, 包括打包成docker镜像

    2024年02月09日
    浏览(53)
  • Jenkins的流水线详解

    来源:u.kubeinfo.cn/ozoxBB 什么是流水线 声明式流水线 Jenkinsfile 的使用 jenkins 有 2 种流水线分为 声明式流水线 与 脚本化流水线 ,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。 声明式流水线 在声明式流水线语

    2024年02月11日
    浏览(45)
  • UnityShader(一)渲染流水线

    目录 一、什么是渲染流水线 二、渲染流程的三个概念性阶段 1.应用阶段(Application Stage) 一、准备好场景数据 二、粗粒度剔除 三、设置渲染状态 2.几何阶段(Geometry Stage) 3.光栅化阶段(Rasterizer Stage) 三、CPU和GPU的通信 1.把数据加载到显存中 2.设置渲染状态 3.调用Draw Ca

    2024年02月02日
    浏览(44)
  • 【Jenkins】pipeline流水线

    流水线既能作为任务的本身,也能作为jenkinsfile,使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同事参与进来,同时也可以编辑开发jenkinswebui不能完成的复杂的构建逻辑,作

    2024年02月09日
    浏览(71)
  • Jenkins流水线怎么做?

    问CHAT:Jenkins流水线怎么做? CHAT回复:Jenkins流水线是一种创建、测试和部署应用程序的方法。以下是为Jenkins创建流水线的步骤: 1. 安装Jenkins:首先你需要在你的服务器上安装Jenkins。这个过程可能会根据你的操作系统有所不同。 2. 安装必要的插件:为了使流水线工作,你需

    2024年01月24日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包