GitLab密钥检测流水线未按预期失败问题求助
解决GitLab密钥检测流水线不失败的问题
你遇到的问题有两个核心原因:
after_script里的bash语法完全错误,变量赋值写法不符合规范- GitLab默认情况下,
after_script的退出码不会影响job的最终状态,哪怕你在里面执行exit 1,job仍会按照之前script阶段的执行结果标记状态
推荐解决方案:使用官方自带变量控制失败
GitLab的Secret Detection模板已经内置了控制失败的变量,无需自行编写检测脚本,直接在secret_detection的variables中添加配置即可:
include: - template: Jobs/Secret-Detection.gitlab-ci.yml secret_detection: variables: SECRET_DETECTION_HISTORIC_SCAN: "true" SECRET_DETECTION_IMAGE_SUFFIX: "-fips" SECRET_DETECTION_FAIL_ON_SECRET: "true" # 新增该行,检测到密钥时直接让job失败
这个变量会让Secret Detection job在发现密钥时自动返回非零退出码,流水线直接标记失败,从而阻止提交上线。
若需自定义检测逻辑(不推荐)
如果因特殊需求必须自行扫描报告,需做两处修改:
- 将检测逻辑从
after_script移到script阶段(只有script的退出码会决定job状态) - 修正bash语法错误
修改后的配置示例:
include: - template: Jobs/Secret-Detection.gitlab-ci.yml secret_detection: variables: SECRET_DETECTION_HISTORIC_SCAN: "true" SECRET_DETECTION_IMAGE_SUFFIX: "-fips" script: - # 先执行官方的Secret Detection核心检测脚本 - /analyzer run - # 执行自定义检测逻辑 - reportFile="gl-secret-detection-report.json" - a=$(wc -l < "$reportFile") - b=0 - if [ "$a" -gt "$b" ]; then echo "VULN FOUND. SEE $reportFile FOR MORE DETAILS." exit 1 fi
注意:直接覆盖script会替换官方模板的默认脚本,因此必须先调用/analyzer run执行原本的检测逻辑,再添加自定义判断。
内容的提问来源于stack exchange,提问作者consumedbymadness
相关产品推荐
相关产品推荐

