2016-08-26 4 views
2

Я запускаю прослушиваемую книгу, в которой устанавливаются дженкинсы, и нужно запустить cli.jar для запуска нескольких сценариев. Ему нужен порт jnlp, который я хочу настроить через командную команду shell. Но, похоже, он терпит неудачу.Как установить порт jnlp в jenkins через командную строку?

- name: Set jnlp port 
    shell: 'curl -X POST -d ".useSecurity=on&slaveAgentPort.type=fixed&value=49187&core%3Aapply=true&json=%7B%22useSecurity%22%3A+%7B%22slaveAgentPort%22%3A+%7B%22type%22%3A+%22fixed%22%2C+%22value%22%3A+%2249187%22%7D%7D%2C+%22core%3Aapply%22%3A+%22true%22%7D" --header "Content-Type:application/x-www-form-urlencoded" http://localhost:8080//configureSecurity/configure' 
    remote_user: jenkins 
    become: yes 
    become_method: sudo 

Бег с -vvv вариантов дает:

ERROR! Syntax Error while loading YAML. 


The error appears to have been in '/vagrant/ansible/roles/jenkins1.648/tasks/plugins.yml': line 37, column 370, but may 
be elsewhere in the file depending on the exact syntax problem. 

The offending line appears to be: 

- name: Check update center and push it to the update URL 
    shell: 'curl -X POST -d .useSecurity=on&slaveAgentPort.type=fixed&value=49187&core%3Aapply=true&json=%7B%22useSecurity%22%3A+%7B%22slaveAgentPort%22%3A+%7B%22type%22%3A+%22fixed%22%2C+%22value%22%3A+%2249187%22%7D%7D%2C+%22core%3Aapply%22%3A+%22true%22%7D" --header "Content-Type:application/x-www-form-urlencoded" http://localhost:8080//configureSecurity/configure' -vvv 
                                                                                               ^here 
This one looks easy to fix. It seems that there is a value started 
with a quote, and the YAML parser is expecting to see the line ended 
with the same kind of quote. For instance: 

    when: "ok" in result.stdout 

Could be written as: 

    when: '"ok" in result.stdout' 

Or equivalently: 

    when: "'ok' in result.stdout" 
We could be wrong, but this one looks like it might be an issue with 
unbalanced quotes. If starting a value with a quote, make sure the 
line ends with the same set of quotes. For instance this arbitrary 
example: 

    foo: "bad" "wolf" 

Could be written as: 

    foo: '"bad" "wolf"' 

Ansible failed to complete successfully. Any error output should be 
visible above. Please fix these errors and try again. 
+0

@techraf: да, когда я просто пытаюсь запустить его из командной строки –

+0

@techraf Я добавляю -vvv после завершения команды curl. Не могли бы вы рассказать, как вы ожидаете, что это будет –

+0

. Хорошо, я просто хочу установить порт TCP/jnlp в jenkins, и одна и та же команда curl работает отлично, но не с возможностью. Я пытаюсь найти решение, почему оно терпит неудачу. –

ответ

2

Если все в порядке с вызовом заводной команды Дженкинс-Cli через анзибль, это работает для меня:

def instance=jenkins.model.Jenkins.instance 
instance.setSlaveAgentPort(9999) 
instance.save() 

анзибль задачи может выглядеть так:

- name: Set jnlp port 
    shell: 'java -jar /tmp/jenkins-cli.jar -s http://localhost:8080 groovy /tmp/fix-jnlp-port.groovy' 
    remote_user: jenkins 
    become: yes 
    become_method: sudo 

Очевидно, вам нужно будет скачать файл jenkins-cli.jar ... и установить java заранее.

Это предполагает, что JNLP-порт будет отправлен (через некоторый заголовок) Дженкинсом и будет доступен локально.

Кроме того, вы можете передать этот код groovy на консоль скрипта с помощью curl (я этого не пробовал). Это акция ссылки примеры: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Script+Console

curl --data-urlencode "script=$(<./somescript.groovy)" http://jenkins/scriptText 

И просто удалить зависимость от завитка, не стесняйтесь попробовать с get_url и Ури анзибль модулей.

+0

Это выглядит интересно. Попробуй это. Благодаря! –

+0

Будет ли это продолжаться и настроить порт на постоянной основе или он просто будет использовать этот порт временно для сценария –

+0

instance.save() заставит его сохраняться при перезагрузке процесса jenkins. Если вы опустите это, порт jnlp будет установлен только до тех пор, пока процесс jenkins не завершится. Другими словами, это не выполнение каждого скрипта. –

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