我使用共享的docker runners将Gitlab.com用于我的CI。我有一个需要安装PHP和composer的项目,同时还需要docker来构建项目的docker镜像。
我已经尝试了几个小时来构建一个安装了PHP,编写器和docker的docker镜像,但我似乎无法弄明白。
作为参考,我的gitlab-ci.yml文件看起来像这样;
image: docker:latest
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
composer:install:
stage: build
artifacts:
paths:
- /
expire_in: 1 week
script:
- docker run --rm --interactive --tty --volume $PWD:/app composer install
build:image:
stage: build
dependencies:
- composer:install
script:
- docker login registry.gitlab.com -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD
- docker build -t registry.gitlab.com/accountname/projectname/develop .
- docker push registry.gitlab.com/accountname/projectname/develop
使用下面Stefan提供的示例构建脚本,我将以下构建文件放在一起,看起来效果很好。它使用项目Dockerfile构建项目,并将生成的图像推送到我的Gitlab存储库。
image: docker:latest
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
before_script:
- docker run --rm --volume $PWD:/app composer install
build:image:
stage: build
script:
- docker login registry.gitlab.com -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD
- docker build -t registry.gitlab.com/accountname/projectname/develop .
- docker push registry.gitlab.com/accountname/projectname/develop
答案 0 :(得分:0)
您应该使用2个作业CI并使用Gitlab提供的artifact功能在作业之间将composer install
结果作为dependencies传递。
您的第一份工作(composer:install
)可能会在您的脚本部分使用类似https://hub.docker.com/r/library/composer/的内容来安装所有编写器程序包,然后将其传递给构建Docker镜像的build:image
作业。
这大致如下:
image: docker:latest
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
composer:install:
stage: composer
artifacts:
paths:
- /
expire_in: 1 week
script:
- docker run --rm --interactive --tty --volume $PWD:/app composer install
build:image:
stage: build
dependencies:
- composer:install
script:
- docker build -t myimage:latest .
Dockerfile
可能是这样的(基于this):
FROM php:7.0-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./your-script.php" ]