Jenkins Pipeline使用Bandit扫描Python代码漏洞构建失败排查
Jenkins集成Bandit扫描构建失败解决方案
1. 所需Jenkins插件安装
- 核心依赖插件共2个,可选插件1个:
- Pipeline:用于编排流水线执行逻辑
- HTML Publisher Plugin:用于在Jenkins构建页直接展示Bandit输出的HTML报告
- Workspace Cleanup Plugin(可选):每次构建前清理工作目录,避免旧缓存文件干扰扫描结果
- 安装路径:进入Jenkins后台 -> 系统管理 -> 插件管理 -> 可选插件,搜索对应插件名称勾选后点击安装,安装完成重启Jenkins即可生效。
2. 仅扫描Python文件配置
不需要单独配置全局作业过滤规则,直接通过Bandit自带参数限定扫描后缀即可,同时避免非Python文件被误扫。执行扫描时添加--ext py参数,Bandit就会仅识别.py后缀的文件。
3. examples目录扫描命令修正
你当前使用的命令存在参数冲突:-r是递归扫描目录的参数,后面直接跟目录路径即可,不需要额外加*.py通配符,否则会导致递归逻辑失效,漏扫子目录下的Python文件。正确执行命令如下:
bandit -r examples/ --ext py -f html -o report.html
如果需要排除examples目录下不需要扫描的子路径,可以追加
--exclude examples/skip_path/参数指定排除规则。
扫描命令执行完成后,配置HTML Publisher插件步骤,将工作目录下的report.html作为报告归档,后续构建完成就可以直接在Jenkins作业页面查看扫描结果。
4. Jenkins环境下Bandit安装方案
Linux2默认搭载的Python2.7环境经常因为PATH变量不一致、全局权限限制,导致Jenkins执行Shell时调用pip失败、或者安装完成后找不到bandit命令。不要直接使用系统全局pip安装,通过虚拟环境做隔离是最稳定的方案,可直接复用以下Pipeline脚本:
pipeline { agent any environment { // 提前在执行机执行which python2.7获取绝对路径替换此处 PY2_PATH = "/usr/bin/python2.7" } stages { stage('环境准备') { steps { sh ''' # 安装virtualenv,提前给Jenkins用户配置对应sudo权限即可 sudo $PY2_PATH -m pip install virtualenv # 创建独立虚拟环境,所有依赖都装在工作空间内,不影响系统全局 $PY2_PATH -m virtualenv venv # 激活虚拟环境 source venv/bin/activate # 注意:Python2.7仅兼容1.7.4及以下版本的Bandit,高版本会报语法错误 pip install bandit==1.7.4 ''' } } stage('执行安全扫描') { steps { sh ''' source venv/bin/activate bandit -r examples/ --ext py -f html -o report.html ''' } } stage('发布扫描报告') { steps { publishHTML(target: [ allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: '.', reportFiles: 'report.html', reportName: 'Bandit代码安全扫描报告' ]) } } } }
常见踩坑说明
- 安装Bandit必须指定1.7.4版本,高于该版本的Bandit已放弃Python2.7支持,安装后执行会直接报语法错误
- 所有执行bandit、pip的步骤都要先激活虚拟环境,否则会调用到系统全局命令,复现之前的pip不可用、找不到命令的问题
- 如果pip下载速度慢,可以在pip install命令后加
-i参数指定国内pypi镜像源提速 - 如果提示权限不足,不要给pip加
--user参数,这类问题基本是因为没有激活虚拟环境,误调用了全局pip导致的
内容的提问来源于stack exchange,提问作者Pushpa Kola
相关产品推荐
相关产品推荐

