Gitlab Job执行OWASP ZAP扫描后因退出码2失败,无详细错误日志
GitLab Job 退出码2失败(无详细错误日志)
问题
GitLab Job执行后因退出码2失败,日志仅显示ERROR: Job failed: exit code 2,无任何详细错误信息。
关联的.gitlab-ci.yml配置
image: docker:latest services: - name: docker:dind alias: thedockerhost variables: DOCKER_HOST: tcp://thedockerhost:2375/ DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" stages: - test1 test1: stage: test1 script: - docker run -v $(pwd):/zap/wrk/:rw --name zap2 owasp/zap2docker-stable zap-baseline.py -t http://www.example.com -r example.html artifacts: when: always paths: - example.html
解决步骤
1. 捕获容器内完整输出
当前脚本未将ZAP工具的执行日志输出到GitLab Job日志中,修改script命令,把容器的标准输出和错误输出全部重定向到Job日志:
- docker run -v $(pwd):/zap/wrk/:rw --name zap2 owasp/zap2docker-stable zap-baseline.py -t http://www.example.com -r example.html 2>&1
若容器已退出,可额外添加日志查看命令(即使前面命令失败也能执行):
- docker run -v $(pwd):/zap/wrk/:rw --name zap2 owasp/zap2docker-stable zap-baseline.py -t http://www.example.com -r example.html 2>&1 || docker logs zap2
2. 明确ZAP退出码含义
ZAP的zap-baseline.py脚本退出码对应不同扫描结果:
- 0:未发现风险
- 1:发现警告级漏洞
- 2:发现高危级漏洞
退出码2大概率是扫描到高危漏洞,但需要日志确认具体漏洞信息。
3. 检查目录挂载权限
确保GitLab Runner工作目录的权限允许容器读写,可添加权限验证步骤:
- ls -la $(pwd) - docker run --rm -v $(pwd):/zap/wrk/:rw owasp/zap2docker-stable touch /zap/wrk/test_permission && rm /zap/wrk/test_permission
若此步骤失败,说明挂载目录权限存在问题,需调整Runner工作目录权限或容器运行用户。
4. 避免容器名称冲突
当前命令使用--name zap2,若之前的Job残留了同名容器,会导致后续Job失败,建议添加--rm参数让容器退出后自动删除:
- docker run --rm -v $(pwd):/zap/wrk/:rw owasp/zap2docker-stable zap-baseline.py -t http://www.example.com -r example.html 2>&1
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

