GitLab流水线Nexus IQ策略评估报错:结果文件不存在
核心问题:Nexus IQ CLI命令缺少扫描目标
你当前的/sonatype/evaluate命令只配置了服务器连接、认证、应用ID和评估阶段,但没有指定要扫描的构建产物路径——Nexus IQ CLI需要明确知道要扫描哪些文件(比如Jar包、War包,或者整个构建输出目录),否则它没有扫描对象,自然不会生成策略评估结果文件,这就是报错的根本原因。
具体修复步骤
1. 补充扫描目标到evaluate命令
在script的evaluate命令末尾添加构建产物的路径,比如你的模块构建产物在target/目录下,或者具体的Jar包路径:
script: - > /sonatype/evaluate -s https://nexus-iq.company-name.de/ -a $NEXUS_IQ_USER_NAME:$NEXUS_IQ_USER_PASSWORD -i <REPO-GROUP>_com.company-name.<project-name>_<module-name> -t $NEXUSIQ_STAGE # 添加扫描目标,比如模块的target目录 target/
如果是特定文件,比如target/*.jar,也可以直接指定。
2. 修正-r参数的语法错误
你之前使用-r参数时格式错误:多了末尾的>,且参数写法不符合CLI要求。正确的写法是用-r后跟结果文件路径,或者--result-file=文件名:
script: - > /sonatype/evaluate -s https://nexus-iq.company-name.de/ -a $NEXUS_IQ_USER_NAME:$NEXUS_IQ_USER_PASSWORD -i <REPO-GROUP>_com.company-name.<project-name>_<module-name> -t $NEXUSIQ_STAGE -r ./policy-eval-<module-name>.json target/
这里把结果文件放在当前工作目录(GitLab Job的默认工作目录),方便后续artifacts捕获。
3. 调整artifacts配置匹配实际生成的文件
确保artifacts的paths指向实际生成的报告文件(包括JSON和HTML,Nexus IQ CLI默认会生成HTML报告):
artifacts: name: "policy-eval-<project-name>-$CI_JOB_NAME-$CI_COMMIT_REF_NAME" paths: - ./policy-eval-<module-name>.json - ./<REPO-GROUP>_com.company-name.<project-name>_<module-name>-policy-eval-report.html
如果用了-r指定JSON文件名,就写对应的路径;HTML报告的默认命名格式是{应用ID}-policy-eval-report.html,和你之前的配置一致,只要应用ID正确就能捕获到。
4. 验证构建产物的可访问性
因为你的Job依赖build deploy,要确保build deploy Job已经将模块的构建产物(比如target目录)作为artifacts传递下来,否则当前Job的工作目录里没有要扫描的文件,CLI还是会报错。可以在build deploy Job里添加artifacts配置:
build deploy: # 其他配置... artifacts: paths: - <module-name>/target/
这样Nexus IQ Job就能访问到对应的构建产物了。
完整修正后的Job示例
nexusiq <module-name>: tags: - build image: sonatype/nexus-iq-cli stage: test needs: - build deploy rules: - if: $CI_COMMIT_REF_NAME == "master" when: never - if: $CI_COMMIT_REF_NAME =~ /feature/ when: never - if: $CI_COMMIT_REF_NAME =~ /bugfix/ when: never - when: on_success script: - > /sonatype/evaluate -s https://nexus-iq.company-name.de/ -a $NEXUS_IQ_USER_NAME:$NEXUS_IQ_USER_PASSWORD -i <REPO-GROUP>_com.company-name.<project-name>_<module-name> -t $NEXUSIQ_STAGE -r ./policy-eval-<module-name>.json # 替换为你实际的构建产物路径 <module-name>/target/ artifacts: name: "policy-eval-<project-name>-$CI_JOB_NAME-$CI_COMMIT_REF_NAME" paths: - ./policy-eval-<module-name>.json - ./<REPO-GROUP>_com.company-name.<project-name>_<module-name>-policy-eval-report.html
内容的提问来源于stack exchange,提问作者Greta

