Как сохранить изменения cmake при создании изображения Docker в Google Cloud Build? - PullRequest
1 голос
/ 18 июня 2020

Я работаю над конвейером CI с Google Cloud Build для запуска тестов кода, хранящегося в Cloud Source Repositories. В его нынешнем виде конвейер использует построитель облака docker для создания образа с docker build. Процесс сборки занимает около часа и периодически запускается. Он собирает программу, а затем запускает на ней один тест на одном этапе сборки, эта часть работает нормально. Я хочу создать программу, используя cmake и make, а затем сохранить образ в реестре контейнеров, чтобы я мог запускать будущие тесты из этого образа, не тратя время на его создание перед тестированием.

Проблема в том, что когда я запускаю настраиваемый образ из реестра контейнеров в Cloud Build, он не распознает модуль, созданный с помощью cmake. Конвейер отлично запускал тесты, когда я его построил, затем запускал тесты на тех же этапах сборки, но больше не распознает модуль, когда я запускаю образ в качестве настраиваемого построителя в Cloud Build.

Dockerfile, используемый для создания образа, выглядит следующим образом:

FROM ubuntu
ARG DEBIAN_FRONTEND=noninteractive
COPY . /app
WORKDIR /app

RUN apt-get update
RUN apt-get -y install python3.7
RUN apt-get -y install python3-pip
RUN pip3 install numpy
RUN pip3 install matplotlib
RUN pip3 install transitions
RUN pip3 install pandas
RUN apt-get install -y cmake
RUN apt-get install -y swig
RUN pip3 install conan
RUN ln -s ~/.local/bin/conan /usr/bin/conan
RUN apt-get install gcc

RUN cd ~
RUN python3 path/to/master_build.py

master_build.py использует команды os.system для сборки программы. Он вызывает сценарий оболочки для выполнения процесса cmake. Сценарий оболочки:

#!/bin/sh
mkdir dist3
cd dist3
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ../src
make
cd ~

Это создает программу без проблем, затем сценарий python вызывает другие сценарии для запуска базовых c тестов, которые все работают нормально, когда я делаю это на этом этапе сборки. . Проблема в том, что когда я использую Cloud Build для запуска пользовательского образа из реестра контейнеров, он больше не может найти модуль, созданный с помощью CMake.

Это файл конфигурации облачной сборки, в котором запускается пользовательский образ:

steps:
    - name: 'gcr.io/$PROJECT_ID/built_images:latest'
      args: ['python3', 'path/to/run_tests.py']

Я получаю ModuleNotFoundError, что странно, потому что он работал нормально, когда я запускал тестовый сценарий в той же сборке после вызова cmake. Я предполагаю, что файловая система не сохраняется, когда я помещаю sh образ в реестр контейнеров, и он больше не может найти папку dist3.

Как сохранить папку dist3, когда я отправляю образ в реестр контейнеров?

Спасибо!

...