Docker: Decoupled nginx and fpm builds

main
Igor Scheller 6 years ago
parent b9cb7d57fd
commit 4f60daa295

@ -30,15 +30,23 @@ stages:
build-image.nginx: build-image.nginx:
<<: *docker_definition <<: *docker_definition
stage: build-frontend stage: build-frontend
artifacts:
name: "${CI_JOB_NAME}_${CI_JOB_ID}_assets"
expire_in: 1 day
paths:
- ./public/assets
script: script:
- docker build --pull -t "${TEST_IMAGE}-nginx" -f contrib/nginx/Dockerfile . - docker build --pull -t "${TEST_IMAGE}-nginx" -f contrib/nginx/Dockerfile .
- docker push "${TEST_IMAGE}-nginx" - docker push "${TEST_IMAGE}-nginx"
- instance=$(docker create "${TEST_IMAGE}-nginx")
- docker cp "${instance}:/var/www/public/assets" public/
- docker rm "${instance}"
build-image: build-image:
<<: *docker_definition <<: *docker_definition
stage: build stage: build
script: script:
- docker build --pull --build-arg NGINX_IMAGE="${TEST_IMAGE}-nginx" -t "${TEST_IMAGE}" -f contrib/Dockerfile . - docker build --pull -t "${TEST_IMAGE}" -f contrib/Dockerfile .
- docker push "${TEST_IMAGE}" - docker push "${TEST_IMAGE}"
test: test:
@ -112,6 +120,7 @@ build-release-file:
- ./release/ - ./release/
script: script:
- rsync -vAax "${DOCROOT}" release/ - rsync -vAax "${DOCROOT}" release/
- rsync -vAax public/assets release/public/
deploy-staging: deploy-staging:
<<: *deploy_definition <<: *deploy_definition

@ -99,7 +99,7 @@ vendor/bin/phpunit
### CI & Build Pipeline ### CI & Build Pipeline
The engelsystem can be tested and automatically deployed to a testing/staging/production environment. The engelsystem can be tested and automatically deployed to a testing/staging/production environment.
This functionality requires a [GitLab](https://about.gitlab.com/) server with a running docker minion. This functionality requires a [GitLab](https://about.gitlab.com/) server with a working docker runner.
To use the deployment features the following secret variables need to be defined (if undefined the step will be skipped): To use the deployment features the following secret variables need to be defined (if undefined the step will be skipped):
```bash ```bash

@ -1,15 +1,9 @@
# Setup
ARG NGINX_IMAGE=engelsystem-nginx:latest
# composer install # composer install
FROM composer AS composer FROM composer AS composer
COPY ./ /app/ COPY ./ /app/
RUN composer --no-ansi install --no-dev --ignore-platform-reqs RUN composer --no-ansi install --no-dev --ignore-platform-reqs
RUN composer --no-ansi dump-autoload --optimize RUN composer --no-ansi dump-autoload --optimize
# Use frontend container for assets
FROM ${NGINX_IMAGE} AS frontend
# Intermediate container for less layers # Intermediate container for less layers
FROM alpine as data FROM alpine as data
COPY bin/ /app/bin COPY bin/ /app/bin
@ -18,7 +12,6 @@ COPY db/ /app/db
COPY import/ /app/import COPY import/ /app/import
COPY includes/ /app/includes COPY includes/ /app/includes
COPY public/ /app/public COPY public/ /app/public
COPY --from=frontend /var/www/public/assets/ /app/public/assets
COPY resources/lang /app/resources/lang COPY resources/lang /app/resources/lang
COPY resources/views /app/resources/views COPY resources/views /app/resources/views
COPY src/ /app/src COPY src/ /app/src

Loading…
Cancel
Save