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

通过Jenkins与Nginx实现GitHub代码部署的问题求助

解决Jenkins Publish Over SSH密钥错误及部署到Nginx的完整步骤

一、修复SSH密钥错误invalid privatekey: [B@2a8ec46d

这个错误的核心是Publish Over SSH插件只支持PEM格式的私钥,如果你的密钥是OpenSSH新格式(开头为-----BEGIN OPENSSH PRIVATE KEY-----),就会触发该错误。解决方法如下:

方法1:转换现有密钥为PEM格式

执行以下命令(替换为你的私钥路径):

ssh-keygen -p -m PEM -f /path/to/your/private_key

按提示输入密码(如果密钥有密码),完成后密钥就会变成PEM格式。

方法2:重新生成PEM格式密钥

直接生成符合要求的密钥:

ssh-keygen -t rsa -m PEM -b 4096

生成后,公钥需要放到Nginx服务器的~/.ssh/authorized_keys文件中,私钥完整复制到Jenkins的Publish Over SSH配置里(要包含开头和结尾的标记,不要遗漏任何字符)。

二、Nginx配置说明

必须配置Nginx,让它指向你部署的代码目录,步骤如下:

  1. 在Nginx服务器创建部署目录,例如:
sudo mkdir -p /var/www/your-project
sudo chown -R deploy-user:deploy-user /var/www/your-project  # 替换为你的部署用户
  1. 修改Nginx站点配置文件(通常在/etc/nginx/sites-available/目录下),创建或编辑你的项目配置:
server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名或服务器IP

    root /var/www/your-project;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}
  1. 启用站点并重启Nginx:
sudo ln -s /etc/nginx/sites-available/your-project /etc/nginx/sites-enabled/
sudo nginx -t  # 测试配置是否正确
sudo systemctl restart nginx

三、Jenkins+GitHub+Nginx部署完整流程

1. 前置准备

  • 确保Jenkins服务器能访问GitHub和Nginx服务器(网络连通,端口开放:SSH 22,HTTP/HTTPS 80/443)
  • 在Nginx服务器创建专门的部署用户,避免用root操作
  • 完成上述SSH密钥配置,确保Jenkins能通过SSH连接Nginx服务器

2. Jenkins插件安装

在Jenkins的Manage Jenkins → Plugins中安装以下插件:

  • Git
  • Publish Over SSH

3. Jenkins全局配置

  • Git配置:进入Manage Jenkins → Configure System → Git,添加GitHub凭证(推荐用Personal Access Token,或者SSH密钥)
  • Publish Over SSH配置:进入Manage Jenkins → Configure System → Publish over SSH,添加Nginx服务器信息:
    • Name:自定义名称(比如Nginx-Server)
    • Hostname:Nginx服务器的IP或域名
    • Username:部署用户的用户名
    • SSH Key:粘贴PEM格式的私钥
    • 点击Test Configuration测试连接,显示“Success”即为配置正确

4. 创建部署任务

  • 新建Freestyle project,输入项目名称
  • 源码管理选择Git,填入GitHub仓库地址,选择之前配置的GitHub凭证
  • 构建触发器:勾选GitHub hook trigger for GITScm polling,实现代码提交后自动部署
  • 构建步骤(如果需要构建项目,比如前端项目):添加Execute shell,执行构建命令,例如:
npm install
npm run build
  • 构建后操作:添加Send files or execute commands over SSH:
    • SSH Server:选择之前配置的Nginx服务器
    • Source files:填写要传输的文件路径,比如dist/**(前端项目构建后的目录)
    • Remove prefix:填写要去掉的前缀,比如dist,这样文件会直接传到目标目录
    • Remote directory:填写Nginx的部署目录,比如/var/www/your-project
    • Exec command:可选,传输完成后执行命令,比如sudo systemctl reload nginx

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:01:34