我正在为文件夹foo/bar/c_code_src
中具有c ++库依赖关系的python项目设置ci / cd。构建阶段运行python setup.py install
并编译c ++库二进制文件并将其输出到foo/bar/bin/
然后我运行一个Python单元测试,如果foo/bar/bin
不存在,它将失败。
下面的脚本是我第一次尝试使用.gitlab-ci.yml
:
stages:
- build
- test
build:
stage: build
script:
- python setup.py install
artifacts:
paths:
- foo/bar/c_code_src
test:
stage: test
dependencies:
- build
script:
- python -m unittest foo/bar/test_bar.py
这能够正常工作,因为编译c_code_src
花费的时间相对较长,并且生成的bin相当大,并且c_code_src
中的代码变化不大,我想能够缓存bin
文件夹以用于将来的管道,并且仅在c_code_src
中的代码更改时运行构建阶段。阅读documentation之后,似乎我想使用cache
代替artifacts
(或与之配合使用)。
这是我修改.gitlab-ci.yml
的尝试:
stages:
- build
- test
build:
stage: build
script:
- python setup.py install
cache:
- key: bar_cache
paths:
- foo/bar/bin
test_bar:
stage: test
dependencies:
- build
cache:
key: bar_cache
paths:
- foo/bar/bin
policy: pull
script:
- python -m unittest foo/bar/test_bar.py
我不确定的是如何设置仅在c_code_src
发生更改时才运行build的条件。
简而言之,我想要:
bin
不存在或c_code_src
发生更改的情况下运行构建bin
,以使测试阶段始终具有最新的bin
,即使构建阶段未运行答案 0 :(得分:0)
不确定您是否会遇到bin
不存在的情况,因为通常情况下,作业条件将查看提交中正在进行的更改,而无需遍历整个存储库代码。 / p>
不过,您可以相当轻松地对作业进行更改检查。您可以使用only:changes或rules:changes。因此,对于相关工作,请添加:
rules:
changes:
- foo/bar/c_code_src/*
关于缓存,您写的内容看起来不错。 Cache isn't always guaranteed to work,但会在必要时提取新版本,因此拥有最新版本应该不是问题。