Vivado Synthesis висит в контейнере Docker, порожденном Дженкинсом - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь переместить нашу большую сборку 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, но теперь я испытываю такое же поведение зависания во время реализации.

...