Я пытаюсь переместить нашу большую сборку FPGA в среду CI Jenkins, но сборка зависает в конце синтеза при запуске в контейнере Docker, порожденном Jenkins.
Я пытался реплицировать среду, которую создает Дженкинс, но когда я сам запускаю контейнер Docker, проблем со сборкой не возникает.
Я пробовал:
- сокращение количества заданий (или потоков), которые использует 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-часовым таймаутом. Вы можете видеть, что синтез завершен, затем через 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? Есть ли способ войти в порожденный Дженкинсом контейнер, чтобы я мог попытаться скопировать то, что я ожидаю, и то, что я испытываю?
РЕДАКТИРОВАТЬ: с тех пор я добавил тайм-аут в фактические сценарии tcl, чтобы перейти за wait_on_runs
команду, используемую в run_synth.tcl
, но теперь я испытываю такое же поведение зависания во время реализации.