Jenkins集成Jupyter Notebook方案咨询:构建展示与实时监控
先直接给结论:两个需求都有现成插件可以实现,不需要从零开发,下面分需求拆解细节:
需求a:在构建中展示生成的Jupyter Notebook(作为构建产物)
首先明确:生成的.ipynb文件完全属于Jenkins的build artifact,你可以直接用Jenkins自带功能+插件实现归档与预览,具体有两种实用方案:
方案1:直接归档+插件预览
- 用Jenkins自带的「Archive the artifacts」构建步骤,填入生成的
.ipynb文件路径(比如**/*.ipynb),构建完成后就能在构建页面的Artifacts标签下找到下载链接。 - 如果需要直接在Jenkins页面预览Notebook内容,推荐安装
Jupyter Notebook Viewer插件,安装后归档的.ipynb文件会直接在页面渲染成可读格式,无需下载打开。
方案2:转HTML后用HTML Publisher展示
如果你的Notebook包含复杂交互或想保留更完整的格式,可以先在构建脚本里把Notebook转成HTML:
jupyter nbconvert --to html your_notebook.ipynb
然后用HTML Publisher插件,配置归档生成的.html文件路径,构建完成后会在构建页面新增一个HTML Report标签,直接预览转好的Notebook内容,这个方案对不熟悉Jupyter的团队成员更友好。
需求b:实时展示运行中的Jupyter Notebook
这个需求的核心是在Jenkins构建页面嵌入正在运行的Jupyter服务,无需切换到控制台或外部浏览器,推荐的实现步骤如下:
步骤1:配置Jupyter服务启动命令
在你的构建bash脚本里,启动Jupyter时需要设置允许外部访问、禁用浏览器、生成固定token(避免每次随机token的麻烦):
jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token="your_secure_token"
注意:端口要确保Jenkins节点的防火墙允许访问,token要设置安全的字符串,避免未授权访问。
步骤2:用HTML Publisher插件嵌入iframe
在构建过程中,生成一个简单的HTML文件(比如jupyter_preview.html),内容是嵌入Jupyter服务的iframe:
<html> <body> <h3>实时运行的Jupyter Notebook</h3> <iframe src="http://<你的Jenkins节点IP>:8888/tree?token=your_secure_token" width="100%" height="800px"></iframe> </body> </html>
然后用HTML Publisher插件配置这个jupyter_preview.html的路径,构建启动后,你就能在构建页面的HTML Report标签里实时看到运行中的Jupyter Notebook界面了。
额外优化:Pipeline脚本实现
如果用Jenkins Pipeline,可以把这些步骤写成代码,更灵活可控:
pipeline { agent any stages { stage('启动Jupyter服务') { steps { sh 'jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token="my_secure_token" &' sh 'echo "<html><body><h3>实时Jupyter实验预览</h3><iframe src=\"http://${NODE_NAME}:8888/tree?token=my_secure_token\" width=\"100%\" height=\"800px\"></iframe></body></html>" > jupyter_preview.html' } } } post { always { publishHTML(target: [ allowMissing: false, keepAll: true, reportDir: '.', reportFiles: 'jupyter_preview.html', reportName: '实时Jupyter预览' ]) archiveArtifacts artifacts: '**/*.ipynb', fingerprint: true } } }
最佳实现方式
综合来看,推荐组合方案:
- 需求a:用「Archive the artifacts」归档
.ipynb文件,配合Jupyter Notebook Viewer实现直接预览。 - 需求b:用Pipeline脚本启动带固定token的Jupyter服务,生成嵌入iframe的HTML,通过
HTML Publisher插件在构建页面实时展示。
这个方案完全依赖现成工具,配置简单且扩展性强,完美适配数据科学实验的场景。
内容的提问来源于stack exchange,提问作者Holi




