Skip to content

GitLab CI/CD configuration for Symfony

GitLab CI/CD configuration for Symfony https://gist.github.com/kariae/09ab219d80c38206775d831df2684bbf

.gitlab-ci.yml

variables:
    REGISTRY_URL: registry.lekode.com:5000
    IMAGE_NAME: app
    BUILD_CODE_IMAGE: $REGISTRY_URL/$IMAGE_NAME:$CI_COMMIT_REF_NAME
    LATEST_CODE_IMAGE: $REGISTRY_URL/$IMAGE_NAME:latest

stages:
  - test
  - install
  - build
  - deploy

test:
  stage: test
  image: kariae/symfony-php
  tags:
    - test
  services:
    - postgres

  variables:
    POSTGRES_USER: lekode-test
    POSTGRES_PASSWORD: lekode-test-pass
    POSTGRES_DB: lekode-db
    DATABASE_HOST: postgres
    DATABASE_PORT: "5432"

  artifacts:
    expire_in: 1 day
    paths:
      - vendor/
      - app/config/parameters.yml
      - var/bootstrap.php.cache

  before_script:
    - composer config cache-files-dir /cache/composer

  cache:
    paths:
      - /cache/composer
      - ./vendor

  script:
    - composer install --optimize-autoloader
    - vendor/bin/simple-phpunit

prepare-production:
  stage: install
  image: kariae/symfony-php
  dependencies: []
  tags:
    - test
  only:
    - tags
  services:
    - postgres

  variables:
    POSTGRES_USER: lekode-test
    POSTGRES_PASSWORD: lekode-test-pass
    POSTGRES_DB: lekode-db
    DATABASE_HOST: postgres
    DATABASE_PORT: "5432"

  artifacts:
    expire_in: 1 day
    paths:
      - vendor/
      - app/config/parameters.yml
      - var/bootstrap.php.cache

  before_script:
  - composer config cache-files-dir /cache/composer

  cache:
    paths:
      - /cache/composer
      - ./vendor

  script:
    - export SYMFONY_ENV=prod
    - composer install --no-dev --optimize-autoloader
    - php bin/console cache:clear --env=prod --no-debug
    - php bin/console cache:warmup --env=prod --no-debug

build-staging:
  stage: build
  dependencies:
    - test
  only:
    - master
  image: docker:latest
  tags:
    - build
  services:
    - docker:dind
  script:
    - echo $LATEST_CODE_IMAGE
    - ls -la
    - docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD $REGISTRY_URL
    - docker build --tag="$LATEST_CODE_IMAGE" .
    - docker push $LATEST_CODE_IMAGE

build-production:
  stage: build
  dependencies:
    - prepare-production
  image: docker:latest
  only:
    - tags
  tags:
    - build
  services:
    - docker:dind
  script:
    - echo $BUILD_CODE_IMAGE
    - ls -la
    - docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD $REGISTRY_URL
    - docker build --tag="$BUILD_CODE_IMAGE" .
    - docker push $BUILD_CODE_IMAGE

deploy-staging:
  stage: deploy
  dependencies: []
  tags:
    - deploy
  image: cdrx/rancher-gitlab-deploy
  services:
    - docker:dind
  only:
    - master
  script:
    - upgrade --stack Application --service php-fpm --finish-upgrade --sidekicks --new-sidekick-image php-fpm-app $LATEST_CODE_IMAGE
    - upgrade --stack Application --service nginx --finish-upgrade --sidekicks --new-sidekick-image nginx-app $LATEST_CODE_IMAGE

deploy-production:
  stage: deploy
  dependencies: []
  tags:
    - deploy
  image: cdrx/rancher-gitlab-deploy
  services:
    - docker:dind
  only:
    - tags
  script:
    - upgrade --stack Application --service php-fpm --finish-upgrade --sidekicks --new-sidekick-image php-fpm-app $LATEST_CODE_IMAGE
    - upgrade --stack Application --service nginx --finish-upgrade --sidekicks --new-sidekick-image nginx-app $LATEST_CODE_IMAGE
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information