Jenkins тянет с репозитория файлы и запускает компиляцию докера.
Есть контейнер Docker С установленным php:7.3-fpm так:
fpm.dockerfile:
FROM php:7.3-fpm
COPY ./server/php.ini /usr/local/etc/php/conf.d/custom.ini
WORKDIR /var/www/project/
# Install dependencies
RUN apt-get update \
&& docker-php-ext-install pdo pdo_mysql
# Install dependencies
RUN apt-get install -y \
libzip-dev \
zip \
unzip \
git \
curl
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
#RUN pecl install -o -f redis \
#&& rm -rf /tmp/pear \
#&& docker-php-ext-enable redis
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy existing application directory contents
COPY ./client/ /var/www/project/
COPY ./client/.env.example /var/www/project/.env
RUN cd /var/www/project/ && composer install --prefer-source --no-interaction
Всё запускается, зависимости качаются, в jenkins ясная погода. Но сервер возвращает ошибку:
Warning: require(/var/www/project/public/../vendor/autoload.php): failed to open stream: No such file or directory in /var/www/project/public/index.php on line 33
Fatal error: require(): Failed opening required '/var/www/project/public/../vendor/autoload.php' (include_path='.:/usr/local/lib/php') in /var/www/project/public/index.php on line 33
Переходи в контейнер php:7.3-fpm и смотрим какие файлы там:
docker exec -ti devtest1_fpm_1 /bin/sh
cd /var/www/project/ && ls -la
drwxr-xr-x 11 111 113 4096 Mar 5 14:10 .
drwxr-xr-x 1 root root 4096 Mar 6 07:58 ..
-rw-r--r-- 1 111 113 213 Mar 5 14:10 .editorconfig
-rw-r--r-- 1 111 113 726 Mar 5 14:10 .env.example
-rw-r--r-- 1 111 113 111 Mar 5 14:10 .gitattributes
-rw-r--r-- 1 111 113 163 Mar 5 14:10 .gitignore
-rw-r--r-- 1 111 113 174 Mar 5 14:10 .styleci.yml
drwxr-xr-x 6 111 113 4096 Mar 5 14:10 app
-rw-r--r-- 1 111 113 1686 Mar 5 14:10 artisan
drwxr-xr-x 3 111 113 4096 Mar 5 14:10 bootstrap
-rw-r--r-- 1 111 113 1581 Mar 5 14:10 composer.json
-rw-r--r-- 1 111 113 170974 Mar 5 14:10 composer.lock
drwxr-xr-x 2 111 113 4096 Mar 5 14:10 config
drwxr-xr-x 5 111 113 4096 Mar 5 14:10 database
-rw-r--r-- 1 111 113 433212 Mar 5 14:10 package-lock.json
-rw-r--r-- 1 111 113 1126 Mar 5 14:10 package.json
-rw-r--r-- 1 111 113 1156 Mar 5 14:10 phpunit.xml
drwxr-xr-x 4 111 113 4096 Mar 6 06:24 public
-rw-r--r-- 1 111 113 4198 Mar 5 14:10 readme.md
drwxr-xr-x 6 111 113 4096 Mar 5 14:10 resources
drwxr-xr-x 2 111 113 4096 Mar 5 14:10 routes
-rw-r--r-- 1 111 113 563 Mar 5 14:10 server.php
drwxr-xr-x 5 111 113 4096 Mar 5 14:10 storage
drwxr-xr-x 4 111 113 4096 Mar 5 14:10 tests
-rw-r--r-- 1 111 113 538 Mar 5 14:10 webpack.mix.js
Но увы папки vendor, нет. Куда же установились зависимости ?
Причём файлы же существуют ! Но в контейнер докера не попадают !
Step 13/14 : RUN cd /var/www/project/ && composer install --prefer-source --no-interaction
---> Using cache
---> 4c7460730118
Step 14/14 : RUN find / -name autoload.php
---> Running in d5c359699292
/var/www/project/vendor/opis/closure/autoload.php
/var/www/project/vendor/autoload.php
/var/www/project/vendor/fzaninotto/faker/src/autoload.php
Removing intermediate container d5c359699292
---> ff3bfdbf7010
PS. на всякий случай.
docker-compose.yml
version: "3.3"
services:
nginx:
build:
context: .
dockerfile: server/nginx.dockerfile
ports:
- 80:80
links:
- fpm
volumes:
- ./client/:/var/www/project/
fpm:
build:
context: .
dockerfile: server/fpm.dockerfile
volumes:
- ./client/:/var/www/project/
- ./server/php.ini:/usr/local/etc/php/conf.d/custom.ini
links:
- mysql
mysql:
image: mysql:5.7
ports:
- 33061:3306
environment:
- MYSQL_ROOT_PASSWORD=mysql
- MYSQL_DATABSE=project