Jenkins调用Chromedriver权限被拒问题排查求助
解决方案:Jenkins用户运行Selenium+Chromium权限问题
核心问题分析
主用户可正常执行测试,但Jenkins用户运行时chromedriver意外退出,结合dial unix /run/user/1000/bus: connect permission denied错误,本质是Jenkins作为系统服务用户,无独立用户会话的DBus访问权限,同时Chromium运行环境缺少适配的可写目录与参数。
1. 修复DBus会话权限
Jenkins默认以系统用户身份运行,没有独立的用户会话DBus,导致Chromium无法调用相关服务。通过修改Jenkins服务配置解决:
- 编辑Jenkins服务配置:
sudo systemctl edit jenkins - 在打开的编辑器中添加以下内容:
[Service] Environment="DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u jenkins)/bus" ExecStartPre=/bin/mkdir -p /run/user/$(id -u jenkins) ExecStartPre=/bin/chown jenkins:jenkins /run/user/$(id -u jenkins) - 保存后重启Jenkins:
sudo systemctl restart jenkins
2. 优化Chromium运行参数
在现有Selenium配置基础上,添加适配Jenkins环境的参数,规避权限与会话冲突:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service options = Options() options.add_argument('--disable-gpu') options.add_argument("disable-infobars") options.add_argument("--disable-extensions") options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--headless=new") # 启用新版无头模式,兼容性更强 options.add_argument("--ignore-certificate-errors") options.add_argument("--silent") options.add_argument("--allow-running-insecure-content") options.add_argument("--remote-debugging-port=9222") # 避免无头模式会话冲突 options.add_argument("--user-data-dir=/tmp/jenkins-chrome-profile") # 指定Jenkins可写的临时配置目录 # 用webdriver-manager自动匹配chromedriver版本(替代固定路径,避免版本不兼容) from webdriver_manager.chrome import ChromeDriverManager chromedriver_service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(options=options) driver.get('https://www.google.com') driver.close()
3. 确保Chromedriver与Chromium版本匹配
版本不兼容是chromedriver意外退出的常见原因:
- 查看当前Chromium版本:
chromium-browser --version - 若不用
webdriver-manager,需手动下载对应版本的chromedriver替换现有文件。
4. 清理过度权限配置
之前添加的sudoers配置(jenkins ALL= (ALL) NOPASSWD: ALL)权限过大,存在安全风险,建议编辑/etc/sudoers删除该行——Jenkins运行Selenium无需root权限。
验证步骤
切换到Jenkins用户手动运行测试,确认问题是否解决:
sudo su - jenkins -s /bin/bash python /home/swof/DPASS_Automation/test.py
若仍有错误,添加Chromium日志参数排查详情:
options.add_argument("--log-level=DEBUG") options.add_argument("--enable-logging") options.add_argument("--v=1")
内容的提问来源于stack exchange,提问作者Tamanar
相关产品推荐
相关产品推荐

