Actually, I still didn't find a solution to my problem.

1) I don't understand the purpose of "wait-node-offline"

java -jar jenkins-cli.jar -s https://jenkins.my-domain -auth user:pass 
wait-node-offline some-node

This will never exit, unless I use "offline-node" first. But "offline-node" 
exits immediately.

To be precise: actually "wait-node-offline" will crash after some time and 
will never exit if used through a reverse proxy like nginx. But it will 
never exit if connecting to jenkins directly.


2) "offline-node" exits immediately and the node is set to "offline":

java -jar jenkins-cli.jar -s https://jenkins.my-domain -auth user:pass 
offline-node some-node

The builds which were running will continue to run until finished (existing 
builds are not interrupted) - this is expected.


3) So my reasoning is that I need some kind of:

java -jar jenkins-cli.jar -s https://jenkins.my-domain -auth user:pass 
list-jobs some-view

But only showing the builds which are currently running (for a given view, 
or for a given node). Then parse it, and decide if the node is really 
offline (as in, not accepting any new builds, and not running any builds 
right now) or not.


Unfortunately, I don't see such an option in https://jenkins.my-domain/cli/



On Friday, October 27, 2017 at 7:25:43 AM UTC+9, Devin Nusbaum wrote:
>
> Great, thanks for confirming! I’ll update the docs.
>
> Thanks,
> Devin
>
> On Oct 26, 2017, at 6:06 PM, 'Tomasz Chmielewski' via Jenkins Users <
> [email protected] <javascript:>> wrote:
>
> That was it! Adding proxy_buffering off helped.
>
> For reference, here is my SSL vhost definition:
>
> server {
>
>         listen 443 ssl;
>
>         server_name jenkins.my-domain;
>
>         ssl_certificate ssl/my-domain.crt;
>         ssl_certificate_key ssl/my-domain.key;
>         ssl_dhparam ssl/dhparam-2048.pem;
>         add_header Strict-Transport-Security "max-age=31536000; 
> includeSubDomains";
>         add_header X-Frame-Options SAMEORIGIN;
>
>         access_log  /var/log/nginx/jenkins.my-domain.access.log;
>         error_log /var/log/nginx/jenkins.my-domain.error.log;
>
>         location / {
>             proxy_set_header        Host $host:$server_port;
>             proxy_set_header        X-Real-IP $remote_addr;
>             proxy_set_header        X-Forwarded-For 
> $proxy_add_x_forwarded_for;
>             proxy_set_header        X-Forwarded-Proto $scheme;
>             proxy_redirect http:// https://;
>             proxy_pass              http://jenkins;
>
>             # Required for new HTTP-based CLI
>             proxy_http_version 1.1;
>             proxy_request_buffering off;
>             proxy_buffering off;
>
>             # workaround for 
> https://issues.jenkins-ci.org/browse/JENKINS-45651
>             # not used for this installation
>             #add_header 'X-SSH-Endpoint' 'jenkins.my-domain:22' always;
>         }
> }
>
>
> On Friday, October 27, 2017 at 6:56:55 AM UTC+9, Devin Nusbaum wrote:
>>
>> Some comments on https://issues.jenkins-ci.org/browse/JENKINS-43666 suggest 
>> that proxy_buffering off; is needed for SSL connections. (I was also 
>> testing nginx reverse proxies in the past and have that setting in my SSL 
>> config; might have forgotten to update the SSL docs with my findings) Try 
>> setting that option, and if it works I can update the  SSL section of the 
>> wiki page.
>>
>> On Oct 26, 2017, at 5:43 PM, 'Tomasz Chmielewski' via Jenkins Users <
>> jenkins...@googlegroups. <http://googlegroups.com/>com 
>> <http://googlegroups.com/>> wrote:
>>
>> nginx vhost is almost the exact copy of the vhost on 
>> https://wiki.jenkins.io/display/JENKINS/Jenkins+behind+an+NGinX+reverse+proxy:
>>
>> upstream jenkins {
>>     server 127.0.0.1:8080 fail_timeout=0;
>> }
>>
>> server {
>>
>>     listen 80;
>>     server_name jenkins.my-domain;
>>
>>     add_header X-Frame-Options SAMEORIGIN;
>>     include /etc/nginx/release.conf;
>>
>>     access_log  /var/log/nginx/redirects-access.log vhosts;
>>     error_log  /var/log/nginx/redirects-error.log;
>>
>>     rewrite ^ https://$host$request_uri? permanent;
>> }
>>
>>
>> server {
>>
>>         listen 443 ssl;
>>
>>         server_name jenkins.my-domain;
>>
>>         ssl_certificate ssl/my-domain.crt;
>>         ssl_certificate_key ssl/my-domain.key;
>>         ssl_dhparam ssl/dhparam-2048.pem;
>>         add_header Strict-Transport-Security "max-age=31536000; 
>> includeSubDomains";
>>         add_header X-Frame-Options SAMEORIGIN;
>>
>>         access_log  /var/log/nginx/jenkins.my-domain.access.log;
>>         error_log /var/log/nginx/jenkins.my-domain.error.log;
>>
>>         location / {
>>             proxy_set_header        Host $host:$server_port;
>>             proxy_set_header        X-Real-IP $remote_addr;
>>             proxy_set_header        X-Forwarded-For 
>> $proxy_add_x_forwarded_for;
>>             proxy_set_header        X-Forwarded-Proto $scheme;
>>             proxy_redirect http:// https://;
>>             proxy_pass              http://jenkins;
>>             # Required for new HTTP-based CLI
>>             proxy_http_version 1.1;
>>             proxy_request_buffering off;
>>             # workaround for 
>> https://issues.jenkins-ci.org/browse/JENKINS-45651
>>             add_header 'X-SSH-Endpoint' 'jenkins.my-domain:22' always;
>>         }
>> }
>>
>>
>> So either I'm blind, or the documentation is somehow wrong?
>>
>> And indeed, I can see "java.io.IOException: HTTP full-duplex channel 
>> timeout" in jenkins log.
>>
>> This one indeed works:
>>
>> java -jar jenkins-cli.jar -s http://localhost:8080 <https://jenkins-url/>
>>  -auth user:pass help offline-node
>>
>> But since I need to execute it from remote, I'd rather connect to 
>> https://jenkins.my-domain
>>
>>
>> On Friday, October 27, 2017 at 6:26:39 AM UTC+9, Devin Nusbaum wrote:
>>>
>>> Make sure to follow 
>>> https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+Nginx if 
>>> Nginx is configured as a a reverse proxy.
>>>
>>> Notably proxy_http_version 1.1; and  proxy_request_buffering off; are 
>>> required for your version of Jenkins. (If your Jenkins logs at the time you 
>>> try to connect via CLI have errors that say something to the effect 
>>> of “Full-duplex channel timeout” then I expect those settings to fix it.)
>>>
>>> On Oct 26, 2017, at 5:18 PM, 'Tomasz Chmielewski' via Jenkins Users <
>>> jenkins...@googlegroups. <http://googlegroups.com/>com 
>>> <http://googlegroups.com/>> wrote:
>>>
>>> Except... it doesn't seem to work.
>>>
>>> $ java -jar jenkins-cli.jar -s https://jenkins-url -auth user:pass help 
>>> offline-node
>>> $ echo $?
>>> 255
>>>
>>> In nginx log:
>>>
>>> 10.11.0.8 - user [26/Oct/2017:21:11:51 +0000] "GET / HTTP/1.1" 200 
>>> 150393 "-" "Java/1.8.0_131"
>>> 10.11.0.8 - user [26/Oct/2017:21:11:52 +0000] "GET 
>>> /crumbIssuer/api/xml/?xpath=concat(//crumbRequestField,\x22:\x22,//crumb) 
>>> HTTP/1.1" 404 335 "-" "Java/1.8.0_131"
>>> 10.11.0.8 - user [26/Oct/2017:21:12:07 +0000] "POST /cli?remoting=false 
>>> HTTP/1.1" 200 11 "-" "Java/1.8.0_131"
>>> 10.11.0.8 - user [26/Oct/2017:21:12:07 +0000] "POST /cli?remoting=false 
>>> HTTP/1.1" 500 13912 "-" "Java/1.8.0_131"
>>>
>>> How do I debug this?
>>>
>>>
>>>
>>> On Friday, October 27, 2017 at 6:07:03 AM UTC+9, Tomasz Chmielewski 
>>> wrote:
>>>>
>>>> Got it, thanks:
>>>>
>>>> https://wiki.jenkins.io/display/JENKINS/Jenkins+CLI
>>>>
>>>> On Friday, October 27, 2017 at 5:57:18 AM UTC+9, Robert Hales wrote:
>>>>>
>>>>> You have to use the Jenkins CLI. I guess that can be a bit confusing. 
>>>>> It isn't a script available to run at the command line. Jenkins has their 
>>>>> own CLI. If you google for it, you will find the details pretty easily. 
>>>>>
>>>>> On Thursday, October 26, 2017 at 2:55:07 PM UTC-6, Tomasz Chmielewski 
>>>>> wrote:
>>>>>>
>>>>>> Hmm, where do I find "offline-node" command?
>>>>>>
>>>>>> root@jenkins:~# dpkg -L jenkins
>>>>>> /.
>>>>>> /usr
>>>>>> /usr/share
>>>>>> /usr/share/doc
>>>>>> /usr/share/doc/jenkins
>>>>>> /usr/share/doc/jenkins/changelog.gz
>>>>>> /usr/share/doc/jenkins/copyright
>>>>>> /usr/share/jenkins
>>>>>> /usr/share/jenkins/jenkins.war
>>>>>> /etc
>>>>>> /etc/logrotate.d
>>>>>> /etc/logrotate.d/jenkins
>>>>>> /etc/default
>>>>>> /etc/default/jenkins
>>>>>> /etc/init.d
>>>>>> /etc/init.d/jenkins
>>>>>> /var
>>>>>> /var/cache
>>>>>> /var/cache/jenkins
>>>>>> /var/lib
>>>>>> /var/lib/jenkins
>>>>>> /var/log
>>>>>> /var/log/jenkins
>>>>>>
>>>>>> root@jenkins:~# find / -name offline-node
>>>>>>
>>>>>> root@jenkins:~# 
>>>>>>
>>>>>> root@jenkins:~# dpkg -l | grep jenkins
>>>>>> ii  jenkins                          2.73.2       (...)
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Friday, October 27, 2017 at 12:21:17 AM UTC+9, Robert Hales wrote:
>>>>>>>
>>>>>>> In the CLI, use the 'offline-node' command. Another useful command 
>>>>>>> in what it looks like you want to do might be "wait-offline-node".
>>>>>>>
>>>>>>> You could also create a groovy script to do it and run that from the 
>>>>>>> REST API. 
>>>>>>>
>>>>>>> On Thursday, October 26, 2017 at 3:35:29 AM UTC-6, Tomasz 
>>>>>>> Chmielewski wrote:
>>>>>>>>
>>>>>>>> Is there a CLI/scripted way to stop scheduling any new builds on a 
>>>>>>>> given node?
>>>>>>>>
>>>>>>>> Basically, any builds currently running on a given node should 
>>>>>>>> continue to run until they are finished -- and no new builds should be 
>>>>>>>> started.
>>>>>>>>
>>>>>>>> Think of "retiring" a node, and replacing it with a new one -- but 
>>>>>>>> allowing any existing jobs to finish gracefully.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Tomasz Chmielewski
>>>>>>>> https://lxadm.com
>>>>>>>>
>>>>>>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Jenkins Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/jenkinsci-users/a19302b1-6ed1-44bb-b65b-28868a64708b%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/jenkinsci-users/a19302b1-6ed1-44bb-b65b-28868a64708b%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>>
>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Jenkins Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/jenkinsci-users/476c0ec2-753f-45bd-944b-2f9dcf60deae%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/jenkinsci-users/476c0ec2-753f-45bd-944b-2f9dcf60deae%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Jenkins Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] <javascript:>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/jenkinsci-users/cb454333-dddf-4186-ac97-66550f856454%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/jenkinsci-users/cb454333-dddf-4186-ac97-66550f856454%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/fb7bee5a-6561-4373-8342-6855ad5ee39f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to