【问题标题】:Travis CI cache a single file at a specified locationTravis CI 在指定位置缓存单个文件
【发布时间】:2018-11-02 16:50:33
【问题描述】:

我正在 Travis CI 上构建一个 Ruby 项目,我使用 Gemfile ans Bundler 来管理依赖项。我的.travis.yml 只包含一行关于缓存的内容:

cache: bundler

而我在其他地方依赖这个(Travis 默认的install 命令,缓存目录,在上传缓存前加上一个额外的bundle clean)。

默认情况下,Gemfile.lock 不会被缓存。我想缓存它以使 Bundler 跳过依赖解析并使用缓存的Gemfile.lock。我还没有找到有效的解决方案。

有什么想法吗?

【问题讨论】:

    标签: caching bundler travis-ci


    【解决方案1】:

    来自Travis' cacher implementation的AFAICS,

    • 如果您在cache: directories: 下指定文件名而不是目录名,它将起作用。1

    有一个警告:

    • 最初,当没有缓存时(因此文件还不存在),缓存恢复步骤将创建一个具有此名称的空目录
      • 您需要在构建的早期手动检测并删除此目录

    示例.travis.yml(使用 evvar 作为文件路径以避免到处重复):

    env:
      global:
        - FILE=<path>
    cache:
      directories:
        - $FILE
    before_install:
      - if [[ -d $FILE ]]; then rm -rf "$FILE"; fi
    
    # create and/or use the file
    

    1那是因为他们使用tar 来制作和提取缓存档案,而tar 不在乎你是否将文件或目录传递给它

    【讨论】:

      【解决方案2】:

      我注意到this question 下的唯一评论并想出了一个想法,但我认为这更像是一种解决方法而不是解决方案。

      before_install 阶段复制Gemfile.lock 来自 /tmp/cached。在before_script 阶段复制Gemfile.lock /tmp/cached。这样它就会被 Travis CI 缓存,而缓存会被 Bundler 使用。

      我仍在寻找真正的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-07
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-23
        相关资源
        最近更新 更多