rust 如何使用缓存和工件加速Gitlab CI作业

fumotvh3  于 2022-12-23  发布在  Git
关注(0)|答案(1)|浏览(281)

我希望我的Rust项目的Gitlab测试作业运行得更快。本地重建速度相当快,但在gitlab作业中,avery build作为第一个运行得很慢。正在寻找一种方法来使用以前管道中的工件或缓存来加快Rust测试和构建过程。

# .gitlab-ci.yml
stages:
  - test

test:
  stage: test
  image: rust:latest
  script:
    - cargo test
d8tt03nd

d8tt03nd1#

Gitlab CI/CD支持使用.gitlab-ci.yml中的cache键的caching between CI jobs,它只能缓存项目目录中的文件,所以如果你还想缓存cargo注册表,你需要使用环境变量CARGO_HOME
您可以在顶层添加一个cache设置,以便为本身没有cache设置的所有作业设置缓存,也可以将其添加到作业定义之下,以便为此类作业设置缓存配置。
有关所有可能的配置选项,请参见关键字参考。
下面是一个示例配置,它缓存货物注册表和临时构建文件,并将clippy作业配置为仅使用该高速缓存,而不写入缓存:

stages:
  - test

cache: &global_cache          # Default cache configuration with YAML variable
                              # `global_cache` pointing to this block

  key: ${CI_COMMIT_REF_SLUG}  # Share cache between all jobs on one branch/tag

  paths:                      # Paths to cache
    - .cargo/bin
    - .cargo/registry/index
    - .cargo/registry/cache
    - target/debug/deps
    - target/debug/build
  policy: pull-push           # All jobs not setup otherwise pull from
                              # and push to the cache

variables:
  CARGO_HOME: ${CI_PROJECT_DIR}/.cargo # Move cargo data into the project
                                       # directory so it can be cached

# ...

test:
  stage: test
  image: rust:latest
  script:
    - cargo test

# only for demonstration, you can remove this block if not needed
clippy:
  stage: test
  image: rust:latest
  script:
    - cargo clippy # ...
  only:
    - master
  needs: []
  cache:
    <<: *global_cache  # Inherit the cache configuration `&global_cache` 
    policy: pull       # But only pull from the cache, don't push changes to it

如果要使用CI中的cargo publish,则应将.cargo添加到.gitignore文件中。否则,cargo publish将显示一个错误,指出项目目录中存在未提交的目录.cargo

相关问题