Using the Jenkins CLI

Jenkins setup: Running directly under systemd on Bookworm amd64 using
openjdk 17.0.13 2024-10-15
OpenJDK Runtime Environment (build 17.0.13+11-Debian-2deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.13+11-Debian-2deb12u1, mixed mode, sharing)

Jenkins: 2.487
OS: Linux - 6.1.0-27-amd64
Java: 17.0.13 - Debian (OpenJDK 64-Bit Server VM)

analysis-model-api:12.9.1
antisamy-markup-formatter:162.v0e6ec0fcfcf6
apache-httpcomponents-client-4-api:4.5.14-208.v438351942757
apache-httpcomponents-client-5-api:5.4-124.v31e2987e48f4
asm-api:9.7.1-97.v4cc844130d97
authentication-tokens:1.119.v50285141b_7e1
blueocean:1.27.16
blueocean-bitbucket-pipeline:1.27.16
blueocean-commons:1.27.16
blueocean-config:1.27.16
blueocean-core-js:1.27.16
blueocean-dashboard:1.27.16
blueocean-display-url:2.4.3
blueocean-events:1.27.16
blueocean-git-pipeline:1.27.16
blueocean-github-pipeline:1.27.16
blueocean-i18n:1.27.16
blueocean-jwt:1.27.16
blueocean-personalization:1.27.16
blueocean-pipeline-api-impl:1.27.16
blueocean-pipeline-editor:1.27.16
blueocean-pipeline-scm-api:1.27.16
blueocean-rest:1.27.16
blueocean-rest-impl:1.27.16
blueocean-web:1.27.16
bootstrap5-api:5.3.3-1
bouncycastle-api:2.30.1.78.1-248.ve27176eb_46cb_
branch-api:2.1200.v4b_a_3da_2eb_db_4
caffeine-api:3.1.8-133.v17b_1ff2e0599
checks-api:2.2.1
cloudbees-bitbucket-branch-source:922.va_71d0e0b_7b_8d
cloudbees-folder:6.959.v4ed5cc9e2dd4
commons-lang3-api:3.17.0-84.vb_b_938040b_078
commons-text-api:1.12.0-129.v99a_50df237f7
configuration-as-code:1897.v79281e066ea_7
coverage:1.16.1
credentials:1389.vd7a_b_f5fa_50a_2
credentials-binding:687.v619cb_15e923f
data-tables-api:2.1.8-1
display-url-api:2.209.v582ed814ff2f
durable-task:581.v299a_5609d767
echarts-api:5.5.1-4
eddsa-api:0.3.0-4.v84c6f0f4969e
favorite:2.221.v19ca_666b_62f5
font-awesome-api:6.6.0-2
forensics-api:2.6.0
git:5.6.0
git-client:6.1.0
gitea:220.v4618c82a_40fb_
gitea-checks:498.v4267e9fd1499
github:1.40.0
github-api:1.321-478.vc9ce627ce001
github-branch-source:1807.v50351eb_7dd13
groovy:457.v99900cb_85593
gson-api:2.11.0-85.v1f4e87273c33
handy-uri-templates-2-api:2.1.8-30.v7e777411b_148
htmlpublisher:1.37
instance-identity:201.vd2a_b_5a_468a_a_6
ionicons-api:74.v93d5eb_813d5f
jackson2-api:2.17.0-379.v02de8ec9f64c
jakarta-activation-api:2.1.3-1
jakarta-mail-api:2.1.3-1
javax-activation-api:1.2.0-7
javax-mail-api:1.6.2-10
jaxb:2.3.9-1
jenkins-design-language:1.27.16
jjwt-api:0.11.5-112.ve82dfb_224b_a_d
joda-time-api:2.13.0-93.v9934da_29b_a_e9
jquery3-api:3.7.1-2
json-api:20240303-101.v7a_8666713110
json-path-api:2.9.0-118.v7f23ed82a_8b_8
junit:1309.v0078b_fecd6ed
mailer:489.vd4b_25144138f
matrix-project:840.v812f627cb_578
mina-sshd-api-common:2.14.0-133.vcc091215a_358
mina-sshd-api-core:2.14.0-133.vcc091215a_358
okhttp-api:4.11.0-181.v1de5b_83857df
people-view:1.2
pipeline-build-step:540.vb_e8849e1a_b_d8
pipeline-graph-analysis:216.vfd8b_ece330ca_
pipeline-groovy-lib:744.v5b_556ee7c253
pipeline-input-step:495.ve9c153f6067b_
pipeline-milestone-step:119.vdfdc43fc3b_9a_
pipeline-model-api:2.2218.v56d0cda_37c72
pipeline-model-definition:2.2218.v56d0cda_37c72
pipeline-model-extensions:2.2218.v56d0cda_37c72
pipeline-stage-step:312.v8cd10304c27a_
pipeline-stage-tags-metadata:2.2218.v56d0cda_37c72
plain-credentials:183.va_de8f1dd5a_2b_
plugin-util-api:5.1.0
prism-api:1.29.0-18
pubsub-light:1.18
role-strategy:743.v142ea_b_d5f1d3
scm-api:698.v8e3b_c788f0a_6
script-security:1369.v9b_98a_4e95b_2d
snakeyaml-api:2.3-123.v13484c65210a_
sse-gateway:1.27
ssh-credentials:349.vb_8b_6b_9709f5b_
sshd:3.330.vc866a_8389b_58
structs:338.v848422169819
token-macro:400.v35420b_922dcb_
variant:60.v7290fc0eb_b_cd
warnings-ng:11.12.0
workflow-api:1336.vee415d95c521
workflow-basic-steps:1058.vcb_fc1e3a_21a_9
workflow-cps:3996.va_f5c1799f978
workflow-durable-task-step:1398.vf6c9e89e5988
workflow-job:1468.vcf4f5ee92395
workflow-multibranch:795.ve0cb_1f45ca_9a_
workflow-scm-step:427.v4ca_6512e7df1
workflow-step-api:678.v3ee58b_469476
workflow-support:936.v9fa_77211ca_e1

I am trying to run the Jenkins CLI using these instructions:

So I have a few environment variables, but I don’t get lucky:

$ env |grep -F JENKINS
JENKINS_API_TOKEN=113c5b4b85715b1e3a1eb6faedea071988
JENKINS_URL=http://192.168.122.148/jenkins/
JENKINS_USER_ID=admin
$ java -jar /opt/jenkins-cli.jar help

ERROR: You must authenticate to access this Jenkins.
Jenkins CLI
Usage: java -jar jenkins-cli.jar [-s URL] command [opts...] args...

I’ve omitted the rest of the help message, but why does authentication not work? And how can I make it work, please? I have been looking around for logs, but didn’t find anything.

While the question is still open, I managed to use the CLI, but only with different parameters:

  • only with an RSA key, no ED25519 key, nor with a token,
  • and only without a passphrase. Even using ssh-agent did not work.

Can someone please shine a light on what’s going on here, or why these limitations are present? It would also be nice if the documentation could be amended to include all the requirements, as this area is imho not well documented at the moment.

I’ve experimented a little more, and neither the token nor the password worked. Example:

$ curl -s --cookie-jar /tmp/cookies.txt -u 'admin:113c5b4b85715b1e3a1eb6faedea071988' http://192.168.122.148/jenkins/crumbIssuer/api/json
<html><head><meta http-equiv='refresh' content='1;url=/jenkins/login?from=%2Fjenkins%2FcrumbIssuer%2Fapi%2Fjson'/><script id='redirect' data-redirect-url='/jenkins/login?from=%2Fjenkins%2FcrumbIssuer%2Fapi%2Fjson' src='/jenkins/static/98ff3e58/scripts/redirect.js'></script></head><body style='background-color:white; color:white;'>
Authentication required
<!--
-->

</body></html>

In the meantime, I have also tried without the proxy, but get the same results, ie, 401s. It’s just either jenkins-cli.jar or curl, plus Jenkins, all on the same machine, ie, no non-local networking involved. On one occasion, I got a 200 + an error message telling me that I need to authenticate.