Не удается запустить ни одной команды ROS в задании jenkins

#ubuntu #jenkins #ros

#ubuntu #дженкинс #ros

Вопрос:

Итак, что я хочу сделать, это просто запустить «список пакетов» в задании jenkins. Мой Jenkinsfile довольно прост:

 pipeline {
  agent any
  stages {
    stage('Test') {
        steps {
             sh '. /opt/ros/kinetic/setup.bash'
             sh 'rospack list'
        }
    }
  }
}
  

Ни исходная команда, ни rospack не могут быть запущены внутри задания jenkins. Но когда я вхожу в систему с учетной записью jenkins и делаю то же самое, что указано выше, это работает. Итак, я действительно смущен тем, что не так с файлом Jenkins. Заранее спасибо за помощь!

  • ОС: Ubuntu 16.04 LTS
  • Дженкинс: 2.150.3
  • ROS: кинетический

Информация об ошибке из задания Jenkins.
Тест с учетной записью jenkins

Комментарии:

1. И все же очень странная проблема заключается в том, что когда я создаю задание в свободном стиле, затем выполняю скрипт на этапе сборки, тогда это работает. Это означает, что проблема связана только с конвейером.

Ответ №1:

Сегодня я сам столкнулся с этой проблемой. sh '. /opt/ros/kinetic/setup.bash' Сбой происходит потому, что setup.bash она предназначена для выполнения с помощью bash, но здесь она вызывается с помощью sh.

К счастью, ROS также предоставляет установочный файл для использования с sh , поэтому, если вы измените приведенную выше команду следующим образом, она должна успешно выполняться:

sh '. /opt/ros/kinetic/setup.sh'

Ответ №2:

Хорошо, насколько я понимаю, одна команда sh выполняется в одном терминале, поэтому исходный ПУТЬ не будет использоваться второй командой sh. Это работает при использовании /bin / bash вместо ‘.’:

 **test.sh**
#! /bin/bash
. /opt/ros/kinetic/setup.bash
rospack list

**Jenkinsfile**
pipeline {
 agent any
 stages {
   stage('Test') {
     steps {
          sh '/bin/bash /opt/ros/kinetic/setup.bash'
     }
   }
 }
  

}