美文网首页人生几何?
6. 流水线和工件

6. 流水线和工件

作者: shark_tear | 来源:发表于2021-08-31 22:42 被阅读0次

缓存是任务下载和保存的一个或多个文件,随后的任务可以直接使用这部分文件,用以加快执行速度。而工件也是任务执行过程中保存下来的文件。

缓存和工件的区别

缓存一般是用于依赖,像从网上下载下来的依赖包。缓存一般是存储在runner所在的机器上(如果是容器方式,则会新开一个容器,专门用来存放缓存数据),如果开启了分布式缓存技术,还能够存放到s3存储上。

而工件则一般是用来保存不同阶段构建时生成的一些中间文件,是由任务生成,保存在gitlab所在主机上,可以在gitlab页面的GUI 流水线里下载。(保存在什么位置还不知道)

缓存和工件都会定义相对于项目根目录的文件路径,并且都不能链接到项目外部的文件。

缓存的保存位置

所有任务里里定义的缓存都打包到一个cache.zip文件里。runner配置会定义在哪里存储这个文件。默认情况下,缓存是存储在runner安装机器上,而位置也会根据执行器(executor)的不同而不同,具体的情况如下所示:

runner执行器类型 缓存的路径
shell(linux主机类型) 本地目录,在gitlab-runner用户的家目录:/home/gitlab-runner/cache/<user>/<project>/<cache-key>/cache.zip.
Docker (容器类型) Docker卷下,路径是:/var/lib/docker/volumes/<volume-id>/_data/<user>/<project>/<cache-key>/cache.zip
Docker主机(自动扩展runner,例如k8s) 和Docker一样

如果缓存和工件都使用了同一个目录,那么缓存可能会覆盖工件的内容,因为缓存更先存储。

缓存打包和解压是怎么执行的?

下面是两个不同阶段的任务示例:

stages:
  - build
  - test

before_script:
  - echo "Hello"

job A:
  stage: build
  script:
    - mkdir vendor/
    - echo "build" > vendor/hello.txt
  cache:
    key: build-cache
    paths:
      - vendor/
  after_script:
    - echo "World"

job B:
  stage: test
  script:
    - cat vendor/hello.txt
  cache:
    key: build-cache
    paths:
      - vendor/

如果在一个机器上安装了一个runner,那么你项目里的所有任务都会运行在相同的主机上,任务执行流程是:

  1. 流水线执行
  2. job A开始运行
  3. 执行before_script脚本
  4. 执行script脚本
  5. 执行after_script脚本
  6. cache部分运行,vendor/目录会被打包压缩到cache.zip,这个文件然后会被保存到上面说到的目录下(根据执行器和cache: key的不同而不同)
  7. job B运行
  8. 缓存解压(如果根据cache: key在对应目录下找到了)
  9. before_script脚本执行
  10. script脚本执行
  11. 流水线结束。

缓存的清除

Runner会使用缓存来加速任务的执行,因为它可以复用数据,但是有时候会导致一些不一致的问题,因此需要清除缓存。有两种方式:

1. 修改cache:key来清除缓存

在.gitlab-ci.yml文件里修改cache: key的值,下一次流水线运行时,缓存就会存储在不同的位置(旧的缓存是否会被清除,待验证)

2. 手动清除缓存

在Gitlab的web界面,按下面流程执行:

  • 在顶部,选择Menu->Projects,找到你的项目
  • 在左侧边栏,点击CI/CD->Pipelines页
  • 在右上方,点击Clear runner caches

下一次提交代码的时候,你的CI/CD任务会使用一个新的缓存。

相关文章

  • 6. 流水线和工件

    缓存是任务下载和保存的一个或多个文件,随后的任务可以直接使用这部分文件,用以加快执行速度。而工件也是任务执行过程中...

  • 喷漆流水线工程工艺布置

    喷涂流水线也称涂装流水线,指对金属和非金属表面覆盖保护层或装饰层的专用流水线工具。 涂装流水线设备适用于工件表面的...

  • 【朋友圈诗选】48小时生活

    《48小时生活》易舍 只消将建筑降维解构成 动态非线性流水线 工件 只消将建筑功能分区 拆分成空间 模块 只消快速...

  • 基于POX交叉的遗传算法求解流水车间调度(J-Shop)问题一

    对于流水车间调度问题,n个工件在m台设备上加工,已知每个工件每个工序使用的机器和每个工件每个工序所用时间,通过决策...

  • Scrum 术语

    Scrum 工件 Scrum 的工件以不同的方式表现工作任务和价值,可以用来提供透明以及检视和适应的机会。Scru...

  • 我在青海打工

    从异乡奔赴异乡犹如一枚锈蚀的钉子没有声响,就楔入了滚滚的流水线一只只焊接牢固的工件坚守的位置,好多年不变灵巧的机器...

  • 服务工件的不可变性

    不可变工件封装了尽可能多的服务依赖项,这使得开发者可以最大限度地确信,在整个部署流水线中,测试所使用的包与部署到生...

  • 加工中出现工件变形、有夹伤、尺寸不稳定,怎么办?

    软爪能最大程度的保证工件的重复定位精度 使加工工件的中心线能和主轴的中心线完全重合 软爪上的平坦面也能保证工件的长...

  • 旧编译工件 AndroidX 编译工件

    https://developer.android.com/jetpack/androidx/migrate/ar...

  • 电火花加工到底是咋回事,你真的懂吗?

    电火花加工是在液体介质中进行的,机床的自动进给调节装置使工件和工具电极之间保持适当的放电间隙,当工具电极和工件之间...

网友评论

    本文标题:6. 流水线和工件

    本文链接:https://www.haomeiwen.com/subject/fiytwltx.html