Browse Source

updated build

- added git files to dockerignore
- updated local testing
- updated build on branches
tags/2.0.12
Tobias Munk 8 years ago
parent
commit
478331efe8
  1. 1
      .dockerignore
  2. 1
      .gitignore
  3. 111
      .gitlab-ci.yml
  4. 41
      Dockerfile
  5. 26
      Dockerfile-mssql
  6. 10
      tests/.env-dist
  7. 2
      tests/README.md
  8. 13
      tests/docker-compose.caching.yml
  9. 15
      tests/docker-compose.mysql.yml
  10. 14
      tests/docker-compose.pgsql.yml
  11. 30
      tests/docker-compose.yml
  12. 11
      tests/test-local.sh

1
.dockerignore

@ -1,2 +1,3 @@
.git
vendor vendor
docs docs

1
.gitignore vendored

@ -41,3 +41,4 @@ phpunit.phar
# NPM packages # NPM packages
/node_modules /node_modules
.env

111
.gitlab-ci.yml

@ -1,114 +1,125 @@
before_script: before_script:
# run docker-compose commands from tests environment
- cd tests
# set stack isolation # set stack isolation
- export ISOLATION=buildpipeline${CI_PIPELINE_ID} - export ISOLATION=buildpipeline${CI_PIPELINE_ID}${CI_BUILD_NAME}
- export COMPOSE_PROJECT_NAME=${ISOLATION} - export COMPOSE_PROJECT_NAME=${ISOLATION}
- export TUPLE_C=$(expr ${CI_BUILD_ID} % 99) - export TUPLE_C=$(expr ${CI_BUILD_ID} % 99)
- echo ${TUPLE_C} - echo ${TUPLE_C}
# run docker-compose commands from tests environment
- cd tests
- cp .env-dist .env
after_script: after_script:
- export ISOLATION=buildpipeline${CI_PIPELINE_ID} - export ISOLATION=buildpipeline${CI_PIPELINE_ID}${CI_BUILD_NAME}
- export COMPOSE_PROJECT_NAME=${ISOLATION}
# run docker-compose commands from tests environment
- cd tests
- cp .env-dist .env
- docker-compose down -v --remove-orphans
- docker ps -f name=${ISOLATION} - docker ps -f name=${ISOLATION}
stages: stages:
- build - travis
- test - test
- cleanup - cleanup
build:
stage: build
script:
- docker-compose build
test: test:
stage: test stage: test
only:
- tests/base
- tests/all
script: script:
- docker-compose up -d - docker-compose up --build -d
- docker-compose run --rm php vendor/bin/phpunit -v --exclude caching,db - docker-compose run --rm php vendor/bin/phpunit -v --exclude caching,db,data --log-junit tests/_junit/test.xml
- docker-compose down -v --remove-orphans
test:caching: caching:
stage: test stage: test
only:
- tests/caching
- tests/all
script: script:
- export COMPOSE_PROJECT_NAME=${ISOLATION}caching - export COMPOSE_FILE=docker-compose.yml:docker-compose.${CI_BUILD_NAME}.yml
- docker-compose up -d - docker-compose up --build -d
# wait for mysql (retry 30 times) - docker-compose run --rm php vendor/bin/phpunit -v --group caching --exclude db
- docker-compose run --rm php bash -c "while ! curl mysql:3306; do ((c++)) && ((c==30)) && break; sleep 2; done"
- docker-compose run --rm php vendor/bin/phpunit -v --group caching
- docker-compose down -v --remove-orphans
test:db: db:
stage: test stage: test
only:
- tests/mysql
- tests/all
script: script:
- export COMPOSE_PROJECT_NAME=${ISOLATION}db - docker-compose up --build -d
- docker-compose up -d
- docker-compose run --rm php vendor/bin/phpunit -v --group db --exclude caching,mysql,pgsql,mssql,cubrid - docker-compose run --rm php vendor/bin/phpunit -v --group db --exclude caching,mysql,pgsql,mssql,cubrid
- docker-compose down -v --remove-orphans - docker-compose down -v --remove-orphans
test:db:mysql: mysql:
stage: test stage: test
only:
- tests/mysql
- tests/all
script: script:
- export COMPOSE_PROJECT_NAME=${ISOLATION}mysql - export COMPOSE_FILE=docker-compose.yml:docker-compose.${CI_BUILD_NAME}.yml
- docker-compose up -d - docker-compose up --build -d
# wait for db (retry X times) # wait for db (retry X times)
- docker-compose run --rm php bash -c "while ! curl mysql:3306; do ((c++)) && ((c==30)) && break; sleep 2; done" - docker-compose run --rm php bash -c "while ! curl mysql:3306; do ((c++)) && ((c==30)) && break; sleep 2; done"
- docker-compose run --rm php vendor/bin/phpunit -v --group mysql - docker-compose run --rm php vendor/bin/phpunit -v --group mysql
- docker-compose down -v --remove-orphans - docker-compose down -v --remove-orphans
test:db:pgsql: pgsql:
stage: test stage: test
only:
- tests/pgsql
- tests/all
script: script:
- export COMPOSE_PROJECT_NAME=${ISOLATION}pgsql - export COMPOSE_FILE=docker-compose.yml:docker-compose.${CI_BUILD_NAME}.yml
- docker-compose up -d - docker-compose up --build -d
# wait for db (retry X times) # wait for db (retry X times)
- docker-compose run --rm php bash -c 'while [ true ]; do curl postgres:5432; if [ $? == 52 ]; then break; fi; ((c++)) && ((c==25)) && break; sleep 2; done' - docker-compose run --rm php bash -c 'while [ true ]; do curl postgres:5432; if [ $? == 52 ]; then break; fi; ((c++)) && ((c==25)) && break; sleep 2; done'
- docker-compose run --rm php vendor/bin/phpunit -v --group pgsql - docker-compose run --rm php vendor/bin/phpunit -v --group pgsql
- docker-compose down -v --remove-orphans - docker-compose down -v --remove-orphans
test:db:mssql: cubrid:
stage: test stage: test
only: only:
- tests/mssql - tests/cubrid
- tests/all
script: script:
- cd mssql - cd cubrid
- export COMPOSE_PROJECT_NAME=${ISOLATION}mssql
# TODO: retry/wait for db
- docker-compose up --build -d - docker-compose up --build -d
# wait for db (retry X times) # wait for db (retry X times)
- docker-compose run --rm php bash -c 'while [ true ]; do curl mssql:1433; if [ $? == 52 ]; then break; fi; ((c++)) && ((c==15)) && break; sleep 5; done' - docker-compose run --rm php bash -c 'while [ true ]; do curl cubrid:1523; if [ $? == 56 ]; then break; fi; ((c++)) && ((c==20)) && break; sleep 3; done'
- sleep 10 - sleep 5
# Note: Password has to be the last parameter - docker-compose run --rm php /project/vendor/bin/phpunit -v --group cubrid
- docker-compose run --rm sqlcmd sqlcmd -S mssql -U sa -Q "CREATE DATABASE yii2test" -P Mircosoft-12345
- docker-compose run --rm php vendor/bin/phpunit -v --group mssql
- docker-compose down -v --remove-orphans - docker-compose down -v --remove-orphans
test:db:cubrid: mssql:
stage: test stage: test
only: only:
- tests/cubrid - tests/mssql
- tests/all
script: script:
- cd cubrid - cd mssql
- export COMPOSE_PROJECT_NAME=${ISOLATION}cubrid
- docker-compose up --build -d - docker-compose up --build -d
# wait for db (retry X times) # wait for db (retry X times)
- docker-compose run --rm php bash -c 'while [ true ]; do curl cubrid:1523; if [ $? == 56 ]; then break; fi; ((c++)) && ((c==20)) && break; sleep 3; done' - docker-compose run --rm php bash -c 'while [ true ]; do curl mssql:1433; if [ $? == 52 ]; then break; fi; ((c++)) && ((c==15)) && break; sleep 5; done'
- sleep 5 - sleep 3
- docker-compose run --rm php /project/vendor/bin/phpunit -v --group cubrid # Note: Password has to be the last parameter
- docker-compose run --rm sqlcmd sh -c 'sqlcmd -S mssql -U sa -Q "CREATE DATABASE yii2test" -P Microsoft-12345'
- docker-compose run --rm php vendor/bin/phpunit -v --group mssql
- docker-compose down -v --remove-orphans - docker-compose down -v --remove-orphans
test:travis: travis:
stage: test stage: travis
only: only:
- travis - travis
script: script:
- export COMPOSE_PROJECT_NAME=${ISOLATION}travis - export COMPOSE_FILE=docker-compose.yml:docker-compose.mysql.yml:docker-compose.pgsql.yml
- docker-compose up -d - docker-compose up --build -d
# TODO: retry/wait for db # TODO: retry/wait for db
- sleep 10 - sleep 10
- docker-compose run --rm php vendor/bin/phpunit -v --exclude mssql,cubrid,oci,wincache,xcache,zenddata,cubrid - docker-compose run --rm php vendor/bin/phpunit -v --exclude mssql,cubrid,oci,wincache,xcache,zenddata,cubrid
- docker-compose down -v --remove-orphans - docker-compose down -v --remove-orphans
# temporary cleanup stage
cleanup: cleanup:
stage: cleanup stage: cleanup
when: always when: always

41
Dockerfile

@ -1,45 +1,8 @@
FROM codemix/yii2-base:2.0-apache FROM dmstr/php-yii2:7.0-fpm-1.9-beta2-alpine-nginx
# Install system packages for PHP extensions recommended for Yii 2.0 Framework
RUN apt-key update && \
apt-get update && \
apt-get -y install \
g++ \
git \
libicu-dev \
libmcrypt-dev \
libfreetype6-dev \
libjpeg-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng12-dev \
libpq5 \
libpq-dev \
zlib1g-dev \
mysql-client \
openssh-client \
libxml2-dev \
--no-install-recommends && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Install PHP extensions required for Yii 2.0 Framework
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ && \
docker-php-ext-configure bcmath && \
docker-php-ext-install \
gd \
intl \
pdo_mysql \
pdo_pgsql \
mbstring \
mcrypt \
zip \
bcmath \
soap
# Project source-code # Project source-code
WORKDIR /project WORKDIR /project
ADD composer.* /project/ ADD composer.* /project/
RUN /usr/local/bin/composer install --prefer-dist RUN /usr/local/bin/composer install --prefer-dist
ADD ./ /project ADD ./ /project
ENV PATH /project/vendor/bin:${PATH}

26
Dockerfile-mssql

@ -1,5 +1,6 @@
FROM bylexus/apache-php7 FROM bylexus/apache-php7
# https://www.microsoft.com/en-us/sql-server/developer-get-started/php-ubuntu # https://www.microsoft.com/en-us/sql-server/developer-get-started/php-ubuntu
RUN apt-get update RUN apt-get update
RUN apt-get install -y curl apt-transport-https RUN apt-get install -y curl apt-transport-https
@ -7,26 +8,25 @@ RUN apt-get install -y curl apt-transport-https
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update RUN apt-get update \
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql && apt-get install -y unixodbc-dev-utf16 php-dev \
RUN apt-get install -y unixodbc-dev-utf16 && pecl install sqlsrv pdo_sqlsrv
RUN apt-get install -y php-dev
RUN pecl install sqlsrv pdo_sqlsrv
RUN echo "extension=/usr/lib/php/20151012/sqlsrv.so" >> /etc/php/7.0/apache2/php.ini RUN echo "extension=/usr/lib/php/20151012/sqlsrv.so" >> /etc/php/7.0/apache2/php.ini
RUN echo "extension=/usr/lib/php/20151012/pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini RUN echo "extension=/usr/lib/php/20151012/pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini
RUN echo "extension=/usr/lib/php/20151012/sqlsrv.so" >> /etc/php/7.0/cli/php.ini RUN echo "extension=/usr/lib/php/20151012/sqlsrv.so" >> /etc/php/7.0/cli/php.ini
RUN echo "extension=/usr/lib/php/20151012/pdo_sqlsrv.so" >> /etc/php/7.0/cli/php.ini RUN echo "extension=/usr/lib/php/20151012/pdo_sqlsrv.so" >> /etc/php/7.0/cli/php.ini
# TODO: temporary section ---> # IMPORTANT NOTICE! Install `msodbcsql` after `unixodbc-dev-utf16` and `pdo_sqlsrv`, due to dependency & build issues
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql
# Install system packages for composer (git) # Install system packages for composer (git)
RUN apt-get update && \ RUN apt-get update && \
apt-get -y install \ apt-get -y install \
git \ git \
php-curl \
--no-install-recommends && \ --no-install-recommends && \
apt-get clean && \ rm -rf /tmp/* /var/tmp/*
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Register the COMPOSER_HOME environment variable # Register the COMPOSER_HOME environment variable
ENV COMPOSER_HOME /composer ENV COMPOSER_HOME /composer
# Add global binary directory to PATH and make sure to re-export it # Add global binary directory to PATH and make sure to re-export it
@ -37,7 +37,8 @@ ENV COMPOSER_ALLOW_SUPERUSER 1
RUN curl -sS https://getcomposer.org/installer | php -- \ RUN curl -sS https://getcomposer.org/installer | php -- \
--filename=composer.phar \ --filename=composer.phar \
--install-dir=/usr/local/bin --install-dir=/usr/local/bin
# TODO: <--- end RUN composer.phar global require --optimize-autoloader \
"hirak/prestissimo"
# Project source-code # Project source-code
@ -49,4 +50,7 @@ ADD ./ /project
# https://github.com/Microsoft/msphpsql/issues/161 # https://github.com/Microsoft/msphpsql/issues/161
RUN apt-get install -y locales \ RUN apt-get install -y locales \
&& echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \ && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
&& locale-gen && locale-gen
# Debug installation
RUN dpkg -L msodbcsql

10
tests/.env-dist

@ -0,0 +1,10 @@
# docker-compose test environment
# Choose a flavour
#COMPOSE_FILE=docker-compose.yml:docker-compose.caching.yml
#COMPOSE_FILE=docker-compose.yml:docker-compose.mysql.yml
#COMPOSE_FILE=docker-compose.yml:docker-compose.postgres.yml
# Choose a version
DOCKER_MYSQL_IMAGE=percona:5.7
DOCKER_POSTGRES_IMAGE=postgres

2
tests/README.md

@ -103,7 +103,7 @@ Create database with sqlcmd
Create database (one-liner) Create database (one-liner)
docker-compose run --rm sqlcmd sqlcmd -S mssql -U sa -P Mircosoft-12345 -Q "CREATE DATABASE yii2test" docker-compose run --rm sqlcmd sqlcmd -S mssql -U sa -P Microsoft-12345 -Q "CREATE DATABASE yii2test"
Run MSSQL tests Run MSSQL tests

13
tests/docker-compose.caching.yml

@ -0,0 +1,13 @@
version: '2'
services:
php:
depends_on:
- redis
- memcached
redis:
image: redis
memcached:
image: memcached

15
tests/docker-compose.mysql.yml

@ -0,0 +1,15 @@
version: '2'
services:
php:
depends_on:
- mysql
mysql:
image: ${DOCKER_MYSQL_IMAGE}
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=yiitest
- MYSQL_USER=travis
- MYSQL_PASSWORD=travis

14
tests/docker-compose.pgsql.yml

@ -0,0 +1,14 @@
version: '2'
services:
php:
depends_on:
- postgres
postgres:
image: ${DOCKER_POSTGRES_IMAGE}
environment:
- POSTGRES_DB=yiitest
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres

30
tests/docker-compose.yml

@ -4,38 +4,18 @@ services:
php: php:
build: .. build: ..
working_dir: /project working_dir: /project
depends_on:
- postgres
- mysql
#volumes: #volumes:
# Enable for debugging # Enable for debugging, enabling tests might be slow for file access (data) on host-volume
#- ../tests:/project/tests #- ../tests:/project/tests
# - ../framework:/project/framework # - ../framework:/project/framework
# Tmpfs volume (experimental, asset tests may fail)
mysql: #tmpfs:
image: percona:5.7 # - /project/tests/runtime
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=yiitest
- MYSQL_USER=travis
- MYSQL_PASSWORD=travis
postgres:
image: postgres
environment:
- POSTGRES_DB=yiitest
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
redis:
image: redis
memcached:
image: memcached
networks: networks:
default: default:
ipam: ipam:
driver: default driver: default
config: config:
# prevent overlapping/duplicated networks, since docker assigns /16 subnets by default ranging from 10.x over 172.x to 192.168.x
- subnet: 10.100.1${TUPLE_C}.1/24 - subnet: 10.100.1${TUPLE_C}.1/24

11
tests/test-local.sh

@ -33,13 +33,18 @@ case $1 in
export TUPLE_C=$(expr ${CI_BUILD_ID} % 255) export TUPLE_C=$(expr ${CI_BUILD_ID} % 255)
echo ${TUPLE_C} echo ${TUPLE_C}
cd mssql cd mssql
export COMPOSE_PROJECT_NAME=${ISOLATION}mssql
docker-compose up --build -d docker-compose up --build -d
docker-compose run --rm php bash -c 'while [ true ]; do curl mssql:1433; if [ $? == 52 ]; then break; fi; ((c++)) && ((c==15)) && break; sleep 5; done' docker-compose run --rm php bash -c 'while [ true ]; do curl mssql:1433; if [ $? == 52 ]; then break; fi; ((c++)) && ((c==15)) && break; sleep 5; done'
sleep 10 sleep 10
docker-compose run --rm sqlcmd sqlcmd -S mssql -U sa -Q "CREATE DATABASE yii2test" -P Mircosoft-12345 docker-compose run --rm sqlcmd sh -c 'sqlcmd -S mssql -U sa -Q "CREATE DATABASE yii2test" -P Microsoft-12345'
sleep 10
docker-compose logs mssql
docker-compose config
pwd
docker-compose ps
docker-compose run --rm php php -i
docker-compose run --rm php vendor/bin/phpunit -v --group mssql docker-compose run --rm php vendor/bin/phpunit -v --group mssql
docker-compose down -v docker-compose down -v --remove-orphans
;; ;;
'pgsql') 'pgsql')
export ISOLATION=buildpipeline${CI_PIPELINE_ID} export ISOLATION=buildpipeline${CI_PIPELINE_ID}

Loading…
Cancel
Save