где изображение докера хранится в gitlab ci?

# #docker #gitlab-ci #trivy

Вопрос:

Я успешно создал изображение docker и пометил его как testdock:latest ($CI_REGISTRY_IMAGE:последнее) переменная $CI_REGISTRY хранится в переменной проекта GitLab.

У меня есть еще один этап , чтобы начать сканирование testdock изображения с помощью Trivy : процесс просто застрял без прогресса. Я предполагаю, что изображение не может быть найдено или что-то не так со средой docker в GitLab.

 Where is the `docker image (testdock)` stored?  

это команда, которую я использовал для Trivy сканирования testdock изображения:

 $ TRIVY_INSECURE=true trivy --skip-update --output "$CI_PROJECT_DIR/scanning-report.json" $CI_REGISTRY_IMAGE:latest  

в yml:

 build:  stage: build  image: $CI_REGISTRY/devops/docker:latest  services:  - $CI_REGISTRY/devops/docker:dind-nx1.0  #tags:  # - docker  variables:  # No need to clone the repo, we exclusively work on artifacts. See  # https://docs.gitlab.com/ee/ci/runners/README.html#git-strategy  TRIVY_USERNAME: "$CI_REGISTRY_USER"  TRIVY_PASSWORD: "$CI_REGISTRY_PASSWORD"  TRIVY_AUTH_URL: "$CI_REGISTRY"  FULL_IMAGE_NAME: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA  # Tell docker CLI how to talk to Docker daemon.  DOCKER_HOST: tcp://localhost:2375/  # Use the overlayfs driver for improved performance.  DOCKER_DRIVER: overlay2  # Disable TLS since we're running inside local network.  DOCKER_TLS_CERTDIR: ""  before_script:  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY  script:  - docker build -t $FULL_IMAGE_NAME .  # - docker push $CI_REGISTRY_IMAGE:latest  security_scan:  stage: test  image:   name: $CI_REGISTRY/devops/trivy/trivy:0.20.1  entrypoint: [""]  services:  - $CI_REGISTRY/devops/docker:dind-nx1.0  #tags:  # - docker  variables:  # No need to clone the repo, we exclusively work on artifacts. See  # https://docs.gitlab.com/ee/ci/runners/README.html#git-strategy  # GIT_STRATEGY: none  TRIVY_USERNAME: "$CI_REGISTRY_USER"  TRIVY_PASSWORD: "$CI_REGISTRY_PASSWORD"  TRIVY_AUTH_URL: "$CI_REGISTRY"  FULL_IMAGE_NAME: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA  # Tell docker CLI how to talk to Docker daemon.  DOCKER_HOST: tcp://localhost:2375/  # Use the overlayfs driver for improved performance.  DOCKER_DRIVER: overlay2  # Disable TLS since we're running inside local network.  DOCKER_TLS_CERTDIR: ""  before_script:  - git config --global http.sslVerify false  - git clone $CI_REPOSITORY_URL  - echo "the project directory is - $CI_PROJECT_DIR"  - echo "the CI_REGISTRY_IMAGE variable is - $CI_REGISTRY_IMAGE"  - echo "the full image name is - $FULL_IMAGE_NAME"  - ls -la  - trivy -h | grep cache  - mkdir -p /root/.cache/trivy/db  - ls -la  - cp "eval-trivy-2/trivy-offline.db.tgz" "/root/.cache/trivy/db"  - cd /root/.cache/trivy/db  - tar xvf trivy-offline.db.tgz  - ls -la  script:  - trivy --version  - time trivy image --clear-cache  # running 1 hr and stopped.  #- TRIVY_INSECURE=true trivy --skip-update $CI_REGISTRY_IMAGE:latest  #- TRIVY_INSECURE=true trivy --skip-update -f json -o scanning-report.json $CI_REGISTRY/devops/aquasec/trivy:0.16.0  - TRIVY_INSECURE=true trivy --skip-update -o "$CI_PROJECT_DIR/scanning-report.json" $FULL_IMAGE_NAME  #keep loading by using testdock:latest  #- TRIVY_INSECURE=true trivy --skip-update -o "$CI_PROJECT_DIR/scanning-report.json" testdock:latest  # - TRIVY_INSECURE=true trivy --skip-update --exit-code 1 --severity CRITICAL $CI_REGISTRY/devops/aquasec/trivy:0.16.0  artifacts:  when: always  reports:  container_scanning: scanning-report.json  

Ответ №1:

Все задания выполняются изолированно. Поэтому jobA , как правило, не знает, что jobB произведено, до тех пор, пока вы не скажете заданию конкретно передать что-то следующему заданию с artifacts директивой.

В вашем случае вы создаете свой имидж в своей работе, но если вы не подтолкнули его — это будет так же, как любые выброшенные данные и потерянные на следующем этапе. Самый простой способ-перенести его в реестр docker и использовать его оттуда. например, обычной практикой является помечать его с помощью commit SHA вместо последнего. Таким образом, вы можете быть уверены, что всегда попадаете в нужное изображение.

Комментарии:

1. можете ли вы дать мне образец наилучшей практики, как это сделать? я обновляю полный yml в главном посте.

2. я меняю его на использование $ TRIVY_INSECURE=true trivy —пропустить обновление-o «$CI_PROJECT_DIR/отчет о сканировании.json» «$FULL_IMAGE_NAME» , по-прежнему процесс загружается без остановки.

Ответ №2:

окончательный gitlan-ci.yml, который сейчас хорошо работает:

 variables:  # Tell docker CLI how to talk to Docker daemon.  DOCKER_HOST: tcp://localhost:2375/  # Use the overlayfs driver for improved performance.  DOCKER_DRIVER: overlay2  # Disable TLS since we're running inside local network.  DOCKER_TLS_CERTDIR: ""   services:  - $CI_REGISTRY/devops/docker:dind-nx1.0  stages:  - build  - test  #include:  # Trivy integration with GitLab Container Scanning  # - remote: "https://github.com/aquasecurity/trivy/raw/master/contrib/Trivy.gitlab-ci.yml"  build:  image: $CI_REGISTRY/devops/docker:latest  stage: build  variables:  IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA  script:  - docker info  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY  - docker build -t $IMAGE .  - docker tag $IMAGE $CI_REGISTRY/$IMAGE  - docker push $CI_REGISTRY/$IMAGE   Trivy_container_scanning:  stage: test  image:  name: $CI_REGISTRY/devops/trivy/trivy:0.20.1  variables:  # Override the GIT_STRATEGY variable in your `.gitlab-ci.yml` file and set it to `fetch` if you want to provide a `clair-whitelist.yml`  # file. See https://docs.gitlab.com/ee/user/application_security/container_scanning/index.html#overriding-the-container-scanning-template  # for details  GIT_STRATEGY: none  IMAGE: "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA"  allow_failure: true  before_script:  - trivy image --reset  - git config --global http.sslVerify false  - git clone $CI_REPOSITORY_URL  - echo "the project directory is - $CI_PROJECT_DIR"  - echo "the registry image is - $CI_REGISTRY_IMAGE"  - ls -la  - trivy -h | grep cache  - mkdir -p /root/.cache/trivy/db  - ls -la  - cp "eval-trivy-4/trivy-offline.db.tgz" "/root/.cache/trivy/db"  - cd /root/.cache/trivy/db  - tar xvf trivy-offline.db.tgz  - ls -la  #- export TRIVY_VERSION=${TRIVY_VERSION:-v0.19.2}  #- apk add --no-cache curl docker-cli  #- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY  #- curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin ${TRIVY_VERSION}  #- curl -sSL -o /tmp/trivy-gitlab.tpl https://github.com/aquasecurity/trivy/raw/${TRIVY_VERSION}/contrib/gitlab.tpl  script:  - TRIVY_INSECURE=true trivy image --skip-update -f json -o "$CI_PROJECT_DIR/gl-container-scanning-report.json" $CI_REGISTRY/$IMAGE  #unable to write results: failed to initialize template writer: error retrieving template from path: open /tmp/trivy-gitlab.tpl: no such file or directory  # - TRIVY_INSECURE=true trivy image --skip-update --format template --template "@/tmp/trivy-gitlab.tpl" -o gl-container-scanning-report.json $CI_REGISTRY/$IMAGE  #scan error  #- trivy --skip-update --format template --template "@/tmp/trivy-gitlab.tpl" -o gl-container-scanning-report.json $CI_REGISTRY/$IMAGE  #- trivy --exit-code 0 --cache-dir .trivycache/ --no-progress --format template --template "@/tmp/trivy-gitlab.tpl" -o gl-container-scanning-report.json $IMAGE  # cache:  # paths:  # - .trivycache/  artifacts:  reports:  container_scanning: gl-container-scanning-report.json  

ссылка и изменение для моего env

 https://gitlab.com/aquasecurity/trivy-ci-test/-/blob/master/.gitlab-ci.yml