实现逻辑
- 使用GitHub Action监听到代码仓库的提交
push
操作,触发工作流 - 拉取最新代码推送到服务器
- 安装依赖
composer install
服务器端配置
安装composer
# 全局安装
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
# 切换阿里云镜像源
全局配置:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
取消配置:composer config -g --unset repos.packagist
生成SSH密钥对
# 生成名为test的ssh 公钥和秘钥,-f 文件名 -C 备注
ssh-keygen -t rsa -f test -C "test@root.com"
配置公钥
# 将公钥加入到authorized_keys
cat test.pub >> authorized_keys
GitHub仓库配置
设置仓库Secret
打开指定代码仓库,点击 Settings 标签,找到 Secrets 设定,添加如下Secret以备后续使用
Name | Value | 说明 |
---|---|---|
SERVER_KEY | ----BEGIN RSA PRIVATE KEY-----… | ssh的私钥,就是服务器建立ssh的私钥 |
SERVER_HOST | 如:127.0.0.1 | 服务器连接地址 |
SERVER_PORT | 如:22(默认) | 服务器连接端口 |
SERVER_USERNAME | 如:root | 服务器登录用户名 |
SERVER_DESTINATION | 如:/tmp/test | 部署代码的服务器目录 |
编写工作流
在仓库根目录中创建.github/workflows/deploy.yml,yml文件名可自定义,文件内容如下:
# 工作流名称,可自定义
name: test
# 触发条件
on:
push:
branches: [ master ]
# 任务
jobs:
deploy:
# 使用ubuntu系统镜像运行自动化脚本
runs-on: ubuntu-latest
# 自动化步骤
steps:
# 第一步,下载代码仓库
- uses: actions/checkout@v2
# 第二步,推文件到服务器,使用rsync
- name: Deploy to Server
uses: AEnterprise/rsync-deploy@v1.0
env:
DEPLOY_KEY: ${{ secrets.SERVER_KEY }}
ARGS: -avz --no-owner --no-group --no-perms --progress --exclude='.*' --exclude='/vendor' --exclude='storage/logs/' --delete
SERVER_PORT: ${{ secrets.SERVER_PORT }}
# 要推送的文件夹,路径相对于代码仓库的根目录
FOLDER: ./
SERVER_IP: ${{ secrets.SERVER_HOST }}
USERNAME: ${{ secrets.SERVER_USERNAME }}
SERVER_DESTINATION: /tmp/laravel-test
# 第三步,登录服务器,执行安装依赖等操作
- name: Execute Script
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SERVER_KEY }}
script: |
cd /tmp/laravel-test
chmod -R 777 storage/
composer install