首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用gitlab ci测试和部署我的php应用程序?

如何使用gitlab ci测试和部署我的php应用程序?
EN

Stack Overflow用户
提问于 2018-12-07 12:31:57
回答 1查看 2K关注 0票数 1

我有低于docker-compose.yml

代码语言:javascript
复制
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

代码语言:javascript
复制
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无法处理由运行的服务。

错误说mysql拒绝连接。

我需要这种连接,因为我的测试是由共同欺骗编写的,它将测试我的模型和api操作。

我希望每次都要测试我的分支,每次都要测试它们,如果只是在开发、部署到测试服务器和在生产服务器上的主部署中通过它们的话。

在gitlab ci/cd中运行我的测试并在我的服务器上部署它们的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-07 17:27:06

你应该使用GitLab CI服务,而不是坞式写作。

您必须选择一个映像作为主要内容,在其中运行命令,并选择其他容器作为服务。

遗憾的是,CI服务不能在gitlab中挂载文件,您必须能够用env变量配置它们,或者您需要在其中创建自己的映像(您可以在CI阶段完成)

我建议您不要使用nginx,使用内置php服务器进行测试。这是不可能的(您有spicifix配置),您需要在其中使用复制的文件构建自己的nginx映像。

另外,对于PHP (我假设是docker-compose.yaml中的api服务),您需要要么构建映像,要么将命令从dockerfile复制到script

所以结果应该是:

代码语言:javascript
复制
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

我不知道你的应用程序,所以你可能需要做一些调整。

关于这一点的更多内容:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53669615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档