用于生产和本地开发的 GitLab CI/CD 配置和环境

问题描述 投票:0回答:1

我目前正在 laravel / docker compose 项目上试验 GitLab CI/CD,以增强我的部署和集成体验,但我无法找到正确的方法。由于我们是一个非常小的团队,并且我们的项目都使用规范化的 docker compose 环境,因此我们忽略了全局开发环境的创建,而只使用本地开发环境。我的需求是一个管道:

  • 在除 main 之外的任何分支上进行提交时运行测试
  • 当 main 发生更改时运行测试和部署(仅通过合并请求)

我想实现一个与此类似的架构(没有部署审核部分):GitLabCI/CD schema demo

我在本地Linux服务器(安装了docker和composer)中创建了一个gitlab运行器实例来运行管道。当我为主分支运行管道时,一切都很顺利:它运行测试并使用 gitlab runner 生成的构建目录中的 docker compose 文件部署容器,但是当我为任何其他分支执行管道时,它运行测试并无论如何仍然将代码发送到服务器,因此它会获得不应该的非生产代码。

这是我的 gitlab-ci.yml 文件:

stages:
  - build
  - test
  - deploy_production

cache:
  paths:
    - vendor/

build_composer:
  stage: build
  script:
    - composer install -n
  artifacts:
    paths:
      - ./vendor
  only:
    - main

pest_test:
  stage: test
  script:
    - ./vendor/bin/pest

larastan_test:
  stage: test
  script:
    - ./vendor/bin/phpstan analyse --memory-limit=2G --no-progress

deploy_production:
    stage: deploy_production
    script:
      - docker composee up -d
    rules:
      - if: $CI_COMMIT_BRANCH == "main"
        when: on_success

我不知道我是否应该在开发环境中创建另一个运行程序并使其在每次提交时运行测试阶段(感谢标签),或者我是否应该在 docker 环境中使用运行程序在 SSH 中发送代码而不是使用 gitlab runner 生成的构建目录。

当某些代码合并到 main 中时,是否与每次提交时运行测试相关?

预先感谢您的帮助。

laravel docker-compose gitlab continuous-integration gitlab-ci
1个回答
0
投票

您似乎正在尝试将应用程序直接安装到 GitLab 运行程序上。当管道被触发时,运行器根据Git策略从触发分支/合并请求下载代码,以便可以构建和测试。这里的最佳实践是将应用程序安装在不同的服务器上,这样源代码就不会被下一个运行的管道破坏。

一般来说,最好从功能分支构建和测试代码,以便主分支保持稳定。可以使用合并请求管道运行最后一轮测试,以确保 main 接收工作代码。

© www.soinside.com 2019 - 2024. All rights reserved.