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

OPA是否支持单独检查规则?GitLab CI/CD集成OPA规则配置问询

OPA集成GitLab CI/CD实现独立规则评估与失败退出

不需要将所有规则合并为单一父规则,通过OPA CLI的两种方式即可实现你的需求:输出每条规则的true/false结果,同时在存在失败规则时返回非零退出码。

方法一:扩展Rego规则收集状态并统一校验

在你的rules.rego中添加两个辅助规则:一个用于收集所有规则的结果,另一个用于判断是否全部通过:

package play.terraform

passing_rule{
  1 = 1
}

failing_rule{
  1 = 0
}

# 收集所有规则的执行结果
rule_results := {
    "passing_rule": passing_rule,
    "failing_rule": failing_rule,
}

# 校验所有规则是否都为true
all_passed {
    all r in rule_results { r == true }
}

执行以下命令:

opa eval 'data.play.terraform.rule_results; data.play.terraform.all_passed' --data rules.rego --fail
  • 输出会包含每条规则的true/false状态,以及all_passed的整体结果;
  • 当存在false/undefined的规则时,all_passed会求值为false,触发--fail选项让OPA返回非零退出码,符合GitLab CI的失败判定逻辑。

方法二:使用OPA Test命令验证规则

创建测试文件rules_test.rego,为每个规则编写预期为true的测试用例:

package play.terraform

test_passing_rule {
    passing_rule
}

test_failing_rule {
    failing_rule
}

执行测试命令:

opa test rules.rego rules_test.rego --format=json
  • 命令会输出每个测试用例的通过/失败状态;
  • 只要有一个测试失败(对应原规则为false/undefined),OPA就会返回非零退出码;
  • --format=json参数可让输出结构化,方便GitLab CI后续处理。

原命令无效的原因

你之前执行的opa eval 'data.play.terraform' --data rules.rego --fail,查询的是整个包的对象。由于包中存在passing_rule: true,整个表达式的求值结果是一个非空对象,并非false或undefined,因此--fail选项不会触发,OPA返回退出码0。

内容的提问来源于stack exchange,提问作者kini_dot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:02:41