You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Jenkins集成Jupyter Notebook方案咨询:构建展示与实时监控

针对Jenkins数据科学实验的两个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
    }
  }
}

最佳实现方式

综合来看,推荐组合方案:

  1. 需求a:用「Archive the artifacts」归档.ipynb文件,配合Jupyter Notebook Viewer实现直接预览。
  2. 需求b:用Pipeline脚本启动带固定token的Jupyter服务,生成嵌入iframe的HTML,通过HTML Publisher插件在构建页面实时展示。

这个方案完全依赖现成工具,配置简单且扩展性强,完美适配数据科学实验的场景。

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

火山引擎 最新活动