gitlab ci/docker中的缓存依赖项



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

全过程:

更改本地文件->commit并推送至repo远程>运行gitlab ci-->构建docker镜像->将镜像推送至其他服务器>>发布镜像

我的示例项目:

  • app->my files(html,img,php,css,anything(

  • 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(?我不想从头开始下载库。

通常在图像中运行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" ]

另一个很好的考虑是,您可以在用它构建映像之前测试代码。只需在composebuild之间添加test作业。

现场示例@gitlab.com

最新更新