Сборка образа Docker с помощью Qt5, скомпилированного с помощью MinGW, работает в контейнере, запускаемом из образа docker:latest, но не работает в GitLab CI.

Я хочу подготовить образ докера с Qt5 с MinGW. Частью процесса является сборка Qt 5.14.0 с MinGW, и именно в этой части он терпит неудачу.

Сборка на моей машине.

Не было никаких проблем, когда я вытащил образ docker:latest на свой компьютер, запустил из него контейнер и создал свой образ в этом контейнере. Это работало нормально.

Создание конвейера GitLab CI.

Когда я отправил файл Dockerfile в Gitlab, где он встроен в контейнер из того же образа docker:latest, ему не удалось собрать Qt со следующим сообщением об ошибке:

Не удалось найти спецификацию qmake ''.

Ошибка обработки файла проекта: /root/src/qt-everywhere-src-5.14.0

Скриншот ошибки

Скрипт CI:

stages:
  - deploy

variables:
  CONTAINER_NAME: "qt5-mingw"
  PORT: "5000"

image: docker:latest

build-snapshot:
  stage: deploy
  tags:
    - docker
    - colo
  environment:
    name: snapshot
    url: https://somedomain.com/artifactory/#/artifacts/qt5-mingw
  before_script:
    - docker login -u ${ARTIFACT_USER} -p ${ARTIFACT_PASS} somedomain.com:${PORT}
  script:
    - docker build -f Dockerfile -t ${CONTAINER_NAME} .
    - export target_version=$(docker inspect --format='{{index .Config.Labels "com.domain.version" }}' ${CONTAINER_NAME})
    - docker tag ${CONTAINER_NAME} dsl.domain.com:${PORT}/${CONTAINER_NAME}:${target_version}
    - docker tag dsl.domain.com:${PORT}/${CONTAINER_NAME}:${target_version} dsl.domain.com:${PORT}/${CONTAINER_NAME}:latest
    - docker push dsl.domain.com:${PORT}/${CONTAINER_NAME}:${target_version}
    - docker push dsl.domain.com:${PORT}/${CONTAINER_NAME}:latest
  after_script:
    - docker logout dsl.domain.com:${PORT}
    - docker rmi ${CONTAINER_NAME}
  except:
    - master
    - tags

Файл Docker:

FROM debian:buster-slim

########################
# Install what we need
########################

# Custom Directory
ENV CUSTOM_DIRECTORY YES
ENV WDEVBUILD /temp/build
ENV WDEVSOURCE /temp/src
ENV WDEVPREFIX /opt/windev

# Custom Version
ENV CUSTOM_VERSION NO
ENV QT_SERIES 5.14
ENV QT_BUILD 0
ENV LIBJPEGTURBO_VERSION 2.0.3
ENV LIBRESSL_VERSION 3.0.2
ENV OPENSSL_VERSION 1.1.1c
ENV UPX_VERSION 3.95

# SSL Choice
ENV USE_OPENSSL YES

# Exclude Static Qt
ENV BUILD_QT32_STATIC NO
ENV BUILD_QT64_STATIC NO

# Copy directory with qt_build script
COPY rootfs /

# install tools
RUN apt-get update \
  && apt-get install -y bash \
        cmake \
        coreutils \
        g++ \
        git \
        gzip \
        libucl1 \
        libucl-dev \
        make \
        nasm \
        ninja-build \
        perl \
        python \
        qtchooser \
        tar \
        wget \
        xz-utils \
        zlib1g \
        zlib1g-dev \
  && apt-get install -y binutils-mingw-w64-x86-64 \
        mingw-w64-x86-64-dev \
        g++-mingw-w64-x86-64 \
        gcc-mingw-w64-x86-64 \
        binutils-mingw-w64-i686 \
        mingw-w64-i686-dev \
        g++-mingw-w64-i686 \
        gcc-mingw-w64-i686 \
  && rm -rf /temp \
    && rm -rf /var/lib/apt/lists/*

# Build Qt with mingw and the step where it fails.
RUN /opt/windev/bin/qt_build \



LABEL com.domain.version="1.0.0"
LABEL vendor="Someone"
LABEL com.domain.release-date="2020-01-21"

Процесс отладки на данный момент:

  • Версия docker:latest в обоих случаях одинакова.
  • Версия MinGW одинакова в обоих случаях.
  • Я пробовал также с Qt 5.12.6, и результат тот же.

person Rufledore    schedule 21.01.2020    source источник
comment
Действительно ли он распечатывает здесь текст, вводящий описание изображения? Или он выдает более описательное сообщение об ошибке? Пожалуйста, отредактируйте вопрос, чтобы добавить текст сообщения об ошибке, а не внешнюю ссылку и не скриншот окна терминала.   -  person David Maze    schedule 21.01.2020
comment
Текст сообщения об ошибке находится прямо над ссылкой на скриншот. Снимок экрана предназначен только для более подробного объяснения, когда возникает ошибка и после какой конкретной команды.   -  person Rufledore    schedule 21.01.2020


Ответы (1)


Я нашел это. Я думаю, что ответ здесь .

Пакет libseccomp2 имеет версию 2.3.1 на компьютере с CI Runner и версию 2.4.1 на моем компьютере. Но версии Qt после 5.10 используют системный вызов, который был добавлен в 2.3.3, поэтому его можно собрать на моем ПК и нельзя собрать на бегуне.

Reamrak: Не имеет значения, что он встроен в контейнер, запускаемый из образа docker:latest, потому что Docker Daemon монтируется при запуске контейнера, поэтому, видимо, он продолжает использовать некоторые функции хоста, и работа с докером не полностью контейнерный.

person Rufledore    schedule 29.01.2020