Зависимость кеша в gitlab-ci / docker - PullRequest
0 голосов
/ 05 ноября 2018

Я не знаю, как сделать зависимость кеша в gitlab-ci -> docker . Мой проект имеет 82 зависимости, и они становятся очень медленными .. (продавец находится в gitignore)

Полный процесс:

изменить локальный файл -> comit и нажать для повторного удаленного репо -> запустить gitlab-ci -> изображение сборщика сборки -> отправить изображение на другой сервер -> опубликовать изображение

Мой пример проекта:

  • app -> мои файлы (html, img, php, css, что угодно)

  • gitlab-ci.yml

  • composer.json
  • composer.lock
  • Makefile
  • Dockerfile

Dockerfile:

FROM hub.myserver.test/image:latest
ADD . /var/www
CMD cd /var/www
RUN composer install --no-interaction
RUN echo "#done" >> /etc/sysctl.conf

gitlab-CI:

build:
    script: 
        - make build
    only:
        - master

Makefile:

all: build

build:
    docker build hub.myserver.test/new_image .

Как я могу кешировать зависимости (composer.json)? Я не хочу скачивать библиотеки с нуля.

1 Ответ

0 голосов
/ 20 января 2019

Обычно не рекомендуется запускать composer install внутри своего изображения. Я предполагаю, что в конечном итоге вам нужно запустить ваше php-приложение, а не самого композитора, чтобы вы могли избежать его запуска в производство.

Одним из возможных решений является разделение создания образа приложения на 2 шага:

  1. Установить все вне изображения
  2. Копирование готовых файлов в изображение

.gillab-ci.yml

stages:
  - compose
  - build

compose:
  stage: compose
  image: composer       # or you can use your hub.myserver.test/image:latest
  script:
    - composer install  # install packages
  artifacts:
    paths:
      - vendor/         # save them for next job

build:
  stage: build
  script:
    - docker build -t hub.myserver.test/new_image .
    - docker push hub.myserver.test/new_image

Таким образом, в Dockerfile вы просто копируете файлы из директории артефактов с первой стадии в рабочую директорию изображений:

# you can build from your own image
FROM php

COPY . /var/www

WORKDIR /var/www
# optional, if you want to replace CMD of base image
CMD [ "php", "./index.php" ]

Еще одним хорошим соображением является то, что вы можете протестировать свой код перед созданием изображения с ним. Просто добавьте test задание между compose и build.

Живой пример @ gitlab.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...