关于Snyk Delta在Azure DevOps流水线的行为与中断配置咨询
问题场景与疑问
现有配置
我在Azure DevOps中配置了Snyk Delta用于仅检测新增漏洞,流水线脚本如下:
- script: | npm install -g snyk snyk-delta snyk auth $(SNYK_TOKEN) snyk test --json --print-deps | snyk-delta --baselineOrg xxxxx-xxxxx-xxxx-xxxx- --baselineProject xxxxxxxxx-xxxxxxxxxxx-xxxxxx-xxxxxxxxxx snyk monitor displayName: 'Ejecutar Snyk delta Test'
遇到的问题
- 必须执行
snyk monitor才能将报告同步到Snyk平台 - 首次运行检测到新增许可证问题,无修改再次运行显示无新问题,符合预期
- 添加存在漏洞的新库后,检测到5个新安全漏洞,但流水线未中断
疑问
- 每次运行流水线都会更新Snyk平台上的项目,基线会随最新扫描更新,但Snyk Delta仅支持使用项目ID而非扫描ID,该如何正确使用?
- 我设想的流程:①项目无漏洞→流水线成功→同步至平台;②新增带漏洞的库→中断流水线→更新基线;③再新增带漏洞的库→仅检测此次新增漏洞并中断流水线、更新基线,该流程是否正确?
解决方案与答疑
1. 解决流水线不中断问题
snyk-delta默认不会因检测到新漏洞返回非零退出码,需添加--fail-on new参数触发流水线中断。修改后的核心命令:
snyk test --json --print-deps | snyk-delta --baselineOrg <ORG_ID> --baselineProject <PROJECT_ID> --fail-on new
2. Snyk Delta基线的正确用法
Snyk Delta依赖指定项目ID对应的最新成功扫描记录作为基线,要避免每次流水线自动更新基线,需做以下调整:
- 拆分流水线逻辑:仅在主分支/已确认无问题的分支执行
snyk monitor用于更新基线;开发分支流水线仅执行snyk test + snyk-delta,以主分支的项目ID作为基线,不触发基线更新 - 手动控制基线:当修复漏洞或确认接受现有漏洞后,手动触发主分支流水线执行
snyk monitor更新基线,后续所有分支扫描都以此为基准检测新增漏洞
3. 设想流程的修正
原流程存在逻辑漏洞:步骤②中流水线因漏洞中断后,无法自动执行snyk monitor更新基线,正确流程应为:
- ① 主分支项目无漏洞→流水线成功→执行
snyk monitor更新Snyk平台基线 - ② 开发分支新增带漏洞的库→snyk-delta检测到新漏洞,返回非零码中断流水线→修复漏洞或在Snyk平台标记漏洞为可接受→合并代码到主分支
- ③ 主分支流水线触发,执行
snyk monitor更新基线;后续再新增漏洞时,流水线以最新基线为对比,检测新增漏洞并中断,重复步骤②的修复合并流程
内容的提问来源于stack exchange,提问作者Diego Izquierdo Dussan
相关产品推荐
相关产品推荐

