2016-08-14 2 views
2

У меня есть труба дженкинсов, которая строит артефакт java, копирует его в каталог и затем пытается выполнить внешний скрипт.Выполнение сценария из трубка jenkins

Я использую этот синтаксис в сценарии трубопровода для выполнения внешнего скрипта

dir('/opt/script-directory') { 
    sh './run.sh' 
} 

Скрипт только простой докер сценарий сборки, но сборка не сможет с этим исключением:

java.io.IOException: Failed to mkdirs: /opt/[email protected]/durable-ae56483c 

Ошибка запутанна, потому что скрипт не создает никаких каталогов. Он просто создает изображение докеров и помещает только что созданный артефакт java в этом изображении.

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

build 'docker test build' 

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

Это единственный способ выполнить скрипт, который является внешним для рабочей области?

Что я делаю неправильно с моей попыткой выполнить скрипт изнутри сценарий конвейера?

+0

реж ('/ TMP') { ш '/opt/script-directory/run.sh' } --- это работает? – Jayan

+0

Это не скрипт, создающий файлы. (Я думаю) Дженкинс хранит информацию о восстановлении здесь – Jayan

+0

да, я не уверен, что он делает вообще. Я сменил скрипт на простое эхо, и он терпит неудачу с той же ошибкой. – Bltucker

ответ

4

Вопрос заключается в том, что пользователь Дженкинс (или любой другой пользователь, который запускает процесс рабского Jenkins) не имеет права на запись на /opt и sh шаг хочет создать [email protected]/durable-ae56483c подкаталог там.

Либо удалите dir блок и использовать абсолютный путь к сценарию:

sh '/opt/script-directory/run.sh' 

или дать разрешение на запись пользователю Дженкинс в папку /opt (не является предпочтительным по соображениям безопасности)

0

Похоже ошибка в Jenkins, каталоги durable предназначены для хранения информации восстановления, например перед выполнением внешнего скрипта с использованием sh. На данный момент все, что вы можете сделать, это убедиться, что /opt/script-directory имеет +r+w и +x набор для пользователя jenkins.

Другое решение было бы не изменить текущую директорию, просто выполнить sh с ним:

sh '/opt/script-directory/run.sh 
Смежные вопросы