summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Scheller <igor.scheller@igorshp.de>2018-09-02 17:56:19 +0200
committerIgor Scheller <igor.scheller@igorshp.de>2018-09-02 17:56:19 +0200
commit8e0afd4d594bbec3cad835753885bca89cecc4d3 (patch)
tree2fd7a3c3097f912251d57bcb1cf23b991b8fe4b8
parenta103bc06e28f5eca6ba9c28c81ae1227d689f224 (diff)
parentffd81f22b636e77a3c7e2428c0df043e8fb53870 (diff)
Merged build-docker-ci to master
-rw-r--r--.gitlab-ci.yml162
-rwxr-xr-xbin/deploy.sh11
-rw-r--r--contrib/Dockerfile14
-rw-r--r--contrib/nginx/nginx.conf2
4 files changed, 105 insertions, 84 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c15a59db..051a5bbe 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,110 +1,130 @@
image: php
-cache:
- paths:
- - .composer
-
-services:
- - mariadb:10.2
-
variables:
+ DOCKER_DRIVER: overlay2
+ TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
+ RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest
MYSQL_DATABASE: engelsystem
MYSQL_USER: engel
MYSQL_PASSWORD: engelsystem
MYSQL_HOST: mariadb
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
- COMPOSER_HOME: .composer
+ DOCROOT: /var/www/
-before_script:
- # Fix permissions after gitlab messed them up
- - &before_fix_permissions |-
- find . -type f -exec chmod 644 {} \;
- find . -type d -exec chmod 755 {} \;
- # Install required Packages
- - &before_install_packages |-
- apt update -yqq
- apt install -yqq git unzip
- docker-php-ext-install pdo pdo_mysql gettext
- # Install xdebug
- - &before_install_xdebug |-
- pecl install xdebug
- docker-php-ext-enable xdebug
- # Install Composer
- - &before_install_composer |-
- curl -sS https://getcomposer.org/installer | php -- --no-ansi --install-dir /usr/local/bin/ --filename composer
- composer --no-ansi install
- # MySQL DB
- - &before_setup_mysql |-
- chmod +x ./bin/migrate
- ./bin/migrate
- # Install Node.js and Yarn
- - &before_install_yarn |-
- apt -yqq install gnupg2 apt-transport-https
- curl -sL https://deb.nodesource.com/setup_8.x | bash -
- curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
- echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list
- apt -yqq update && apt -yqq install nodejs yarn
- yarn install
- yarn build
+stages:
+ - build
+ - test
+ - release
+ - deploy
+
+.docker_template: &docker_definition
+ image: docker:latest
+ services:
+ - docker:dind
+ tags:
+ - dind
+ before_script:
+ - docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" "$CI_REGISTRY"
-.test_template: &test_definition
+build-image:
+ <<: *docker_definition
+ stage: build
+ script:
+ - docker build --pull -t "$TEST_IMAGE" -f contrib/Dockerfile .
+ - docker push "$TEST_IMAGE"
+
+build-image.nginx:
+ <<: *docker_definition
+ stage: build
+ script:
+ - docker build --pull -t "$TEST_IMAGE.nginx" -f contrib/nginx/Dockerfile .
+ - docker push "$TEST_IMAGE.nginx"
+
+test:
+ image: $TEST_IMAGE
stage: test
+ services:
+ - mariadb:10.2
artifacts:
name: "${CI_JOB_NAME}_${CI_JOB_ID}"
expire_in: 1 week
+ when: always
paths:
- ./coverage/
+ - ./unittests.xml
+ when: always
+ reports:
+ junit: ./unittests.xml
coverage: '/^\s*Lines:\s*(\d+(?:\.\d+)?%)/'
- script: vendor/bin/phpunit --colors=never --coverage-text --coverage-html ./coverage/
+ before_script:
+ - apk add $PHPIZE_DEPS && pecl install xdebug && docker-php-ext-enable xdebug
+ - curl -sS https://getcomposer.org/installer | php -- --no-ansi --install-dir /usr/local/bin/ --filename composer
+ - cp -R tests/ phpunit.xml "${DOCROOT}"
+ - HOMEDIR=$(pwd)
+ - cd "${DOCROOT}"
+ - composer --no-ansi install --dev
+ - chmod +x ./bin/migrate
+ - ./bin/migrate
+ script:
+ - set +e
+ - vendor/bin/phpunit -v --colors=never --coverage-text --coverage-html "${HOMEDIR}/coverage/" --log-junit "${HOMEDIR}/unittests.xml"
+ - status=$?
+ - set -e
+ - sed -i "s~${DOCROOT}~${HOMEDIR}/~g" "${HOMEDIR}/unittests.xml"
+ - exit $status
-test:7.0:
- <<: *test_definition
- image: php:7.0
+release-image:
+ <<: *docker_definition
+ stage: release
+ script:
+ - docker pull "$TEST_IMAGE"
+ - docker tag "$TEST_IMAGE" "$RELEASE_IMAGE"
+ - docker push "$RELEASE_IMAGE"
+ only:
+ - master
-test:7.1:
- <<: *test_definition
- image: php:7.1
+release-image.nginx:
+ <<: *docker_definition
+ stage: release
+ script:
+ - docker pull "$TEST_IMAGE.nginx"
+ - docker tag "$TEST_IMAGE.nginx" "$RELEASE_IMAGE.nginx"
+ - docker push "$RELEASE_IMAGE.nginx"
+ only:
+ - master
.deploy_template: &deploy_definition
- services: []
stage: deploy
- only:
- - master
+ image: $TEST_IMAGE
before_script:
- - *before_fix_permissions
- - *before_install_packages
- - *before_install_composer
- - *before_install_yarn
+ - apk add bash rsync openssh-client
.deploy_template_script:
# Configure SSH
- - &deployment_ssh |-
+ - &deploy_template_script |-
+ apt update && apt install -yqq rsync openssh-client
mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" | sed -e 's/\r//g' > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
+ cd "${DOCROOT}"
- # Install project and dependencies
- - &deployment_dependencies |-
- chmod +x ./bin/deploy.sh
- apt update && apt install -yqq rsync openssh-client
- composer --no-ansi install --no-dev
- composer --no-ansi dump-autoload --optimize
-
-build_release_file:
+build-release-file:
<<: *deploy_definition
+ stage: deploy
artifacts:
name: "release_${CI_COMMIT_REF_SLUG}_${CI_JOB_ID}_${CI_COMMIT_SHA}"
expire_in: 1 week
paths:
- ./release/
script:
- - *deployment_dependencies
- - rsync -vAax --exclude '.git*' --exclude .composer/ --exclude coverage/ --exclude node_modules/ --exclude release/ ./ release/
+ - rsync -vAax "${DOCROOT}" release/
-deploy_staging:
+deploy-staging:
<<: *deploy_definition
environment:
name: staging
+ only:
+ - master
script:
# Check if deployment variables where set
- |-
@@ -112,16 +132,17 @@ deploy_staging:
echo "Skipping deployment";
exit
fi
- - *deployment_ssh
- - *deployment_dependencies
+ - *deploy_template_script
# Deploy to server
- ./bin/deploy.sh -r "${STAGING_REMOTE}" -p "${STAGING_REMOTE_PATH}" -i "${CI_JOB_ID}-${CI_COMMIT_SHA}"
-deploy_production:
+deploy-production:
<<: *deploy_definition
environment:
name: production
when: manual
+ only:
+ - master
script:
# Check if deployment variables where set
- |-
@@ -129,7 +150,6 @@ deploy_production:
echo "Skipping deployment";
exit
fi
- - *deployment_ssh
- - *deployment_dependencies
+ - *deploy_template_script
# Deploy to server
- ./bin/deploy.sh -r "${PRODUCTION_REMOTE}" -p "${PRODUCTION_REMOTE_PATH}" -i "${CI_JOB_ID}-${CI_COMMIT_SHA}"
diff --git a/bin/deploy.sh b/bin/deploy.sh
index b731e36a..15795011 100755
--- a/bin/deploy.sh
+++ b/bin/deploy.sh
@@ -60,14 +60,11 @@ ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "${remote_hos
if [[ -f \"${remote_path}/current/config/config.php\" ]]; then
echo \"Config backup\"
cp \"${remote_path}/current/config/config.php\" \"${deploy_id}-config.php\"
- fi
-
- echo \"Changing symlink\"
- unlink_cmd=\$(command -v unlink || command -v rm)
- \$unlink_cmd \"${remote_path}/current\" && ln -s \"${remote_path}/${deploy_id}\" \"${remote_path}/current\"
- if [[ -f \"${deploy_id}-config.php\" ]]; then
echo \"Restoring config\"
- cp \"${deploy_id}-config.php\" \"${remote_path}/current/config/config.php\"
+ cp \"${deploy_id}-config.php\" \"${remote_path}/${deploy_id}/config/config.php\"
fi
+
+ echo \"Changing symlink\"
+ ln -nsf \"${remote_path}/${deploy_id}\" \"${remote_path}/current\"
"
diff --git a/contrib/Dockerfile b/contrib/Dockerfile
index 9b218cf8..268f9218 100644
--- a/contrib/Dockerfile
+++ b/contrib/Dockerfile
@@ -1,7 +1,7 @@
FROM composer AS composer
COPY composer.json /app/
-RUN composer install --no-dev
-RUN composer dump-autoload --optimize
+RUN composer --no-ansi install --no-dev
+RUN composer --no-ansi dump-autoload --optimize
FROM node:8-alpine as themes
WORKDIR /app
@@ -17,22 +17,26 @@ COPY config/ /app/config
COPY db/ /app/db
COPY includes/ /app/includes
COPY locale/ /app/locale
-COPY public/ /app/html
+COPY public/ /app/public
COPY src/ /app/src
COPY templates/ /app/templates
+COPY composer.json LICENSE package.json README.md /app/
+
COPY --from=composer /app/vendor/ /app/vendor
COPY --from=composer /app/composer.lock /app/
-COPY --from=themes /app/public/assets /app/html/assets
+COPY --from=themes /app/public/assets /app/public/assets
COPY --from=themes /app/yarn.lock /app/
RUN rm -f /app/config/config.php
FROM php:7-fpm-alpine
+WORKDIR /var/www
COPY --from=data /app/ /var/www
RUN apk add --no-cache icu-dev gettext-dev && \
- docker-php-ext-install intl gettext pdo_mysql
+ docker-php-ext-install intl gettext pdo_mysql && \
+ rm -r /var/www/html
ENV TRUSTED_PROXIES 10.0.0.0/8,::ffff:10.0.0.0/8,\
127.0.0.0/8,::ffff:127.0.0.0/8,\
diff --git a/contrib/nginx/nginx.conf b/contrib/nginx/nginx.conf
index 96e4688f..d95c18e2 100644
--- a/contrib/nginx/nginx.conf
+++ b/contrib/nginx/nginx.conf
@@ -26,7 +26,7 @@ http {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $forwarded_proto;
index index.php;
- root /var/www/html;
+ root /var/www/public;
location / {
try_files $uri $uri/ /index.php?$args;