从零打造自己的CI/CD系统|php项目部署v1版本
今天我们结合前面所讲内容进行
PHP
项目的完整部署流程,当然我们不会一步到位,会慢慢迭代完善部署的整个过程。
环境需求
•Ansible•php 环境•composer 工具
Ansible 安装部署
•安装ansible•调整配置文件ansible.cfg
代码语言:javascript复制pip install ansible
php环境安装部署
•不要想着去源码编译•先安装remi源•然后在安装PHP•remi源[1]
Example
代码语言:javascript复制yum install php php-devel php-fpm enablerepo=remi-php73
composer安装部署
•composer安装[2]•composer镜像配置,如果自己有私服的话,那就配置私服,没有私服的话,那就用阿里云的
代码语言:javascript复制composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
项目demo
•由于时间原因,就没有从头搞起,在GitHub上找了一个demo,php-laravel-hello-world[3], 我本地编译过,运行没问题
Ansible roles编写和存放
•Ansible roles存放位置在/etc/ansible/roles下,具体还要看ansible.cfg里如何定义roles的路径•使用的时候直接采用单独目录的形式来存放该应用对应的配置文件
Ansible和远程机器通信
•远程机器上部署应用建议使用普通用户,然后把发布机器上的发布账号和远程机器上的应用账号做互信,这样推送编译后的产物就不用交互式输入密码确认了
Ansible roles编写
主要操作流程
•git clone•compile•sync•next machine
编写roles
•切记不要手动创建roles对应的目录,我是见过不少小伙伴去手动一个个创建目录,真的是。。。
代码语言:javascript复制[root@zhuima roles]# ansible-galaxy init php-laravel-hello-world
WARNING: yacc table file version is out of date
- php-laravel-hello-world was created successfully
[root@zhuima roles]#
目录结构如下
代码语言:javascript复制[root@zhuima php-laravel-hello-world]# tree .
.
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ ├── composer.yml
│ ├── deploy.yml
│ ├── directory.yml
│ ├── main.yml
│ └── synchronize.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
8 directories, 12 files
注意事项
•本地和远程只保留历史的三份部署记录,便于回滚•每一步操作都要注册,下一步操作之前判断上一步执行结果成功与否•执行数据流的过程中,屏蔽异常主动退出,人工捕获异常,然后在退出之前清理前面执行的所有操作•composer生产使用的时候,尽量加上--no-dev --optimize-autoloader --no-interaction
使用
•命令行传入变量,然后实现参数的传递
代码语言:javascript复制ansible-playbook -i hlists deploy.yml -e "pname=php-laravel-hello-world env=dev branch=master git_repo=https://github.com/niwasawa/php-laravel-hello-world"
总结
时间比较赶,并没有实现smoketest和更多复杂的逻辑,只是单纯的实现了简单的部署操作骨架,剩下的明天我们继续。
引用链接
[1]
remi源: https://rpms.remirepo.net/
[2]
composer安装: https://www.phpcomposer.com/
[3]
php-laravel-hello-world: https://github.com/niwasawa/php-laravel-hello-world