-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
Jenkins: 2.419
OS: Linux - 5.14.21-150400.24.46-default
Java: 11.0.18 - Oracle Corporation (OpenJDK 64-Bit Server VM)
---
PrioritySorter:5.0.0
URLSCM:1.6
analysis-model-api:11.6.0
android-emulator:592.vb_b_6d427f1923
ansicolor:1.0.3
ant:497.v94e7d9fffa_b_9
antisamy-markup-formatter:162.v0e6ec0fcfcf6
apache-httpcomponents-client-4-api:4.5.14-150.v7a_b_9d17134a_5
authentication-tokens:1.53.v1c90fd9191a_b_
bootstrap5-api:5.3.0-1
bouncycastle-api:2.29
branch-api:2.1122.v09cb_8ea_8a_724
build-name-setter:2.3.0
build-user-vars-plugin:1.9
built-on-column:1.4
caffeine-api:3.1.8-133.v17b_1ff2e0599
checks-api:2.0.0
cloudbees-folder:6.848.ve3b_fd7839a_81
code-coverage-api:4.7.0
command-launcher:107.v773860566e2e
commons-lang3-api:3.13.0-62.v7d18e55f51e2
commons-text-api:1.10.0-68.v0d0b_c439292b_
compact-columns:1.185.vf3851b_4d31fe
conditional-buildstep:1.4.3
credentials:1271.v54b_1c2c6388a_
credentials-binding:631.v861c06d062b_4
dark-theme:354.vc5571c718b_dc
data-tables-api:1.13.5-1
description-setter:1.10
display-url-api:2.3.8
docker-commons:439.va_3cb_0a_6a_fb_29
dtkit-api:3.0.2
durable-task:513.vc48a_a_075a_d93
echarts-api:5.4.0-5
email-ext:2.100
envinject:2.908.v66a_774b_31d93
envinject-api:1.199.v3ce31253ed13
external-monitor-job:207.v98a_a_37a_85525
extra-columns:1.26
fail-the-build-plugin:5.v153b_2c826ef0
favorite:2.4.3
font-awesome-api:6.4.0-2
forensics-api:2.3.0
git:5.2.0
git-client:4.4.0
git-forensics:2.0.0
git-server:99.va_0826a_b_cdfa_d
github:1.37.3
github-api:1.314-431.v78d72a_3fe4c3
github-branch-source:1732.v3f1889a_c475b_
google-oauth-plugin:1.0.9
google-play-android-publisher:4.2
gradle:2.8.2
handy-uri-templates-2-api:2.1.8-22.v77d5b_75e6953
htmlpublisher:1.32
http_request:1.18
instance-identity:173.va_37c494ec4e5
ionicons-api:56.v1b_1c8c49374e
jackson2-api:2.15.2-350.v0c2f3f8fc595
jakarta-activation-api:2.0.1-3
jakarta-mail-api:2.0.1-3
javadoc:243.vb_b_503b_b_45537
javax-activation-api:1.2.0-6
javax-mail-api:1.6.2-9
jaxb:2.3.8-1
jdk-tool:73.vddf737284550
jenkins-design-language:1.27.5.1
jjwt-api:0.11.5-77.v646c772fddb_0
jnr-posix-api:3.1.17-1
jquery:1.12.4-1
jquery3-api:3.7.0-1
jsch:0.2.8-65.v052c39de79b_2
junit:1217.v4297208a_a_b_ce
ldap:694.vc02a_69c9787f
locale:314.v22ce953dfe9e
lockable-resources:1185.v0c528656ce04
mailer:463.vedf8358e006b_
mapdb-api:1.0.9-28.vf251ce40855d
matrix-auth:3.1.10
matrix-project:808.v5a_b_5f56d6966
maven-plugin:3.23
mina-sshd-api-common:2.10.0-69.v28e3e36d18eb_
mina-sshd-api-core:2.10.0-69.v28e3e36d18eb_
monitoring:1.95.0
oauth-credentials:0.645.ve666a_c332668
okhttp-api:4.11.0-157.v6852a_a_fa_ec11
pam-auth:1.10
parameterized-trigger:2.46
pipeline-build-step:505.v5f0844d8d126
pipeline-github-lib:42.v0739460cda_c4
pipeline-graph-analysis:202.va_d268e64deb_3
pipeline-groovy-lib:671.v07c339c842e8
pipeline-input-step:477.v339683a_8d55e
pipeline-milestone-step:111.v449306f708b_7
pipeline-model-api:2.2144.v077a_d1928a_40
pipeline-model-definition:2.2144.v077a_d1928a_40
pipeline-model-extensions:2.2144.v077a_d1928a_40
pipeline-rest-api:2.33
pipeline-stage-step:305.ve96d0205c1c6
pipeline-stage-tags-metadata:2.2144.v077a_d1928a_40
pipeline-stage-view:2.33
pipeline-utility-steps:2.16.0
plain-credentials:143.v1b_df8b_d3b_e48
plugin-usage-plugin:4.1
plugin-util-api:3.3.0
port-allocator:1.10
postbuildscript:3.2.0-460.va_fda_0fa_26720
prism-api:1.29.0-7
pubsub-light:1.17
run-condition:1.6
scm-api:676.v886669a_199a_a_
script-security:1269.v639888f5e366
scriptler:321.v74a_851a_e7ed6
simple-theme-plugin:160.vb_76454b_67900
slave-setup:1.16
snakeyaml-api:1.33-95.va_b_a_e3e47b_fa_4
sse-gateway:1.26
ssh-credentials:308.ve4497b_ccd8f4
ssh-slaves:2.916.vd17b_43357ce4
sshd:3.312.v1c601b_c83b_0e
structs:324.va_f5d6774f3a_d
theme-manager:193.vcef22f6c5f2b_
timestamper:1.26
token-macro:384.vf35b_f26814ec
trilead-api:2.84.v72119de229b_7
variant:59.vf075fe829ccb
view-job-filters:364.v48a_33389553d
warnings-ng:10.4.0
workflow-aggregator:596.v8c21c963d92d
workflow-api:1259.vb_47f14fffc8a_
workflow-basic-steps:1042.ve7b_140c4a_e0c
workflow-cps:3744.v6f2c0fe0e54d
workflow-durable-task-step:1284.v4fcd365b_75b_e
workflow-job:1326.ve643e00e9220
workflow-multibranch:756.v891d88f2cd46
workflow-scm-step:415.v434365564324
workflow-step-api:639.v6eca_cd8c04a_a_
workflow-support:848.v5a_383b_d14921Jenkins: 2.419 OS: Linux - 5.14.21-150400.24.46-default Java: 11.0.18 - Oracle Corporation (OpenJDK 64-Bit Server VM) --- PrioritySorter:5.0.0 URLSCM:1.6 analysis-model-api:11.6.0 android-emulator:592.vb_b_6d427f1923 ansicolor:1.0.3 ant:497.v94e7d9fffa_b_9 antisamy-markup-formatter:162.v0e6ec0fcfcf6 apache-httpcomponents-client-4-api:4.5.14-150.v7a_b_9d17134a_5 authentication-tokens:1.53.v1c90fd9191a_b_ bootstrap5-api:5.3.0-1 bouncycastle-api:2.29 branch-api:2.1122.v09cb_8ea_8a_724 build-name-setter:2.3.0 build-user-vars-plugin:1.9 built-on-column:1.4 caffeine-api:3.1.8-133.v17b_1ff2e0599 checks-api:2.0.0 cloudbees-folder:6.848.ve3b_fd7839a_81 code-coverage-api:4.7.0 command-launcher:107.v773860566e2e commons-lang3-api:3.13.0-62.v7d18e55f51e2 commons-text-api:1.10.0-68.v0d0b_c439292b_ compact-columns:1.185.vf3851b_4d31fe conditional-buildstep:1.4.3 credentials:1271.v54b_1c2c6388a_ credentials-binding:631.v861c06d062b_4 dark-theme:354.vc5571c718b_dc data-tables-api:1.13.5-1 description-setter:1.10 display-url-api:2.3.8 docker-commons:439.va_3cb_0a_6a_fb_29 dtkit-api:3.0.2 durable-task:513.vc48a_a_075a_d93 echarts-api:5.4.0-5 email-ext:2.100 envinject:2.908.v66a_774b_31d93 envinject-api:1.199.v3ce31253ed13 external-monitor-job:207.v98a_a_37a_85525 extra-columns:1.26 fail-the-build-plugin:5.v153b_2c826ef0 favorite:2.4.3 font-awesome-api:6.4.0-2 forensics-api:2.3.0 git:5.2.0 git-client:4.4.0 git-forensics:2.0.0 git-server:99.va_0826a_b_cdfa_d github:1.37.3 github-api:1.314-431.v78d72a_3fe4c3 github-branch-source:1732.v3f1889a_c475b_ google-oauth-plugin:1.0.9 google-play-android-publisher:4.2 gradle:2.8.2 handy-uri-templates-2-api:2.1.8-22.v77d5b_75e6953 htmlpublisher:1.32 http_request:1.18 instance-identity:173.va_37c494ec4e5 ionicons-api:56.v1b_1c8c49374e jackson2-api:2.15.2-350.v0c2f3f8fc595 jakarta-activation-api:2.0.1-3 jakarta-mail-api:2.0.1-3 javadoc:243.vb_b_503b_b_45537 javax-activation-api:1.2.0-6 javax-mail-api:1.6.2-9 jaxb:2.3.8-1 jdk-tool:73.vddf737284550 jenkins-design-language:1.27.5.1 jjwt-api:0.11.5-77.v646c772fddb_0 jnr-posix-api:3.1.17-1 jquery:1.12.4-1 jquery3-api:3.7.0-1 jsch:0.2.8-65.v052c39de79b_2 junit:1217.v4297208a_a_b_ce ldap:694.vc02a_69c9787f locale:314.v22ce953dfe9e lockable-resources:1185.v0c528656ce04 mailer:463.vedf8358e006b_ mapdb-api:1.0.9-28.vf251ce40855d matrix-auth:3.1.10 matrix-project:808.v5a_b_5f56d6966 maven-plugin:3.23 mina-sshd-api-common:2.10.0-69.v28e3e36d18eb_ mina-sshd-api-core:2.10.0-69.v28e3e36d18eb_ monitoring:1.95.0 oauth-credentials:0.645.ve666a_c332668 okhttp-api:4.11.0-157.v6852a_a_fa_ec11 pam-auth:1.10 parameterized-trigger:2.46 pipeline-build-step:505.v5f0844d8d126 pipeline-github-lib:42.v0739460cda_c4 pipeline-graph-analysis:202.va_d268e64deb_3 pipeline-groovy-lib:671.v07c339c842e8 pipeline-input-step:477.v339683a_8d55e pipeline-milestone-step:111.v449306f708b_7 pipeline-model-api:2.2144.v077a_d1928a_40 pipeline-model-definition:2.2144.v077a_d1928a_40 pipeline-model-extensions:2.2144.v077a_d1928a_40 pipeline-rest-api:2.33 pipeline-stage-step:305.ve96d0205c1c6 pipeline-stage-tags-metadata:2.2144.v077a_d1928a_40 pipeline-stage-view:2.33 pipeline-utility-steps:2.16.0 plain-credentials:143.v1b_df8b_d3b_e48 plugin-usage-plugin:4.1 plugin-util-api:3.3.0 port-allocator:1.10 postbuildscript:3.2.0-460.va_fda_0fa_26720 prism-api:1.29.0-7 pubsub-light:1.17 run-condition:1.6 scm-api:676.v886669a_199a_a_ script-security:1269.v639888f5e366 scriptler:321.v74a_851a_e7ed6 simple-theme-plugin:160.vb_76454b_67900 slave-setup:1.16 snakeyaml-api:1.33-95.va_b_a_e3e47b_fa_4 sse-gateway:1.26 ssh-credentials:308.ve4497b_ccd8f4 ssh-slaves:2.916.vd17b_43357ce4 sshd:3.312.v1c601b_c83b_0e structs:324.va_f5d6774f3a_d theme-manager:193.vcef22f6c5f2b_ timestamper:1.26 token-macro:384.vf35b_f26814ec trilead-api:2.84.v72119de229b_7 variant:59.vf075fe829ccb view-job-filters:364.v48a_33389553d warnings-ng:10.4.0 workflow-aggregator:596.v8c21c963d92d workflow-api:1259.vb_47f14fffc8a_ workflow-basic-steps:1042.ve7b_140c4a_e0c workflow-cps:3744.v6f2c0fe0e54d workflow-durable-task-step:1284.v4fcd365b_75b_e workflow-job:1326.ve643e00e9220 workflow-multibranch:756.v891d88f2cd46 workflow-scm-step:415.v434365564324 workflow-step-api:639.v6eca_cd8c04a_a_ workflow-support:848.v5a_383b_d14921
I am currently writing automated tests for Jenkins pipelines and corresponding utility functions. Doing so, I switched some code which previously used string concatenation to now use GStrings to improve readability.
My tests (written in Groovy with `JenkinsPipelineUnit`) did not show any issues/differences and the Script Console seems to correctly interpret this as well, but as soon as running the code in the pipelines itself, I am observing issues which would write the internal representation of GStrings to my JSON file.
Take the following code for example, which contains a standalone re-implementation of https://github.com/jenkinsci/pipeline-utility-steps-plugin/blob/master/src/main/java/org/jenkinsci/plugins/pipeline/utility/steps/json/WriteJSONStep.java for testing purposes:
import net.sf.json.JSON; import net.sf.json.JSONSerializer; job = 42 String writeJSON(Map data) { StringWriter writer = new StringWriter(); JSON jsonObject = JSONSerializer.toJSON(data); jsonObject.write(writer); return writer.toString(); } String get1() { def result = "abc/${job}" println 'get1.result: ' + result.getClass() return result } org.codehaus.groovy.runtime.GStringImpl get2() { def result = "abc/${job}" println 'get2.result: ' + result.getClass() return result } def result1 = get1() println 'get1.return: ' + result1.getClass() println writeJSON([key: result1]) def result2 = get2() println 'get2.return: ' + result2.getClass() println writeJSON([key: result2])
This will print the following output:
get1.result: class org.codehaus.groovy.runtime.GStringImpl get1.return: class java.lang.String {"key":"abc/42"} get2.result: class org.codehaus.groovy.runtime.GStringImpl get2.return: class org.codehaus.groovy.runtime.GStringImpl {"key":{"valueCount":1,"strings":["abc/",""],"bytes":[97,98,99,47,52,50],"values":[42]}}
As we can see, while in `get1` the `result` variable is a GString, it automatically gets converted to a string due to the return type of the method. When running this from within the pipeline itself, the automatic conversion does not seem to be take place, which is confusing and apparently cannot be tested from the "outside".