Настройка команды Docker Run для gItlab-ci.yaml для образа OWASP ZAP

Попытка запустить OWASP ZAP Docker Build в безголовом режиме, описанном здесь:

docker run -u zap -p 8080:8080 -i owasp/zap2docker-stable zap.sh -daemon -host 0.0.0.0 -port 8080

Но не могу понять, как приспособить это к gitlab-ci.yaml. На gitlab 9.4 и думаю, что сервисная команда должна это сделать, но не заставила ее работать. Пытался:

security_test:
  image: python:2.7
  stage: test
  services:
  - name: owasp/zap2docker-stable
    alias: zap
    command: ["docker run -u zap -p 8080:8080 -i owasp_zap zap.sh -port 8080 -host 0.0.0.0 -config api.key=$ZAP_API_KEY -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config scanner.strength=INSANE"]
  script:
    - export PYTHONPATH=$PWD/backend/lib:$PYTHONPATH
    - pip install -r qa/security/requirements.txt
    - BASE_URL="https://example.com" ZAP="http://owasp__zap2docker-stable:8080" ZAP_API_KEY=$ZAP_API_KEY python qa/security/zap_scanner.py

Это получает эту ошибку:

 ERROR: Preparation failed: Error response from daemon: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"exec: \\\"docker run -u zap -p 8080:8080 -i owasp_zap zap.sh -port 8080 -host 0.0.0.0 -config api.key=$ZAP_API_KEY -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config scanner.strength=INSANE\\\": executable file not found in $PATH\"\n"
 ...

Также запустил Docker и проверил, работает ли он локально, и он показывает прошлое как

"env": [
    ...
    "ZAP_PATH=/zap/zap.sh",
    ...

Поэтому я изменил команду на

    command: ["zap.sh -port 8080 -host 0.0.0.0 -config api.key=$ZAP_API_KEY -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config scanner.strength=INSANE"]

Но все равно получите ошибку:

ERROR: Preparation failed: Error response from daemon: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"exec: \\\"/zap/zap zap.sh -port 8080 -host 0.0.0.0 -config api.key=$ZAP_API_KEY -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config scanner.strength=INSANE\\\": stat /zap/zap zap.sh -port 8080 -host 0.0.0.0 -config api.key=$ZAP_API_KEY -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config scanner.strength=INSANE: no such file or directory\"\n"
...

Это похоже на установочный файл. Я пытаюсь использовать пользовательские настройки и ключ API, чтобы не искать ответы, например, просто использовать настройки по умолчанию или базовый уровень zap.

1 ответ

Изменить команду

command: ["zap.sh -port 8080 -host 0.0.0.0 -config api.key=$ZAP_API_KEY -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config scanner.strength=INSANE"]

в

command: zap.sh -port 8080 -host 0.0.0.0 -config api.key=$ZAP_API_KEY -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config scanner.strength=INSANE

Наличие массива означает, что каждый параметр команды должен быть отдельным элементом массива, а не таким, как вы упомянули все в первом элементе массива.

Другие вопросы по тегам