Jenkins разворачивает работу через SSH - PullRequest
0 голосов
/ 25 мая 2018

Проблема:

Я запускаю сценарий bash как часть развертывания, используя шаг сборки sshPublisher.Часть сценария состоит в том, чтобы найти идентификатор процесса, используя netstatgrep / awk).Когда я вхожу в виртуальную машину и вручную запускаю сценарий, он убивает процесс, но через задание развертывания Jenkins он не

сервер Jenkins (VM1):

stage('deploy'){
    sshPublisher(publishers: [sshPublisherDesc(configName: 'fdpdeploy', transfers: [sshTransfer(excludes: '', execCommand: './deploy.sh', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/fdp-0.0.1-SNAPSHOT.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])           
}

VM2: Это сценарий deploy.sh

#!/bin/bash

processId=$(sudo netstat -plten | grep 9030 | awk {'print $9}' | awk -F '/' {'print $1'})
echo $processId

kill -9 $processId

sleep 5

echo 'Starting FDP app'

nohup java -jar /data/fdp-0.0.1-SNAPSHOT.war &> /data/logs/FDPBizApp.log &

exit 0
fi

1 Ответ

0 голосов
/ 30 мая 2018

Исходя из вывода, который вы разместили в комментарии, эта проблема:

sudo: sorry, you must have a tty to run sudo

Вариант 1 - решение visudo

(Это решение из OP):

Используйте visudo, чтобы отредактировать файл sudoers и закомментировать запись requiretty

Опция 2 - Решение плагинов Jenkins

Список функций плагина Publish Over SSH содержит следующий элемент:

Разрешить выполнение команды / сценария в псевдо-TTY

Вы можете включить это, добавив usePty: true в блок sshTransfer вашего издателя.Ваш шаг Jenkinsfile должен выглядеть следующим образом:

stage('deploy'){
    sshPublisher(publishers: [sshPublisherDesc(configName: 'fdpdeploy', transfers: [sshTransfer(excludes: '', execCommand: './deploy.sh', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/fdp-0.0.1-SNAPSHOT.war', usePty: true)], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])           
}

Единственное отличие от вашего существующего шага - добавить , usePty: true после sourceFiles:

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