• GitLab CI/CD关键词(三):制品artifacts,缓存cache


    转载自:https://cloud.tencent.com/developer/article/1978769

    简介

    本篇文章将讲解制品artifacts与缓存cache二个关键词。二个关键词都可以将流水线中的文件存储起来,但区别点也很多。

    制品artifacts

    使用artifacts关键词可以将当前作业的一些文件存储起来,可以存储文件夹和文件列表。并且用户可以选择在作业失败,成功时或者总是存储文件。使用artifacts储存的文件将会被上传到gitlab,开发者可以在gitlab上在线预览他们。存储后的文件将会在下一个阶段自动恢复到当前的工作目录。开发者也可以自由配置恢复哪些制品,不恢复哪些制品。被恢复的制品,存放的位置与以前一致。

    下面看一个简单的例子

    MalzaharJob:
      script: echo 'The man who has made up his mind to win will never say “impossible”.'
      artifacts:
        paths:
          - dist/
          - target/
    

    在该例子中,在作业下使用artifacts来存储一些文件夹,文件或文件夹的路径都是通过paths参数来指定的。除了使用paths配置文件路径,文件夹路径外, 在artifacts下,有不少配置项,下面为大家逐个介绍。

    artifacts:exclude 排除文件

    使用exclude参数可以排查一些文件不放到制品中。如

    MalzaharJob:
      script: echo 'The man who has made up his mind to win will never say “impossible”.'
      artifacts:
        paths:
          - dist/
          - target/
        exclude:
          - target/**/*.o
    

    使用exclude来排查tagret目录下的以 .o 结尾的文件。 这些文件不会被上传到gitlab。

    artifacts:expire_in 过期时间

    上传到gitlab 的制品可以设置过期时间,过期后将无法获取,自动清理。

    在gitlab中即使设置了过期时间,最新的作业制品也不会被清理,这是一种防护手段,此外还有流水线制品,这里一般特指测试报告等。

    expire_in的值支持的有很多,以下几种格式都是支持的。如果没有单位,默认的单位为秒.

    '42'
    42 seconds
    3 mins 4 sec
    2 hrs 20 min
    2h20min
    6 mos 1 day
    47 yrs 6 mos and 4d
    3 weeks and 2 days
    never
    

    如果没有设置一个作业制品的过期时间,那么将默认使用 管理员配置的制品存储时间,30天,gitlab超管可以修改它。 参考网址:https://www.cnblogs.com/sanduzxcvbnm/p/15207203.html

    artifacts:expose_as 展示在MR上的名称

    使用expose_as可以定义在合并请求时要显示的制品名称。

    test:
      script: ["echo 'test' > file.txt"]
      artifacts:
        expose_as: 'artifact 1'
        paths: ['file.txt']
    

    注意: artifacts:paths中使用了CI/CD变量,制品将不会显示在UI上。

    一个合并请求最多只能暴露10个作业制品, 全局模式下不支持artifacts:expose_as, 如果开启了gitlab page,一些类型的单个文件可以直接显示在页面上。

    artifacts:name 制品名称

    开发者可以指定制品的名称,默认为artifacts。下载后文件名为 artifacts.zip。可以使用变量。

    build:
      artifacts:
        name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
        paths:
          - binaries/
    

    artifacts:paths 制品文件路径

    指定制品中文件的路径。路径必须是当前项目路径的相对路径,不能直接指定外部路径。可以使用通配符。

    build:
      artifacts:
        name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
        paths:
          - dist/
    

    artifacts:public 是否公共可见

    使用artifacts:public可以配置制品是否可以被外界访问,下载。

    在独自部署的gitlab上,该属性是默认关闭的,但超管可以在管理页面开启。在 gitlab.com上,是没有该属性的。

    当artifacts:public的值为true时,默认就是为true,这意味着作业的制品可以别任何人,访客下载。如果不想被其他人看到,可以是设置为false

    build:
      artifacts:
        name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
        paths:
          - dist/
        public: false
    

    artifacts:reports 收集报告

    artifacts:reports 配置可以收集一些使用include关键词引入的模板 的作业制品。制品类型有这些功能是付费版本才有的。

    artifacts:untracked 上传被git 忽略的文件

    使用artifacts:untracked可以上传一些被git忽略的文件。这些文件被添加到了.gitignore列表中。值为 false(默认),或者true。

    job:
      artifacts:
        untracked: true
        paths:
          - dist/
    

    这里会将dist中所有文件上传到制品库,即使dist目录中有被git忽略的文件。

    artifacts:when 何时上传制品

    artifacts:when 用于配置制品上传的时机,有三种选择,

    • on_success 作业成功时上传,默认。
    • on_failure 作业运行失败时上传,
    • always 总是上传。可以用于收集一些错误日志。 如果作业超时,则不会上传。

    缓存cache

    缓存cache的设计是为了存储流水线和作业之间的一些公用文件,比如node_modules。缓存将在制品之前恢复到当前工作目录。下面是一个使用缓存的例子,cache可以使用default关键词来定义全局的缓存。

    install:
      script: npm install
      cache:
        paths:
          - node_modules
    

    需要缓存的文件使用paths来指定路径。缓存后在下一个作业中自动恢复到当前的工作目录(如果找到相同key的缓存)。
    gitlab默认是本地缓存,要使用分布式缓存需要配置gitlab runner的配置文件。参考网站:https://www.cnblogs.com/sanduzxcvbnm/p/16375526.html

    cache:paths 文件路径

    cache:paths 用于配置要缓存的文件路径。与artifacts:paths一样,路径必须是当前项目目录的相对路径,也可以使用通配符。

    rspec:
      script:
        - echo "This job uses a cache."
      cache:
        key: binaries-cache
        paths:
          - binaries/*.apk
          - .config
    

    cache:key 缓存唯一标识key

    当前环境是否使用缓存,根据缓存的key来决定。如果有相同的key则恢复以前的缓存,如果缓存的key不同则不恢复。cache:key可以是一个字符串,也可以使用变量,或者变量加字符串。

    cache-job:
      script:
        - echo "This job uses a cache."
      cache:
        key: binaries-cache-$CI_COMMIT_REF_SLUG
        paths:
          - binaries/
    

    一些细节:

    • 如果你用的是Windows Batch,来运行你的脚本,你需要使用 % 替换 $ 例如key: %CI_COMMIT_REF_SLUG%, 此外key的值不能包含 / ,如果需要请使用%2F 替换。不能单独使用 . 如果需要请使用%2E.
    • 默认的cache:key为default。

    cache: key:files 使用文件设置key

    cache: key的值可以指定一个文件列表,在生成key时,这些文件会被转化为一个hash值,当文件改变了,hash值也会跟着变。这样就实现了缓存依赖一些文件的变动而变动,如果一些文件没有变动,则一直使用之前的缓存。

    cache-job:
      script:
        - echo "This job uses a cache."
      cache:
        key:
          files:
            - Gemfile.lock
            - package.json
        paths:
          - vendor/ruby
          - node_modules
    

    cache: key:prefix key的前缀

    设置key的前缀

    rspec:
      script:
        - echo "This rspec job uses a cache."
      cache:
        key:
          files:
            - Gemfile.lock
          prefix: $CI_JOB_NAME
        paths:
          - vendor/ruby
    

    cache:untracked缓存被git忽略的文件

    使用cache:untracked可以缓存所有被git忽略的文件。 默认值false,可以设置为true

    rspec:
      script: test
      cache:
        untracked: true
    

    cache:when 何时缓存

    cahce:when 可以配置何时进行缓存

    • on_success (默认): 只有当作业运行成功时保存缓存
    • on_failure: 仅仅当作业失败后保存缓存
    • always: 总是保存缓存

    cache:policy 缓存上传,下载的策略

    cache:policy 用于配置缓存的上传,下载策略,在一些作业下,只需要拉取缓存,在作业结束时不需要上传缓存。 这个时候就可以配置cache:policy。

    值有三个:

    • pull 在作业开始时拉取缓存
    • push 在作业结束时上传缓存
    • pull-push 默认 拉取缓存,上传缓存
    prepare-dependencies-job:
      stage: build
      cache:
        key: gems
        paths:
          - vendor/bundle
      policy: push  script:
          - echo "This job only downloads dependencies and builds the cache."
          - echo "Downloading dependencies..."
    

    注意如果要在某个作业上禁用缓存 可以设置 cache: []

  • 相关阅读:
    win10 uwp 获得缩略图
    win10 uwp 获取指定的文件 AQS
    win10 uwp 使用 Geometry resources 在 xaml
    WPF 如何画出1像素的线
    Windows 10 快捷键汇总表格
    要让CLR挂掉的话……
    UWP 分享用那个图标
    UWP 分享用那个图标
    PHP jdtogregorian() 函数
    PHP jdtojewish() 函数
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/16377227.html
Copyright © 2020-2023  润新知