如何通过.gitlab-ci.yml变量设置SAST制品expire_in并解决配置报错
GitLab CI SAST制品expire_in变量配置报错解决办法
问题场景
我想通过变量给SAST制品的expire_in设置不同有效期:开发环境(dev)设30天,预发布环境(stage)设永不过期(never)。一开始用了下面的配置:
variables: SAST_EXPIRE_IN: "30 days" sast: stage: pre-build-tests artifacts: expire_in: $SAST_EXPIRE_IN paths: - gl-sast-report.json reports: sast: gl-sast-report.json
提交后直接报错:
jobs:sast:artifacts expire in should be a duration
解决办法
GitLab CI在解析配置时会直接校验expire_in的格式,普通变量插值会被当成字符串,不符合时长格式要求,试试这几种方案:
方案1:用引用模板+环境变量(推荐)
把不同环境的有效期定义成模板,结合环境变量动态取值:
sast: stage: pre-build-tests artifacts: expire_in: !reference [.sast_expire_in, $CI_ENVIRONMENT_NAME] paths: - gl-sast-report.json reports: sast: gl-sast-report.json # 定义不同环境的有效期模板 .sast_expire_in: dev: "30 days" stage: never
方案2:通过rules分支设置
针对不同环境单独指定expire_in:
sast: stage: pre-build-tests artifacts: paths: - gl-sast-report.json reports: sast: gl-sast-report.json rules: - if: '$CI_ENVIRONMENT_NAME == "dev"' artifacts: expire_in: "30 days" - if: '$CI_ENVIRONMENT_NAME == "stage"' artifacts: expire_in: never
方案3:开启变量的expand属性
如果想保留变量定义的方式,需要给变量加上expand: true,让GitLab在解析时把变量值当成合法的时长格式处理:
variables: SAST_EXPIRE_IN: value: "30 days" expand: true sast: stage: pre-build-tests artifacts: expire_in: $SAST_EXPIRE_IN paths: - gl-sast-report.json reports: sast: gl-sast-report.json
注意:如果要设置never,对应环境的变量值要直接写never(不要加引号),不然还是会被识别成字符串报错。
内容的提问来源于stack exchange,提问作者Ayesh Nipun
相关产品推荐
相关产品推荐

