尝试在gitlab-ci工作流程中使用zap

时间:2017-06-09 14:13:44

标签: docker gitlab-ci zap

我正在尝试在我公司的持续集成工作流程中自动化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。

如果那很重要:

  • gitlab-runner版本是1.11.1
  • gitlab版本是Community Edition 8.7.4

1 个答案:

答案 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命令作为脚本步骤而不是使用服务运行。

@Simon Bennetts有没有办法使用像curl这样的东西将测试请求传递给远程zap守护进程?