Lullabot / drupal9ci

Command Line Interface for implementing Continuous Integration in Drupal 9
GNU General Public License v3.0
161 stars 55 forks source link

AlreadyInstalledException #40

Closed stuartabrown closed 2 years ago

stuartabrown commented 5 years ago

Hi,

I've been following the guide with CircleCI but am having issues with the robo jobs e.g. robo job:generate-coverage-report - in fact all the jobs create the same error:

In install.core.inc line 536:

  [Drupal\Core\Installer\Exception\AlreadyInstalledException]                  
  <ul>                                                                         
  <li>To start over, you must empty your existing database and copy <em>defau  
  lt.settings.php</em> over <em>settings.php</em>.</li>                        
  <li>To upgrade an existing installation, proceed to the <a href="default/up  
  date.php">update script</a>.</li>                                            
  <li>View your <a href="http://:default">existing site</a>.</li>              
  </ul>

Looking here https://github.com/acquia/blt/issues/720 there seems to have been a similar issue which is due to the db connection using localhost rather than 127.0.0.1. Is there any advice on how to set this up (in settings.local.php?) if this is the correct resolution?

deviantintegral commented 5 years ago

We don't use an existing database for code coverage reports. Are you importing your database by hand before? See this line that triggers a clean site install (just so we have a database to run kernel tests against): https://github.com/Lullabot/drupal8ci/blob/master/dist/circleci/.circleci/RoboFile.php#L50

stuartabrown commented 5 years ago

@deviantintegral thanks for the reply, and sorry for taking a while to get back.

I'm not importing a DB by hand, I just have CircleCI watching a github repo and running on a Pull request. The Drupal project does have DB connection details in settings.php

$databases['default']['default'] = array (
  'database' => 'foo',
  'username' => 'bar',
  'password' => 'baz',
  'prefix' => '',
  'host' => 'mariadb',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

If this is causing the issue do I need to use a local.settings.php somehow?

juampynr commented 5 years ago

By looking at https://github.com/Lullabot/drupal8ci/blob/master/dist/circleci/.circleci/RoboFile.php#L39 it seems that coverage reports do use a database (this might be for kernel tests).

Here is the line that is throwing the error:

image

This does not make much sense because we intentionally copy a settings.local.php which contains the database credentials so drush can run drush site:install without requiring a connection string. I don't understand how the execution flow is ending up here.

@stuartabrown can you post here all or part of your circleci file and any other changes you have made?

stuartabrown commented 5 years ago

thanks @juampynr.

In .circleci directory i have the below: circle

the content of config.yml is below:

# CircleCI integration with Drupal 8.

# Reusable steps.

## Copies .circle/Robofile to the repository root.
copy_robo: &copy_robo
  run:
    name: Copy RoboFile.php
    command: cp .circleci/RoboFile.php .

## Defines images and working directory.
defaults: &defaults
  docker:
    - image: juampynr/drupal8ci:latest

    - image: selenium/standalone-chrome-debug:3.7.1-beryllium

    - image: mariadb:10.3
      environment:
        MYSQL_ALLOW_EMPTY_PASSWORD: 1

  working_directory: /var/www/html

## Defines the cache restoring mechanism.
restore_cache: &restore_cache
  # We use the composer.lock as a way to determine if we can cache our build.
  keys:
  - v1-dependencies-{{ checksum "composer.lock" }}
  # fallback to using the latest cache if no exact match is found
  - v1-dependencies-

## Defines the cache saving mechanism.
save_cache: &save_cache
  paths:
    - ./vendor
  key: v1-dependencies-{{ checksum "composer.lock" }}

#Jobs

## Job to run Unit and Kernel tests.
unit_kernel_tests: &unit_kernel_tests
  <<: *defaults
  steps:
    - checkout
    - *copy_robo
    - restore_cache: *restore_cache
    - run:
        name: Run PHPUnit tests
        command: robo job:run-unit-tests
    - store_test_results:
        path: /var/www/html/artifacts/phpunit
    - store_artifacts:
        path: /var/www/html/artifacts
    - save_cache: *save_cache

## Job to run the update path and Behat tests.
behat_tests: &behat_tests
  <<: *defaults
  steps:
    - checkout
    - *copy_robo
    - restore_cache: *restore_cache
    - run:
        name: Run Behat tests
        command: robo job:run-behat-tests
    - save_cache: *save_cache
    - store_test_results:
        path: /var/www/html/artifacts/behat
    - store_artifacts:
        path: /var/www/html/artifacts

## Job to check coding standards.
code_sniffer: &code_sniffer
  <<: *defaults
  steps:
    - checkout
    - *copy_robo
    - restore_cache: *restore_cache
    - run:
        name: Inspect coding standards
        command: robo job:check-coding-standards
    - store_test_results:
        path: /var/www/html/artifacts/phpcs
    - store_artifacts:
        path: /var/www/html/artifacts
    - save_cache: *save_cache

## Job to check test coverage.
code_coverage: &code_coverage
  <<: *defaults
  steps:
    - checkout
    - *copy_robo
    - restore_cache: *restore_cache
    - run:
        name: Generate code coverage report
        command: robo job:generate-coverage-report
    - store_artifacts:
        path: /var/www/html/artifacts
    - save_cache: *save_cache

# Declare all of the jobs we should run.
version: 2
jobs:
  run-unit-kernel-tests:
     <<: *unit_kernel_tests
  run-behat-tests:
     <<: *behat_tests
  run-code-sniffer:
     <<: *code_sniffer
  run-code-coverage:
     <<: *code_coverage

# Declare a workflow that runs all of our jobs in parallel.
workflows:
  version: 2
  test_and_lint:
    jobs:
      - run-unit-kernel-tests
      - run-behat-tests
      - run-code-sniffer
      - run-code-coverage
juampynr commented 5 years ago

Hi @stuartabrown!

The above files look fine to me. At first sight I cannot spot any issues with them. Did you find out anything else? You could either run the job locally using the CircleCI CLI which you could debut or you could also re-run a failing job with SSH enabled (it's a dropdown at the top right corner when you view a job at CircleCI).