导语
关于 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 代码。设置了 name
为 Build
,运行在 ubuntu-latest
,设置了 node-version
为 13
。
开启了两个 docker 服务,分别为 mysql
和 redis
,同时配置了相关的参数。
接下来是具体的 steps
,依次是 checkout
代码、copy .env
,然后 composer
和 node
的安装,生成 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 的基础之上,修改一些参数,然后增加 PHPunit
和 Cypress
的测试。这里就体现了 GitHub Actions 的一些优势,可以在 Cypress 中找到很多案例,修改一些参数就可以直接使用。
Deploy
在经过 Test 后,就可以部署到生产环境了。简单的话,直接同步代码就可以了。需要 queue restart 的话,可以使用 ssh
Actions 执行。
这里也有一个 GitHub Actions 的优势,node
不需要担心网络环境,有些情况下虽然改了国内镜像,依然有失败的可能,所以在 GitHub Actions 中 npm run prod
后,将文件同步到服务器就好了。
结语
GitHub Actions 还有很多功能,这里只是应用了最简单的。以上的示例只是个人项目,还有很多不足,后续会逐步改进。
参考资料:ci.yml、GitHub Actions 文档、GitHub Actions 入门教程、CI/CD是什么?如何理解持续集成、持续交付和持续部署。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。