Несколько этапов gitlab-ci с многоступенчатым докер-файлом - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть Dockerfile с двумя этапами;На первом этапе создается приложение реагирования из исходного кода, а на втором этапе создаются и добавляются сервер NGINX:

FROM kkarczmarczyk/node-yarn as builder
COPY . /workspace
RUN set -ex \
    yarn global add create-react-app \
    && yarn install \
    && GENERATE_SOURCEMAP=false yarn build

FROM nginx:mainline-alpine
COPY ./nginx-default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /workspace/build /var/www/html/

Я также использую gitlab-ci, и мне бы хотелось иметь несколько этапов:Сборка, тестирование и развертывание.Но я не знаю, как разделить этап сборки и тестирования, так как я использую многоступенчатый Dockerfile.Проблема заключается в том, что все JS-тесты (для React) необходимо выполнить до того, как будет выполнена «сборка пряжи», и сборка будет скопирована на стадию стыковки секунд.

Решением может быть просто выполнить yarn test до запуска yarn build.Но я действительно хотел бы провести отдельный этап тестирования gitlab-ci.

Возможно ли это?Или мне нужно разделить этапы Dockerfile на несколько Dockerfile?

1 Ответ

0 голосов
/ 22 марта 2019

Причина, по которой вам может потребоваться несколько этапов в gitlab, заключается в быстром отказе.Но сборка с многоэтапными этапами docker или gitlab может дать вам тот же результат, если тест не пройден, вы не продвинетесь дальше и получите трассировку стека.С одной стороны, многоступенчатый докер может быть еще удобнее, потому что вы всегда можете вызвать предыдущий контейнер и воспроизвести / проверить / исправить ошибку.Но в целом это просто ненужное усложнение иметь шаблон сборки Docker внутри CI, лучше разделять образы Docker и использовать их на этапе gitlab.

...