You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 09:10:16