我正在尝试在我公司的持续集成工作流程中自动化Zap的使用。我们正在使用gitlab-ci,并且我想使用嵌入式图像嵌入Zap作为服务,并且在第一次只需在可合法定位的网站上调用快速扫描,例如itsecgames.com。
我正在使用将zap.sh公开为入口点的docker image nhsbsa/owasp-zap。
如何在gitlab-ci YAML脚本中将此图像用作服务,以便在itsecgames.com上快速扫描?
这是我的gitlab-ci.yml:
image: openjdk:8-jdk
variables:
PROJECT_NAME: "psa-preevision-viewer"
stages:
- zap
zap-scanner:
services:
- nhsbsa/owasp-zap:latest
stage: zap
script:
- nhsbsa__owasp-zap -cmd -quickurl http://itsecgames.com/ -quickprogress
当gitlab运行器尝试解析此作业时,我收到以下错误消息:
$ nhsbsa__owasp-zap -cmd -quickurl http://itsecgames.com/ -quickprogress
/bin/bash: line 27: nhsbsa__owasp-zap: command not found
ERROR: Job failed: exit code 1
此时我尝试过不同的方法,比如直接调用zap.sh而不是nhsbsa__owasp-zap,或者nhsbsa-owasp-zap(根据gitlab-ci documentation,两个名称都应该工作)。
可能有一些我非常误解,但是在gitlab-ci中使用服务并不像在我自己的计算机上拉图像和调用docker一样?事实上,如果我使用
docker run nhsbsa/owasp-zap -cmd -quickurl http://itsecgames.com/ -quickprogress
我按预期获得了一个包含已发现漏洞的XML。
如果那很重要:
答案 0 :(得分:0)
当你在gitlab中创建一个服务时,它会将docker容器旁边旋转,并为你提供一个访问它的主机名。我们的想法是从最初的docker镜像调用您的命令并将它们指向您的服务图像。正如@ Jakub-Kania所说,它不允许你将它作为本地命令运行。
因此,就我们的nhsbsa / owasp-zap图像而言,这意味着我们有一个owasp-zap守护程序在nhsbsa__owasp-zap:8080运行并可用。然后我们使用maven和zap插件来扫描我们的应用程序。
这样的东西(我们也在解析声纳中的zap结果):
mvn -B --non-recursive -Pzap -DzapPort=$NHSBSA__OWASP_ZAP_PORT_8080_TCP_PORT -DzapHost=$NHSBSA__OWASP_ZAP_PORT_8080_TCP_ADDR
-DzapTargetUrl=$baseUrl
-DsonarUrl=$SONAR_URL -Dsonar.branch=release
br.com.softplan.security.zap:zap-maven-plugin:analyze sonar:sonar
根据您编写的应用程序的内容,您可能希望将docker run命令作为脚本步骤而不是使用服务运行。