我不知道如何在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本身,这样您就可以避免在生产中使用它。
一个可能的解决方案是将应用程序图像创建分为两个步骤:
- 安装映像之外的所有内容
- 将现成的文件复制到图像
.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" ]
另一个很好的考虑是,您可以在用它构建映像之前测试代码。只需在compose
和build
之间添加test
作业。
现场示例@gitlab.com