Я пытаюсь создать папку в Jenkins, используя отличный сценарий. Для этого я использую вызов REST API.
Моей отправной точкой была команда curl:
curl -XPOST "http://userName:YourApiToken@JenkinsURL:Port/createItem?name=FolderName&mode=com.cloudbees.hudson.plugins.folder.Folder" -H "Content-Type:application/x-www-form-urlencoded"
Я получил это от https://gist.github.com/marshyski/abaa1ccbcee5b15db92c и позже узнал, что это также работает, если вы введете пользователя в URL. Использование этой строки в Windows cmd прекрасно работает и создает новую папку в моем Jenkins.
Теперь я пытаюсь сделать то же самое, но из отличного сценария. Для этого я использую следующий код:
import groovyx.net.http.*
def post = new URL("http://userName:YourApiToken@JenkinsURL:Port/createItem?name=FolderName&mode=com.cloudbees.hudson.plugins.folder.Folder").openConnection();
post.setRequestMethod("POST")
post.setDoOutput(true)
post.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")
def postRC = post.getResponseCode();
println(postRC);
if(postRC.equals(200)) {
println(post.getInputStream().getText());
}
Я получил это в основном от Groovy встроенный клиент REST / HTTP? (я слышал, Apache Http устарел)
Короче говоря, мне не удалось создать папку с заданным скриптовым скриптом. Я всегда получаю ответ 403 (я запускаю скрипт из windows cmd и внутри jenkins с консолью скрипта).
Я также поиграл с Jenkins-crumb, но это, кажется, не нужно, потому что вышеуказанная команда cmd уже работала.
Итак, вопрос в том, знает ли кто-то, что мне не хватает? почему скрипт groovy не работает, а команда curl работает?
Или у кого-то другой подход к созданию папки в Jenkins из отличного сценария?
Edit:
Когда я пытаюсь запустить команду curl в скрипте groovy с помощью .execute (), я получаю сообщение об ошибке «Система не может найти указанный файл».
String command = "curl -XPOST "+ '"http://user.name:ApiToken@JenkinsURL:8080/createItem?name=FolderName&mode=com.cloudbees.hudson.plugins.folder.Folder"'+ ' -H "Content-Type:application/x-www-form-urlencoded"'
println(command)
command.execute()