如何在GitLab CI中动态配置cache.key或定义动态流水线变量?
关于GitLab CI动态配置cache:key的问题解答
直接在cache:key字段内写条件判断的写法是否支持
不支持,GitLab CI的YAML配置本身不识别这种内联的条件表达式,直接这么写会被当成普通字符串解析,不会执行判断逻辑。
直接在variables块写条件生成变量再赋值给cache:key的写法是否支持
也不支持,全局variables块不支持直接写条件判断逻辑,无法通过这种方式动态生成变量值。
正确的动态生成cache:key的实现方式
可以通过workflow.rules或者job.rules的variables字段动态定义缓存key变量,规则匹配时会自动覆盖默认的变量值,示例如下:
# 先定义缓存key的默认值,对应非MR流水线的场景 variables: CACHE_KEY: "PUSH_$CI_COMMIT_REF_NAME_CACHE" # 缓存配置直接引用变量即可 cache: key: $CACHE_KEY paths: # 替换为你实际需要缓存的路径 - node_modules/ - .m2/ # 全局流水线规则,动态修改CACHE_KEY的值 workflow: rules: # 匹配MR事件时,覆盖为MR场景的缓存key - if: $CI_PIPELINE_SOURCE == 'merge_request_event' variables: # 注意:你原配置里的CI_MERGE_REQUEST_TRAGET_BRANCH_NAME是拼写错误,正确为TARGET CACHE_KEY: "MR_$CI_MERGE_REQUEST_TARGET_BRANCH_NAME_CACHE" # 其余流水线场景走默认的CACHE_KEY值 - when: always
如果只需要给单个job配置动态缓存key,也可以把rules写在对应的job配置下,逻辑和上面的全局配置一致。
内容的提问来源于stack exchange,提问作者Laser42
相关产品推荐
相关产品推荐

