132 lines
2.8 KiB
YAML
132 lines
2.8 KiB
YAML
stages:
|
|
- build
|
|
- test
|
|
- docker
|
|
- deploy
|
|
|
|
variables:
|
|
MYSQL_DATABASE: portfolio
|
|
MYSQL_ROOT_PASSWORD: password
|
|
|
|
php-build-job:
|
|
stage: build
|
|
image: composer:2
|
|
script:
|
|
- composer install
|
|
- php artisan key:generate
|
|
artifacts:
|
|
paths:
|
|
- .env.testing
|
|
- vendor/
|
|
cache:
|
|
paths:
|
|
- vendor/
|
|
|
|
node-build-job:
|
|
stage: build
|
|
image: node:16
|
|
script:
|
|
- yarn
|
|
- yarn dev
|
|
artifacts:
|
|
paths:
|
|
- public/js
|
|
- public/css
|
|
- public/fonts
|
|
- public/mix-manifest.json
|
|
cache:
|
|
paths:
|
|
- node_modules/
|
|
|
|
test-job:
|
|
stage: test
|
|
image: php:8-cli
|
|
services:
|
|
- mysql:5
|
|
needs:
|
|
- php-build-job
|
|
- node-build-job
|
|
dependencies:
|
|
- php-build-job
|
|
- node-build-job
|
|
script:
|
|
- pecl install xdebug
|
|
- echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini
|
|
- echo "xdebug.mode=coverage" >> /usr/local/etc/php/conf.d/xdebug.ini
|
|
- export DB_CONNECTION=mysql
|
|
- export DB_HOST=mysql
|
|
- export DB_PORT=3306
|
|
- export DB_DATABASE="$MYSQL_DATABASE"
|
|
- export DB_USERNAME=root
|
|
- export DB_PASSWORD="$MYSQL_ROOT_PASSWORD"
|
|
- php artisan migrate:fresh --seed --env=.env.testing
|
|
- ./vendor/bin/phpunit --coverage-text --coverage-cobertura php-coverage.xml
|
|
artifacts:
|
|
reports:
|
|
cobertura: php-coverage.xml
|
|
coverage: '/^\s*Lines:\s*\d+(.\d+)?\%/'
|
|
|
|
docker-auth-job:
|
|
stage: docker
|
|
image: docker:stable
|
|
only:
|
|
refs:
|
|
- master
|
|
script:
|
|
- docker login --username "$REGISTRY_USER" --password "$REGISTRY_PASSWORD" "$REGISTRY_BASE_URL"
|
|
- cp "/root/.docker/config.json" "./build/.dockerconfigjson"
|
|
artifacts:
|
|
paths:
|
|
- build/.dockerconfigjson
|
|
|
|
docker-build-job:
|
|
stage: docker
|
|
image: docker:stable
|
|
only:
|
|
refs:
|
|
- master
|
|
needs:
|
|
- test-job
|
|
tags:
|
|
- docker
|
|
script:
|
|
- docker -H unix:///var/run/docker.sock image build -t "$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHORT_SHA" ./
|
|
|
|
docker-publish-job:
|
|
stage: docker
|
|
image: docker:stable
|
|
only:
|
|
refs:
|
|
- master
|
|
needs:
|
|
- docker-auth-job
|
|
- docker-build-job
|
|
dependencies:
|
|
- docker-auth-job
|
|
tags:
|
|
- docker
|
|
script:
|
|
- mkdir "/root/.docker/"
|
|
- cp "./build/.dockerconfigjson" "/root/.docker/config.json"
|
|
- docker -H unix:///var/run/docker.sock image push "$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHORT_SHA"
|
|
|
|
deploy-job:
|
|
stage: deploy
|
|
only:
|
|
refs:
|
|
- master
|
|
when: manual
|
|
image: google/cloud-sdk
|
|
needs:
|
|
- docker-auth-job
|
|
- docker-publish-job
|
|
dependencies:
|
|
- docker-auth-job
|
|
script:
|
|
- export KUBECONFIG="$KUBE_AUTH"
|
|
- cp "$ENV_PRODUCTION" "./build/.env.production"
|
|
- cp "$MYSQL_ENV" "./build/mysql-secret.env"
|
|
- cd "./build"
|
|
- sed -i "s/DOCKER_IMAGE_TAG/${CI_COMMIT_SHORT_SHA}/g" kustomization.yaml
|
|
- kubectl apply -k ./
|