【发布时间】:2019-04-17 17:27:03
【问题描述】:
我正在尝试将我们的大型 FPGA 构建移动到 Jenkins CI 环境中,但是当在 Jenkins 生成的 Docker 容器中运行时,构建会在综合结束时挂起。
我尝试复制 Jenkins 正在创建的环境,但是当我自己生成 Docker 容器时,构建没有问题。
我试过了:
- 减少 Vivado 使用的作业(又名线程)的数量,思考 也许在写作时发生了一些线程冲突 输出日志文件
- 在同一个注释中,使用了 vivado 上的
-nolog -nojournal选项 删除任何日志文件冲突的命令 - 控制克隆/签出项目并运行命令 作为 Docker 容器中的本地用户
我还有一个非常小的构建,它可以通过 Jenkins 的整个构建过程毫无问题,所以我认为我的 Docker 容器没有根本缺陷。
agent {
docker {
image "vivado:2017.4"
args """
-v <MOUNT XILINX LICENSE FILE>
--dns <DNS_ADDRESS>
--mac-address <MAC_ADDRESS>
"""
}
}
steps {
sh "chmod -R 777 ."
dir(path: "${params.root_dir}") {
timeout(time: 15, unit: 'MINUTES') {
// Create HLS IP for use in Vivado project
sh './run_hls.sh'
}
timeout(time: 20, unit: 'MINUTES') {
// Create vivado project, add sources, constraints, HLS IP, generated IP
sh 'source source_vivado.sh && vivado -mode batch -source tcl/setup_proj.tcl'
}
timeout(time: 20, unit: 'MINUTES') {
// Create block designs from TCL scripts
sh 'source source_vivado.sh && vivado -mode batch -source tcl/run_bd.tcl'
}
timeout(time: 1, unit: 'HOURS') {
// Synthesize complete project
sh 'source source_vivado.sh && vivado -mode batch -source tcl/run_synth.tcl'
}
}
}
下面的代码块正在运行 1 项超时 12 小时的作业。可以看到 Synthesis 完成了,然后 8 小时后发生了超时。
[2019-04-17T00:30:06.131Z] Finished Writing Synthesis Report : Time (s): cpu = 00:01:53 ; elapsed = 00:03:03 . Memory (MB): peak = 3288.852 ; gain = 1750.379 ; free physical = 332 ; free virtual = 28594
[2019-04-17T00:30:06.131Z] ---------------------------------------------------------------------------------
[2019-04-17T00:30:06.131Z] Synthesis finished with 0 errors, 0 critical warnings and 671 warnings.
[2019-04-17T08:38:37.742Z] Sending interrupt signal to process
[2019-04-17T08:38:43.013Z] Terminated
[2019-04-17T08:38:43.013Z]
[2019-04-17T08:38:43.013Z] Session terminated, killing shell... ...killed.
[2019-04-17T08:38:43.013Z] script returned exit code 143
在本地生成的 Docker 容器中运行相同的命令没有任何问题。不幸的是,timeout Jenkins 步骤似乎没有刷新打开的缓冲区,因为我打印出所有日志文件的post:unsuccesful 步骤没有找到synth_1,尽管我不希望有任何不同于詹金斯捕获。
Jenkins/Vivado 集成是否存在任何已知问题?有没有办法进入 Jenkins 生成的容器,这样我就可以尝试复制我所期待的和我正在经历的?
编辑:我已经在实际的 tcl 脚本中添加了超时,以超越 run_synth.tcl 中使用的 wait_on_runs 命令,但现在我在实施过程中遇到了相同的挂起行为。
【问题讨论】:
-
你能在没有 CI / Jenkins 的情况下运行这项工作吗?直接运行docker即可。另外你是如何制作你的 docker vivado 图像的?
-
我对 一些设计 有同样的问题,并已在 Xilinx 论坛上开始讨论,但没有任何进展,但也许您可以在那里发表评论以启动讨论。 forums.xilinx.com/t5/PCIe-and-CPM/…
标签: docker jenkins xilinx vivado