前言:项目部署至服务器,一般而言,只需要将打包后的静态代码上传到服务器指定位置,如果配置的是nginx web服务器,再执行刷新相关命令即可。本文记录1panel运维管理面板下,结合GitHub Action自动化部署项目打包代码至云服务器的脚本编写逻辑。
一、GitHub Actions环境准备
GitHub Actions脚本的执行涉及一些敏感变量,在GitHub仓库中可以设置隐形变量防止暴露在外,只有在 GitHub Actions 中才能使用到
环境变量含义:
- KEY(密钥)
- PASSPHRASE(加密私钥的密码)
- SERVER_IP(云服务器公网IP)
- USERNAME(云服务器登录用户名, 通常为root)
📌 KEY
和PASSPHRASE
分别为下面截图中的2和1
二、GitHub Actions脚本编写
脚本需要做的事情有如下几点:
- 项目打包成静态文件
- 将打包后的静态文件上传至云服务器指定文件夹
打包成静态文件
执行项目打包命令
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'
- run: |
pnpm install
pnpm build
mv apps/test-project/dist/ ./dist/
上传服务器
利用scp-action将指定文件夹上传至服务器目标文件夹
- name: Scp file to aliyun
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
passphrase: ${{ secrets.PASSPHRASE }}
tar_dereference: true
rm: true
source: 'dist/*'
target: '/opt/1panel/apps/openresty/openresty/www/sites/test.com/index'
上述脚本代码只是上传,不能在服务器进行相关命令操作文件,还需要利用ssh-action添加如下脚本:
- name: executing remote ssh commands using key
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
passphrase: ${{ secrets.PASSPHRASE }}
script: |
mv /opt/1panel/apps/openresty/openresty/www/sites/test.com/index/dist/* /opt/1panel/apps/openresty/openresty/www/sites/test.com/index/
这个脚本主要作用是将文件内容层级提升
因为本文章记录的是基于集成环境前端项目部署,只是打包后静态文件的替换,所以不涉及重启相关命令操作。
如果你的环境不是继承运维面板(1panel/宝塔 等)的web服务器,而是手动搭建web服务器,则在这里可以写一些相关命令,比如nginx重启、node重启、docker重启指定容器……
eg:docker restart project-name
三、最终代码
- 在GitHub仓库内添加文件
.github/workflows/server.yml
- 结合上述各个步骤的子代码,再添加部分GitHub Actions触发条件逻辑代码,整个脚本文件就完成了。
name: Aliyun Server Deploy
on:
push:
tags:
- release-**
jobs:
deploy_job:
runs-on: ubuntu-latest
name: build
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
with:
version: 8
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: ‘pnpm’
- run: |
pnpm install
pnpm build
mv apps/test-project/dist/ ./dist/
- name: Scp file to aliyun
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
passphrase: ${{ secrets.PASSPHRASE }}
tar_dereference: true
rm: true
source: 'dist/*'
target: '/opt/1panel/apps/openresty/openresty/www/sites/test.com/index'
- name: executing remote ssh commands using key
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
passphrase: ${{ secrets.PASSPHRASE }}
script: |
mv /opt/1panel/apps/openresty/openresty/www/sites/test.com/index/dist/* /opt/1panel/apps/openresty/openresty/www/sites/test.com/index/</code>
评论区