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
相关产品推荐
相关产品推荐

