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

如何修复GitHub Action向AWS EC2实例复制构建文件失败问题

解决GitHub Action中SCP部署到AWS Lightsail的密钥问题

问题场景

在GitHub Action中搭建AWS Lightsail实例的NodeJS应用流水线,代码拉取、构建步骤已成功,但无法将build文件夹文件复制到EC2实例。使用GitHub托管的Ubuntu运行器,已将PEM私钥配置为仓库密钥SSH_PRIVATE_KEY,执行Action时出现KEY-----: No such file or directory错误。

原流水线代码

name: Deployment QA UI
on: push
jobs:
    Get_code: 
        runs-on: ubuntu-20.04
        steps:
            - name: Get code
              uses: actions/checkout@v4
            - name: Install NodeJS
              uses: actions/setup-node@v3
              with:
                node-version: 10
            - name: Install dependancies
              run: NODE_OPTIONS=--max_old_space_size=4096 npm install
            - name: Check Nodejs 
              run: npx browserslist@latest --update-db
            - name: Build project
              run: NODE_OPTIONS=--max_old_space_size=4096 npm run build
            - name: Check the files in build folder
              run: |
                cd /home/runner/work/simple_App/simple_App/build/
                ls -l
            - name: Deploy to the server.
              run: scp -i ${{ secrets.SSH_PRIVATE_KEY }} -r * centos@18.191.60.170:/var/www/html/

错误信息

cd /home/runner/work/uniconnect_ui/uniconnect_ui/build/
ls -l
scp -i ***

*** -r * centos@18.191.60.170:/var/www/html/
shell: /usr/bin/bash -e {0}
total 280
-rw-r--r-- 1 runner docker 6773 Sep 16 18:15 asset-manifest.json
-rw-r--r-- 1 runner docker 260158 Sep 16 18:12 favicon.ico
-rw-r--r-- 1 runner docker 4820 Sep 16 18:15 index.html
-rw-r--r-- 1 runner docker 317 Sep 16 18:12 manifest.json
drwxr-xr-x 5 runner docker 4096 Sep 16 18:15 static
KEY-----: No such file or directory
Error: Process completed with exit code 1.

修复方案

1. 正确处理SSH密钥文件

GitHub Secrets中的私钥直接传入scp -i参数时,会被当作文件路径而非密钥内容,导致找不到文件。需要先将密钥写入本地文件并设置正确权限:

在流水线的Deploy to the server步骤前添加以下步骤:

- name: Prepare SSH deployment key
  run: |
    echo "${{ secrets.SSH_PRIVATE_KEY }}" > /tmp/deploy_key
    chmod 600 /tmp/deploy_key

2. 修正SCP命令

修改Deploy步骤的命令,使用生成的密钥文件,同时解决主机密钥验证问题,并指定正确的build目录路径:

- name: Deploy to the server
  run: |
    scp -i /tmp/deploy_key -o StrictHostKeyChecking=no -r ./build/* centos@18.191.60.170:/var/www/html/
  • -o StrictHostKeyChecking=no:禁用首次连接时的主机密钥确认提示,避免脚本中断
  • ./build/*:指定仓库根目录下的build文件夹内容(GitHub Action每个step的默认工作目录是仓库根目录,之前的cd操作仅在对应step生效)

3. 验证目标目录权限

确保AWS Lightsail实例上的/var/www/html目录对centos用户有写入权限,可在实例上执行:

sudo chown -R centos:centos /var/www/html

完整修正后的流水线代码

name: Deployment QA UI
on: push
jobs:
    Get_code: 
        runs-on: ubuntu-20.04
        steps:
            - name: Get code
              uses: actions/checkout@v4
            - name: Install NodeJS
              uses: actions/setup-node@v3
              with:
                node-version: 10
            - name: Install dependancies
              run: NODE_OPTIONS=--max_old_space_size=4096 npm install
            - name: Check Nodejs 
              run: npx browserslist@latest --update-db
            - name: Build project
              run: NODE_OPTIONS=--max_old_space_size=4096 npm run build
            - name: Check the files in build folder
              run: |
                cd ./build/
                ls -l
            - name: Prepare SSH deployment key
              run: |
                echo "${{ secrets.SSH_PRIVATE_KEY }}" > /tmp/deploy_key
                chmod 600 /tmp/deploy_key
            - name: Deploy to the server
              run: |
                scp -i /tmp/deploy_key -o StrictHostKeyChecking=no -r ./build/* centos@18.191.60.170:/var/www/html/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:46:14