码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • gitlab runner 不清理云端已经删除的tag和branch问题记录


    在使用gitlab runner的过程中,发现由于git存储限制,不允许在a/b分支后创建a/b/c的分支。所以移除云端a/b分支后创建a/b/c分支。

    但是由于gitlab runner出于拉取代码的速度考虑,将本地代码路径做了持久化缓存。

    在上述场景中,新建的a/b/c分支触发的pipeline,如果被调度到已经缓存过a/b分支的runner上时,会发生由于本地.git路径中的a/b路径 已经存在,导致a/b/c分支不能创建的问题。

    排查方案如下:

    1. 经调研,gitlab runner在fetch code的场景下默认会增加--prune --quite的参数。同时可以通过GIT_FETCH_EXTRA_FLAGS参数覆盖原本的--prune --quite参数。gitlab-runner 相关代码

     2. 使用默认参数和指定GIT_FETCH_EXTRA_FLAGS=--prune -v两种方式均无法清理runner代码缓存中历史a/b分支

    3. 使用CI_DEBUG_TRACE=true环境变量,打印更多debug日志发现,git fetch实际执行指令为:

    git -c 'http.userAgent=gitlab-runner ${runner version} linux/amd64' fetch origin +refs/heads/${CI_REF_NAME}:refs/remotes/origin/${CI_REF_NAME} +refs/heads/${CI_PIPELINE_ID}:refs/remotes/origin/${CI_PIPELINE_ID} --depth 300 --prune --quiet

    经过排查,在fetch指定特定特殊分支和pipeline的情况下,不会再使用默认fetch的src:dst,

    4. 尝试在GIT_FETCH_EXTRA_FLAGS参数中追加所有分支的ref配置:+refs/heads/*:refs/remotes/origin/*

    Git - git-fetch Documentation

    GIT_FETCH_EXTRA_FLAGS='+refs/heads/*:refs/remotes/origin/* --prune --prune-tags -v'

    5. 使用CI_DEBUG_TRACE=true的环境变量,发现runner中fetch code的命令行已经符合预期使用GIT_FETCH_EXTRA_FLAGS替换原本的--prune --quiet,成功删除runner cach呃中历史的a/b分支,并成功fetch成功a/b/c分支

    6. 验证是否由于gitlab runner版本原因,默认--prune --quiet已经扩展新指令。但从最新release的gitlab runner中,还移除了原本已经上线的prune tag when fetching code的功能。Revert "Prune tags when fetching" (!4300) · Merge requests · GitLab.org / gitlab-runner · GitLab

    考虑到4300的mr中提到的大repo的性能损耗的问题,暂时不开启第5条操作

  • 相关阅读:
    【个人记录 | UNet | 整理ing】
    QT5.13.0编译opencv4.5驱动办法
    echarts的双向柱形图的legend图例不显示的原因是,sereies里的数据,没有写name属性,必须要写,图例才会出现
    Java基础|Java并发相关api
    详解JDK8中新的日期时间工具类,真的很好用
    【CAN】CAN基础概念1
    深入理解JVM虚拟机第四篇:一些常用的JVM虚拟机
    FlinkCDC介绍及使用
    Matlab论文插图绘制模板第115期—带Latex公式的图
    ------构造类型数据—结构体---- + ----函数-----
  • 原文地址:https://blog.csdn.net/rachel_92/article/details/132751758
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号