示例代码
name: 每天8点30执行一次 on: schedule: - cron: '30 0 * * *' # 定时任务 workflow_dispatch: # 手动运行 env: # 设置环境变量 TZ: Asia/Shanghai # 时区(设置时区可使页面中的`最近更新时间`使用时区时间) jobs: build: # 自定义名称 runs-on: ubuntu-latest steps: - name: 🚜 拉取最新代码 uses: actions/checkout@v3 with: ref: 'master' repository: 'xcmake/CodeNotes' - name: ♻️ 编译静态文件 run: | echo -e 'REF_URL=https://xxcxx.xin/nREF_LABEL=小熊博客' > .env npm install npm run build - name: 🚁 部署到服务器 uses: wlixcc/SFTP-Deploy-Action@v1.0 with: username: 'xxcxx' #ssh user name port: '22' # 远程服务器ssh端口,默认22 server: 'xxcxx.lat' # 远程服务器IP ssh_private_key: ${{ secrets.xixi }} # 认证服务器秘钥对的私钥 local_path: './dist/*' # 对应我们项目打包后的静态文件路径 remote_path: 'xxcxx/xxc/xx' # 服务器上的路径
常见错误
Load key "../private_key.pem": invalid format
- 私钥文件的内容是否完整,且没有换行或空格问题。
- 私钥文件是否有正确的格式,应该以-----BEGIN OPENSSH PRIVATE KEY-----开头,以-----END OPENSSH PRIVATE KEY-----结尾。
- 如果远程服务器没有正确的写权限或路径不对,文件部署会失败。
- 确保:在 GitHub 仓库的
Settings
->Secrets and variables
->Actions
下,已经正确地添加了名为xixi
的密钥,并且该密钥对应着远程服务器上的公钥。
root@xxcxx.lat: Permission denied (publickey,password).
- 这表示 SSH 客户端在尝试通过公钥和密码进行认证时,都被拒绝了。
- 确保公钥添加到服务器的
~/.ssh/authorized_keys
中 - 确保 ~/.ssh 目录和 ~/.ssh/authorized_keys 文件的权限正确
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
执行时间不一致问题
GitHub Actions 的 schedule 事件 始终使用 UTC 时区,而在配置中设置的 TZ: Asia/Shanghai 环境变量 只会影响 workflow 内部执行时的时区(如脚本中的时间显示),不会改变定时任务的触发时区。
您的 cron 配置 30 8 * * *
实际对应的是 UTC 时间每天 8:30,换算成北京时间是 16:30(UTC+8)。如果想要北京时间8:30执行的话,UTC时间应为 30 0 * * *