PHP + Apache + Selenium: ApachePHP does not get environment vars


#1

Hi there,

after spending quite some time trying to get my selenium tests running on circleCI I am stuck at a point where I do not know any further:
I have some environment variables which store the credentials for the database. The PHPUnit tests have these _ENV variables and succeed. When starting the selenium tests and opening a page on localhost on selenium, my PHP framework displays an error message that it could not connect to the Database. The reason for this is that the _ENV database credentials seem not to be available for PHP “inside” Apache.

Is there a way that Apache Webserver uses these environment variables as well? See my config.yml below.

Best regards
Philipp

# PHP CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-php/ for more details
#
version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      - image: circleci/php:7.2-apache-browsers
        environment:
          DB_STRING:                  mysql:host=127.0.0.1;dbname=eoo_test
          DB_USER:                    root
          DB_PASSWORD:                test
      
      # Specify service dependencies here if necessary
      # CircleCI maintains a library of pre-built images
      # documented at https://circleci.com/docs/2.0/circleci-images/
      - image: circleci/mysql:5.7.24
        environment:
          MYSQL_ROOT_PASSWORD: test
          MYSQL_DATABASE: eoo_test

    working_directory: ~/repo

    steps:
      - checkout
      
      #install php extensions needed
      - run: sudo apt install -y libpng-dev
      - run: sudo docker-php-ext-install gd
      - run: sudo apt install -y mysql-client
      - run: sudo docker-php-ext-install pdo_mysql
      - run: sudo docker-php-ext-enable pdo_mysql

      #config apache
      - run: sudo chmod 777 /etc/apache2/sites-enabled
      - run: sudo cp /home/circleci/repo/.circleci/example.conf /etc/apache2/sites-available/eoo.conf
      - run: sudo a2ensite eoo
      - run: sudo service apache2 restart
      
      #selenium
      - run: mkdir test-reports
      - run:
          name: Download Selenium
          command: curl -O http://selenium-release.storage.googleapis.com/3.5/selenium-server-standalone-3.5.3.jar
      - run:
          name: Start Selenium
          command: java -jar selenium-server-standalone-3.5.3.jar -log stdout
          Xvfb: 7055
          background: true

      #install composer dependecies
      - run: composer install -n --prefer-dist
        
      # run tests!
      - run:
          name: Run Unit tests
          command: vendor/bin/phpunit

#2

It looks like you are wanting to show a YAML document. In Markdown, there are two ways of doing that so the indentation is preserved. The easiest way is to use two sets of triple backticks, on their own line, like so:

```
YAML here
```

Would you edit your post? The first part appears to not be formatted.


#3

youre absolutely right, formatted it


#4

The first thing to check is to get an SSH session onto your post-fail build server, and do a set to ensure the variables are there.

If that is OK, then you may need to expose them in Apache with the correct Apache directive. Try PassEnv. This is a security feature to ensure that only system variables you want to make available are exposed.


#5

Hi,

thanks a lot for that quick answer The additional _ENV vars in gerneral are there, only Apache is lacking them. I var_dumped(_ENV) and in selenium echoed the content of the tag to get that output, only 8 or 9 Apache internal environment vars were set.
So i will look into PassEnv.

If there is some pre-existing image for PHP + Selenium, I could use that as well, I just started CircleCi and am not fixed to a certain image yet.