Как использовать gitlab ci для тестирования и развертывания моего php-приложения? - PullRequest
0 голосов
/ 07 декабря 2018

У меня ниже docker-compose.yml

version: "2"
services:
    api:
        build:
            context: .
            dockerfile: ./build/dev/Dockerfile
        container_name: "project-api"
        volumes:
          # 1. mount your workdir path
          - .:/app
        depends_on:
          - mongodb
        links:
          - mongodb
          - mysql

    nginx:
        image: nginx:1.10.3
        container_name: "project-nginx"
        ports:
            - 80:80
        restart: always
        volumes:
            - ./build/dev/nginx.conf:/etc/nginx/conf.d/default.conf
            - .:/app
        links:
            - api
        depends_on:
            - api
    mongodb:
        container_name: "project-mongodb"
        image: mongo:latest
        environment:
          - MONGO_DATA_DIR=/data/db
          - MONGO_LOG_DIR=/dev/null
        ports:
            - "27018:27017"
        command: mongod --smallfiles --logpath=/dev/null # --quiet
    mysql:
      container_name: "gamestore-mysql"
      image: mysql:5.7.23
      ports:
        - "3306:3306"
      environment:
        MYSQL_DATABASE: project_test
        MYSQL_USER: user
        MYSQL_PASSWORD: user
        MYSQL_ROOT_PASSWORD: root

И ниже .gitlab-ci.yml

test:
  stage: test
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_DRIVER: overlay2
  before_script:
    - apk add --no-cache py-pip
    - pip install docker-compose
  script:
    - docker-compose up -d
    - docker-compose exec -T api ls -la
    - docker-compose exec -T api composer install
    - docker-compose exec -T api php core/init --env=Development --overwrite=y
    - docker-compose exec -T api vendor/bin/codecept -c core/common run
    - docker-compose exec -T api vendor/bin/codecept -c core/rest run

Когда я запускаю свой конвейер gitlab, он становится полевым, потому что я думаю, что gitlab не может работать сслужбы, запущенные docker-compose.

Ошибка говорит о том, что mysql отклоняет соединение.

Мне нужно это соединение, потому что мой тест, написанный с помощью codeception, проверит мои модели и действия API.

Я хочу проверять свои ветки каждый раз, когда их нажимают и, если они проходят, только в развернутом развертывании на тестовом сервере и в главном развертывании на рабочем сервере.

Какой лучший способ запустить мой тест в gitlab ci /CD, а затем развернуть их на моем сервере?

1 Ответ

0 голосов
/ 07 декабря 2018

Вы должны использовать службы GitLab CI вместо docker-compose.

Вы должны выбрать один образ в качестве основного, в котором будут выполняться ваши команды, а другие контейнеры - просто как службы.

К сожалению, службы CI не могут иметь подключенные файлы в gitlab, вам нужнобыть в состоянии настроить их с помощью переменных env, или вам нужно создать собственное изображение с файлами в нем (вы можете сделать это на этапе CI)

Я бы посоветовал вам не использовать nginx и использовать встроенный php сервер для тестов.Если это невозможно (у вас есть spicifix nginx config), вам нужно будет создать собственный образ nginx с скопированными в него файлами.

Также для PHP (сервис api в docker-compose.yaml, я полагаю), вынужно либо собрать команду image ahed, либо скопировать команду из файла dockerfile в script.

Так что результат должен выглядеть примерно так:

test:
  stage: test
  image: custom-php-image #build from ./build/dev/Dockerfile
  services:
    - name: mysql:5.7.23
      alias: gamestore-mysql
    - name: mongo:latest
      alias: project-mongodb
      command: mongod --smallfiles --logpath=/dev/null
  variables:
    MYSQL_DATABASE: project_test
    MYSQL_USER: user
    MYSQL_PASSWORD: user
    MYSQL_ROOT_PASSWORD: root

    MONGO_DATA_DIR: /data/db
    MONGO_LOG_DIR: /dev/null
  script:
    - api ls -la
    - composer install
    - php core/init --env=Development --overwrite=y

    - php -S localhost:8000 # You need to configure your built-in php server probably here 

    - vendor/bin/codecept -c core/common run
    - vendor/bin/codecept -c core/rest run

Я не знаю ваше приложение, поэтомувам, вероятно, придется внести некоторые изменения.

Подробнее об этом:

...