2013-12-04 5 views
2

Я запускаю Jenkins на хосте Linux. Я автоматизирую сборку приложения на C++. Чтобы создать приложение, мне нужно использовать версию g ++ версии 4.7, которая включает поддержку C++ 11. Для того, чтобы использовать эту версию г ++ я запускаю следующую команду в командной строке:Выполнение команды «exec» в Jenkins «Execute Shell»

exec /usr/bin/scl enable devtoolset-1.1 bash 

Так что я создал «Выполнить оболочку» строить шаг и следующие команды, которые правильно строит приложение C++ по команде подскажите:

exec /usr/bin/scl enable devtoolset-1.1 bash 
libtoolize 
autoreconf --force --install 
./configure --prefix=/home/tomcat/.jenkins/workspace/project 
make 
make install 
cd procs 
./makem.sh /home/tomcat/.jenkins/workspace/project 

проблема заключается в том, что Дженкинс не будет работать любой из команд после «ехес/USR/BIN/SCL позволяют devtoolset-1.1 Баш» команду, но вместо этого просто запускает «EXEC» команду, прекращает и делает сборку успешной.

Любые идеи о том, как я могу перестроить описанное выше, чтобы Jenkins выполнил все команды?

Спасибо!

ответ

0

Этот тип вещей обычно работает в командах «найти», но может работать здесь. Вместо того, работает два или три процесса, вы запускаете один «ш», который выполняет несколько вещей, например:

Exec ш -с «thing1; thing2; thing3»

Если вам требуется каждый шаг, чтобы добиться успеха, прежде чем следующий шаг, заменить точку с запятой с двойным амперсандом:

Exec ш -с «thing1 & & thing2 & & thing3»

Я понятия не имею, какие из ваших шагов, которые вы хотите работать вместе, так что я я надеюсь, что вы сможете адаптировать концепт т в соответствии с вашими потребностями.

Или вы можете поместить всю партию в скрипт и выполнить это.

+0

Эй Марк: Я пытался делать «&&», однако он по-прежнему не удается из-за того, что когда я бегу «EXEC/USR/BIN/SCL включить devtoolset-1.1 Баш» Я считаю, что отдельная оболочка порождена, но она все равно будет ссылаться на версию GCC 4.4, а не на 4.7. Вместо этого я просто ввел переменную PATH следующим образом: PATH =/opt/centos/devtoolset-1.1/root/usr/bin: $ PATH Это, по сути, поставило бы 4.7 г ++ исполняемый файл перед 4 ,4, и это применимо только к проекту. Я не уверен, что это лучшее решение, но оно соответствует тому, что я пытался сделать. – ossys

1

Мне нужно было посмотреть, что на самом деле.

Examples 

scl enable example 'less --version' 
    runs command 'less --version' in the environment with collection 'example' enabled 
scl enable foo bar bash 
    runs bash instance with foo and bar Software Collections enabled 

Так что вы делаете, работает под оболочкой bash. Я полагаю, что оболочка bash возвращается немедленно, так как вы находитесь в неинтерактивном режиме. exec запускает команду внутри оболочки без создания новой оболочки. Это означает, что если вновь открытый баш заканчивается, он также рано заканчивает вашу оболочку. Я бы предложил поместить все ваши шаги сборки в сценарий bash (например, run_my_build.sh) и вызвать его следующим образом.

exec /usr/bin/scl enable devtoolset-1.1 run_my_build.sh 
2

В начале вашего «Execute оболочки» сценарий, выполнить source /opt/rh/devtoolset-1.1/enable, чтобы включить devtoolet «внутри» вашей оболочки.

Что дает:

source /opt/rh/devtoolset-1.1/enable 
libtoolize 
autoreconf --force --install 
./configure --prefix=/home/tomcat/.jenkins/workspace/project 
make 
make install 
cd procs 
./makem.sh /home/tomcat/.jenkins/workspace/project 
+1

Работает с v2 тоже ;-) 'source/opt/rh/devtoolset-2/enable' – Destroyica

Смежные вопросы