1

导语

关于 CI/CD 定义,从这篇文章中摘抄如下

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”)。
具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持。

刚好近期有时间,改了以下代码的部署方式。最开始是手动部署,后来改成 Git Hook,接着想要尝试 GitLab 的 CI/CD,可惜服务器硬件不足,改为 Laravel Envoy
了解到 GitHub Actions,可以在 Marketplace 找到可用的 Actions,而且提供的虚拟机配置也不错,所以选择了它。

CI/CD 流程

只是应用在我的个人项目,配置、流程都会简单一些,完整代码会放在下面的链接中。

Build

就拿这一步举例好了。这里的作用是尝试 Build 代码。设置了 nameBuild,运行在 ubuntu-latest,设置了 node-version13
开启了两个 docker 服务,分别为 mysqlredis,同时配置了相关的参数。
接下来是具体的 steps,依次是 checkout 代码、copy .env,然后 composernode 的安装,生成 key 以及设置目录权限,最后执行 laravel 的 migrate 命令。
到此执行顺利的话,说明 Build 是没有问题的。

build:
    name: Build
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [13]

    services:
      mysql:
        image: mysql:5.7
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_DATABASE: laravel
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
      redis:
        image: redis
        ports:
          - 6379:6379
        options: --name redis

    steps:
      - uses: actions/checkout@v2
      - name: Copy .env
        run: php -r "file_exists('.env') || copy('.env.ci', '.env');"
      - name: Composer Install
        run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist
      - uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - name: Npm Install And Build
        run: |
          npm install
          npm run prod
      - name: Generate Key
        run: php artisan key:generate
      - name: Directory Permissions
        run: chmod -R 777 storage bootstrap/cache
      - name: Database Migrate
        run: php artisan migrate

Test

Test 是在 Build 的基础之上,修改一些参数,然后增加 PHPunitCypress 的测试。这里就体现了 GitHub Actions 的一些优势,可以在 Cypress 中找到很多案例,修改一些参数就可以直接使用。

Deploy

在经过 Test 后,就可以部署到生产环境了。简单的话,直接同步代码就可以了。需要 queue restart 的话,可以使用 ssh Actions 执行。
这里也有一个 GitHub Actions 的优势,node 不需要担心网络环境,有些情况下虽然改了国内镜像,依然有失败的可能,所以在 GitHub Actions 中 npm run prod 后,将文件同步到服务器就好了。

结语

GitHub Actions 还有很多功能,这里只是应用了最简单的。以上的示例只是个人项目,还有很多不足,后续会逐步改进。


参考资料:ci.ymlGitHub Actions 文档GitHub Actions 入门教程CI/CD是什么?如何理解持续集成、持续交付和持续部署


Haoyuqi
472 声望23 粉丝

PHPer


« 上一篇
Composer 包开发