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

基于GitHub Actions与AWS EC2实现Django CI/CD(staging分支PR触发)

问题分析与解决方案

你当前用GitHub Actions搭配AWS EC2搭建CI/CD的配置存在几个关键问题,结合截图显示的连接超时情况,以下是问题点和修正方案:

核心问题

  1. 命令执行环境错误:最后一步的run命令是在GitHub Actions的runner机器(ubuntu-latest)上执行,而非目标EC2实例,自然找不到EC2上的目录和文件。
  2. 目录切换语法错误:直接写/home/ubuntu/plane-project-staging/plane_api/无法切换目录,必须用cd命令。
  3. 敏感信息输出风险:调试步骤中打印EC2_PRIVATE_KEY,即便GitHub会屏蔽敏感内容,这种操作也存在安全隐患,建议移除。
  4. SCP传输范围不合理:source: "./"会传输仓库所有文件(包括.git、冗余目录等),既浪费带宽又可能覆盖不必要的内容。

修正后的配置文件

name: build-and-deploy

on:
  pull_request:
    types:
      - closed
    branches:
      - staging  # 仅针对staging分支的PR关闭触发,匹配你的需求

env:
  TARGET_BRANCH: ${{ github.event.pull_request.base.ref }}

jobs:
  # 构建项目
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v3

      - name: 配置Python环境
        uses: actions/setup-python@v2
        with:
          python-version: 3.10.12

      - name: 安装依赖
        run: |
          python -m pip install --upgrade pip
          pip install -r req.txt

  deploy_staging:
    runs-on: ubuntu-latest
    needs: build
    if: github.event.pull_request.base.ref == 'staging'
    steps:
      - name: 拉取代码用于传输
        uses: actions/checkout@v3

      - name: 部署至Staging环境
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USERNAME }}
          key: ${{ secrets.EC2_PRIVATE_KEY }}
          source: "*.py, req.txt, manage.py, ./plane_api/"  # 按需指定要传输的文件/目录
          target: "/home/ubuntu/plane-project-staging/"
          overwrite: true  # 允许覆盖现有文件

      - name: 在Staging环境执行部署命令
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USERNAME }}
          key: ${{ secrets.EC2_PRIVATE_KEY }}
          script: |
            cd /home/ubuntu/plane-project-staging/plane_api/
            python manage.py migrate
            # 可添加重启服务等命令,比如:sudo systemctl restart your-app.service

额外排查要点

  • EC2安全组:确保安全组开放22端口(SSH),并且允许GitHub Actions的IP段访问,或临时允许所有IP(生产环境不建议)排查连接超时问题。
  • 密钥权限:EC2实例上~/.ssh/authorized_keys文件权限需设为600,目录权限设为700,否则会导致SSH连接失败。
  • Python环境:确认EC2实例安装了3.10.12版本的Python,或在SSH脚本中指定Python绝对路径(如/usr/bin/python3.10)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:33:26