Personal_Website/.gitlab-ci.yml

114 lines
2.5 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
- cp .env.testing .env
- php artisan key:generate
artifacts:
paths:
- .env
- vendor/
cache:
paths:
- vendor/
php-test-job:
stage: test
image: php:8-cli
services:
- mysql:5
needs:
- php-build-job
dependencies:
- php-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
- source .env
- 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"
- ./vendor/bin/phpunit --coverage-cobertura code-coverage.xml
artifacts:
reports:
cobertura: code-coverage.xml
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:
- php-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 ./