Я работаю над конвейером 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, когда я отправляю образ в реестр контейнеров?
Спасибо!