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

AWS EC2中Jenkins容器部署Node.js应用的路径及公网IP问题

解决Jenkins容器部署Node.js应用到EC2主机路径的问题

一、让流水线命令指向EC2主机的/home/ubuntu/node-app路径

Jenkins容器默认无法直接访问EC2主机的本地路径,核心问题是容器与主机的文件系统隔离,解决方法是通过Docker挂载将主机路径映射到Jenkins容器内部:

1. 修改Docker Compose配置,挂载主机路径

在Jenkins服务的volumes字段中添加主机路径映射,将EC2主机的/home/ubuntu/node-app挂载到容器内的可访问路径(比如/var/jenkins_home/node-app-host):

services:
  jenkins:
    image: jenkins/jenkins:lts
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home
      # 新增挂载:主机路径 → 容器内路径
      - /home/ubuntu/node-app:/var/jenkins_home/node-app-host
    # 可选:若主机路径权限严格,切换为root用户运行容器避免权限报错
    user: root
volumes:
  jenkins_home:

修改后重启Docker Compose:docker-compose down && docker-compose up -d

2. 调整Jenkinsfile中的路径

将之前的cd /home/ubuntu/node-app替换为容器内的挂载路径:

pipeline {
  agent any
  stages {
    stage('Pull Code & Deploy') {
      steps {
        sh 'cd /var/jenkins_home/node-app-host && git pull'
        sh 'cd /var/jenkins_home/node-app-host && npm install --production'
        sh 'cd /var/jenkins_home/node-app-host && pm2 restart app'
      }
    }
  }
}

权限注意事项

如果主机的/home/ubuntu/node-app权限限制严格,可在EC2主机上执行以下命令开放权限:

# 给路径添加读写权限
chmod -R 775 /home/ubuntu/node-app
# 或把Jenkins容器用户(默认jenkins)加入ubuntu用户组
sudo usermod -aG ubuntu jenkins

二、配置Jenkins容器指向EC2公网IP(无需挂载路径的方案)

如果不想通过挂载路径实现,可让Jenkins容器通过SSH远程连接EC2主机,直接在主机上执行部署命令:

1. 配置Jenkins SSH凭据

  1. 进入Jenkins后台 → 凭据 → 系统 → 全局凭据 → 添加凭据
  2. 选择SSH Username with private key,填写:
    • 用户名:EC2主机的默认用户(比如ubuntu)
    • 私钥:粘贴EC2实例密钥对的*.pem文件内容

2. 修改Jenkinsfile使用SSH远程执行命令

先安装Jenkins的SSH插件,然后在流水线中调用SSH执行主机命令:

pipeline {
  agent any
  stages {
    stage('Remote Deploy via SSH') {
      steps {
        sshPublisher(publishers: [sshPublisherDesc(
          configName: 'EC2-Public-Server', // 填写Jenkins中配置的SSH服务器名称(指向EC2公网IP)
          transfers: [sshTransfer(
            execCommand: 'cd /home/ubuntu/node-app && git pull && npm install --production && pm2 restart app'
          )]
        )])
      }
    }
  }
}

或直接用ssh命令执行(需在Jenkins容器内安装openssh-client):

steps {
  sh 'ssh -i /var/jenkins_home/ec2-key.pem ubuntu@<EC2公网IP> "cd /home/ubuntu/node-app && git pull && npm install --production && pm2 restart app"'
}

网络注意事项

确保EC2安全组开放22端口(SSH端口),允许Jenkins容器的IP访问;若Jenkins与EC2在同一VPC,也可使用EC2内网IP提升稳定性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:25:19