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

如何在Jenkins共享应急账号触发构建时记录用户真实IP?

捕获Jenkins共享账号触发构建的客户端真实IP方法

方法1:利用Jenkins内置环境变量记录IP

Jenkins处理构建请求时会捕获客户端IP并存储在REMOTE_ADDR变量中,但默认不会暴露到构建环节。你可以通过以下步骤让构建步骤能调用这个变量:

  • 进入系统管理→系统配置→全局属性,勾选「环境变量」,添加变量REMOTE_ADDR,值设为${REMOTE_ADDR}
  • 在Job的构建步骤中添加shell命令,将IP写入审计日志:
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 共享账号触发构建 | 客户端IP: $REMOTE_ADDR | 任务名: $JOB_NAME | 构建号: $BUILD_NUMBER" >> /var/log/jenkins/shared-account-audit.log

提前确保日志文件权限正确:sudo chown jenkins:jenkins /var/log/jenkins/shared-account-audit.log

方法2:用Authorize Project插件强化溯源

安装Authorize Project插件后,可针对共享账号配置专属构建日志规则:

  • 安装插件后,进入系统管理→Configure Global Security,在权限策略中为共享账号开启Run scripts on the controller权限
  • 编辑目标Job,勾选「This project is parameterized」,添加字符串参数CLIENT_IP,默认值设为${REMOTE_ADDR}
  • 在构建步骤中,将参数和构建信息写入日志(同方法1的shell命令,替换REMOTE_ADDR为CLIENT_IP即可)

方法3:自定义Groovy脚本捕获IP

无需插件的话,可通过系统Groovy脚本直接从Jenkins上下文提取IP:

  • 在Job中添加「Execute system Groovy script」步骤,输入以下脚本:
def remoteAddr = build.getCause(hudson.model.Cause.UserIdCause).getRemoteAddress()
def logFile = new File('/var/log/jenkins/shared-account-groovy.log')
logFile.append("[$new Date()] 共享账号触发构建 | IP: $remoteAddr | 任务: ${build.job.name} | 构建号: ${build.number}\n")

注意:需确保共享账号拥有执行系统Groovy脚本的权限。

反向代理场景适配

如果Jenkins前端有Nginx等反向代理,需在代理配置中传递真实IP:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

之后在Jenkins全局属性中添加X_REAL_IP变量,值设为${X-Real-IP},构建时改用这个变量记录即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:35:08