You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions工作流执行逻辑咨询及DigitalOcean部署疑问

问题

我在DigitalOcean(DO)部署了项目,当前用PM2的watch模式运行。期望推送代码到main分支时触发GitHub Actions工作流,完成DO实例代码更新、重建项目构建并重启PM2。

我理解这段通过ssh-action拉取代码更新DO实例的步骤:

steps:
  - name: Update FOMS Code
    uses: appleboy/ssh-action@v0.1.10
    with:
      host: ${{secrets.SSH_HOST}} # DO实例的IP地址
      key: ${{secrets.SSH_KEY}} # 服务器的密钥
      username: ${{ secrets.SSH_USERNAME }} # DO实例的登录用户
      script: |
        cd Food-Order-Management-System
        git pull
        cd ~
        echo 'Deployment successful to digital ocean'

但对以下工作流步骤的执行逻辑有疑问,我原本以为这些步骤会在DO实例上配置Node.js、安装依赖并构建项目:

- uses: actions/checkout@v3
- uses: actions/setup-node@v3
  with:
    node-version: 18.0.0
- name: Install Dependencies and Build Nest App
  run: |
    pwd
    ls -la
    npm ci
    npm install --prefix ./Rabbit-MQ
    npm run build

日志显示路径为/home/runner/work/Food-Order-Management-System/Food-Order-Management-System,还出现Docker相关信息,但我的DO实例没配置Docker,也没有这个路径,不清楚这些操作的执行位置和实际作用,求解析。

技术解析

1. 执行环境的本质差异

你看到的这些步骤完全没有在你的DO实例上运行,而是在GitHub提供的托管Runner服务器上执行的:

  • /home/runner/... 是GitHub Runner的默认工作目录,和你的DO实例无关;
  • Docker信息是GitHub Runner自带的环境配置,和你的部署环境没有关联。

2. 这些步骤的实际作用

  • actions/checkout@v3:把你的GitHub仓库代码拉取到GitHub Runner的本地目录;
  • actions/setup-node@v3:在GitHub Runner上安装指定版本的Node.js;
  • 后续的npm ci、npm run build等命令:都是在GitHub Runner本地安装依赖、构建项目,但这些构建产物只会留在Runner里,不会自动同步到你的DO实例。

3. 为什么不符合你的预期

你混淆了GitHub Runner环境和DO部署环境的边界:只有appleboy/ssh-action这个步骤是通过SSH连接到你的DO实例执行命令,其他所有没有用SSH的步骤,都是在GitHub的云端Runner中独立运行的,不会触碰到你的DO服务器。

4. 修正方案(实现你的需求)

要在DO实例上完成依赖安装、构建和PM2重启,需要把这些操作移到ssh-action的script里,让命令在DO实例上执行:

steps:
  - name: Deploy to DigitalOcean
    uses: appleboy/ssh-action@v0.1.10
    with:
      host: ${{secrets.SSH_HOST}}
      key: ${{secrets.SSH_KEY}}
      username: ${{ secrets.SSH_USERNAME }}
      script: |
        # 进入项目目录
        cd Food-Order-Management-System
        # 拉取最新代码
        git pull origin main
        # 安装根项目依赖
        npm ci
        # 安装Rabbit-MQ目录的依赖
        npm install --prefix ./Rabbit-MQ
        # 构建项目
        npm run build
        # 重启PM2进程(假设你的PM2进程名是foms)
        pm2 restart foms
        echo 'Deployment completed successfully'

注意:确保你的DO实例已经安装了Node.js、npm和PM2,否则需要先在DO上完成这些基础环境的配置。

内容的提问来源于stack exchange,提问作者Abdullah Irfan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:17:41