Функция сканирования контейнера не работает для нескольких изображений - PullRequest
1 голос
/ 18 июня 2019

Я успешно настроил функцию сканирования контейнеров из GitLab для одного образа Docker.Теперь я хотел бы отсканировать еще одно изображение, используя ту же конфигурацию CI / CD в .gitlab-ci.yml

Проблема

Похоже, что при объединении невозможно иметь несколько отчетов сканирования контейнеровСтраница сведений о запросе.

На следующем снимке экрана показаны результаты обоих заданий сканирования контейнера в приведенной ниже конфигурации.

GitLab Container Scanning report

Мы сканируем дваИзображения докеров, которые имеют CVE:

  1. iojs:1.6.3-slim (355 уязвимостей)
  2. golang:1.3 (1139 уязвимостей)

Ожидаетсярезультат

В отчете «Сканирование контейнера» будет отображено 1494 уязвимости (355 + 1139).В настоящее время, похоже, включены только результаты для golang изображения.

Соответствующие части конфигурации

container_scanning_first_image:
  script:
    - docker pull golang:1.3 
    - ./clair-scanner -c http://docker:6060 --ip $(hostname -i) -r gl-container-scanning-report-first-image.json -l clair.log golang:1.3 || true
  artifacts:
    reports:
      container_scanning: gl-container-scanning-report-first-image.json

container_scanning_second_image:
  script:
    - docker pull iojs:1.6.3-slim
    - ./clair-scanner -c http://docker:6060 --ip $(hostname -i) -r gl-container-scanning-report-second-image.json -l clair.log iojs:1.6.3-slim || true
  artifacts:
    reports:
      container_scanning: gl-container-scanning-report-second-image.json

Полная конфигурация для справки

image: docker:stable

stages:
  - scan

variables:

  DOCKER_HOST: tcp://docker:2375/
  DOCKER_DRIVER: overlay2

container_scanning_first_image:
  stage: scan
  variables:
    GIT_STRATEGY: none
    DOCKER_SERVICE: docker
    DOCKER_HOST: tcp://${DOCKER_SERVICE}:2375/
    CLAIR_LOCAL_SCAN_VERSION: v2.0.8_fe9b059d930314b54c78f75afe265955faf4fdc1
    NO_PROXY: ${DOCKER_SERVICE},localhost
  allow_failure: true
  services:
    - docker:dind
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    - docker run -d --name db arminc/clair-db:latest
    - docker run -p 6060:6060 --link db:postgres -d --name clair --restart on-failure arminc/clair-local-scan:${CLAIR_LOCAL_SCAN_VERSION}
    - apk add -U wget ca-certificates
    - docker pull golang:1.3 
    - wget https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64
    - mv clair-scanner_linux_amd64 clair-scanner
    - chmod +x clair-scanner
    - touch clair-whitelist.yml
    - retries=0
    - echo "Waiting for clair daemon to start"
    - while( ! wget -T 10 -q -O /dev/null http://${DOCKER_SERVICE}:6060/v1/namespaces ) ; do sleep 1 ; echo -n "." ; if [ $retries -eq 10 ] ; then echo " Timeout, aborting." ; exit 1 ; fi ; retries=$(($retries+1)) ; done
    - ./clair-scanner -c http://${DOCKER_SERVICE}:6060 --ip $(hostname -i) -r gl-container-scanning-report-first-image.json -l clair.log golang:1.3 || true
  artifacts:
    paths:
      - gl-container-scanning-report-first-image.json
    reports:
      container_scanning: gl-container-scanning-report-first-image.json
  dependencies: []
  only:
    refs:
      - branches
    variables:
      - $GITLAB_FEATURES =~ /\bcontainer_scanning\b/
  except:
    variables:
      - $CONTAINER_SCANNING_DISABLED

container_scanning_second_image:
  stage: scan
  variables:
    GIT_STRATEGY: none
    DOCKER_SERVICE: docker
    DOCKER_HOST: tcp://${DOCKER_SERVICE}:2375/
    CLAIR_LOCAL_SCAN_VERSION: v2.0.8_fe9b059d930314b54c78f75afe265955faf4fdc1
    NO_PROXY: ${DOCKER_SERVICE},localhost
  allow_failure: true
  services:
    - docker:dind
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    - docker run -d --name db arminc/clair-db:latest
    - docker run -p 6060:6060 --link db:postgres -d --name clair --restart on-failure arminc/clair-local-scan:${CLAIR_LOCAL_SCAN_VERSION}
    - apk add -U wget ca-certificates
    - docker pull iojs:1.6.3-slim
    - wget https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64
    - mv clair-scanner_linux_amd64 clair-scanner
    - chmod +x clair-scanner
    - touch clair-whitelist.yml
    - retries=0
    - echo "Waiting for clair daemon to start"
    - while( ! wget -T 10 -q -O /dev/null http://${DOCKER_SERVICE}:6060/v1/namespaces ) ; do sleep 1 ; echo -n "." ; if [ $retries -eq 10 ] ; then echo " Timeout, aborting." ; exit 1 ; fi ; retries=$(($retries+1)) ; done
    - ./clair-scanner -c http://${DOCKER_SERVICE}:6060 --ip $(hostname -i) -r gl-container-scanning-report-second-image.json -l clair.log iojs:1.6.3-slim || true
  artifacts:
    paths:
      - gl-container-scanning-report-second-image.json
    reports:
      container_scanning: gl-container-scanning-report-second-image.json
  dependencies: []
  only:
    refs:
      - branches
    variables:
      - $GITLAB_FEATURES =~ /\bcontainer_scanning\b/
  except:
    variables:
      - $CONTAINER_SCANNING_DISABLED

Вопрос

Как настроить функцию сканирования контейнеров GitLab, чтобы иметь возможность сообщать результаты двух изображений Docker?

...