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/ 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 - 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 test --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 ./