Создание образа Docker с Qt5, скомпилированным с MinGW, работает в контейнере, запущенном из образа "docker: последний", но в GitLab CI происходит сбой - PullRequest
0 голосов
/ 21 января 2020

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

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

Проблем не было когда я вытащил docker: последнее изображение на моем P C, запустил контейнер из него и построил мое изображение в этом контейнере. Это работало нормально.

Сборка в конвейере GitLab CI.

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

Не удалось найти qmake spe c ''.

Ошибка при обработке файла проекта: / root / src / qt -everywhere-sr c -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: последняя версия одинакова в обоих случаях.
  • Версия MinGW одинакова в обоих случаях.
  • Я пробовал также с Qt 5.12.6 и результат тот же.

1 Ответ

0 голосов
/ 29 января 2020

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

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

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

...