gitlab-ci / docker中的缓存依赖

时间:2018-11-05 19:52:25

标签: php docker caching gitlab

我不知道如何在 gitlab-ci-> docker 中进行缓存依赖。 我的项目有82个依赖项,而且它们变得非常慢..(供应商位于gitignore中)

完整过程:

更改本地文件-> 并推送到远程仓库-> 运行gitlab-ci -> 构建docker映像- > 将图像推送到其他服务器-> 发布图像

我的示例项目:

  • 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

制作文件:

all: build

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

如何缓存依赖项(composer.json)?我不想从头开始下载库。

1 个答案:

答案 0 :(得分:0)

通常在图像中运行composer install并不是一个好主意。我认为您最终需要运行自己的php应用程序而不是composer本身,因此可以避免在生产中使用它。

一种可能的解决方案是将应用程序映像创建分为两个步骤:

  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" ]

另一个好的考虑因素是,您可以在使用它构建映像之前测试代码。只需在testcompose之间添加build作业即可。

Live example @ gitlab.com