From db351823bec94170209346b39e5b800fd03e0de0 Mon Sep 17 00:00:00 2001 From: Rowe Date: Mon, 8 Jul 2024 14:57:17 -0700 Subject: [PATCH 1/8] [JENKINS-73421] Expose getExternalizableId() in RunWrapper API --- .../plugins/workflow/support/steps/build/RunWrapper.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java b/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java index f59ed082..c99f44fd 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java @@ -314,6 +314,11 @@ public String getId() throws AbortException { return build().getId(); } + @Whitelisted + public String getExteralizableId() throws AbortException { + return build().getExternalizableId(); + } + /** * Get environment variables defined in the build. * From dfdf19bc23df258236f0c1c29cb38c5008a8252b Mon Sep 17 00:00:00 2001 From: stuartrowe Date: Mon, 8 Jul 2024 15:01:07 -0700 Subject: [PATCH 2/8] Return exisiting externalizableId member instead --- .../plugins/workflow/support/steps/build/RunWrapper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java b/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java index c99f44fd..19741909 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java @@ -315,8 +315,8 @@ public String getId() throws AbortException { } @Whitelisted - public String getExteralizableId() throws AbortException { - return build().getExternalizableId(); + public String getExteralizableId() { + return externalizableId; } /** From f129830bc09fc5b1a925b8dacb12eff108e2e8a9 Mon Sep 17 00:00:00 2001 From: stuartrowe Date: Mon, 8 Jul 2024 15:25:09 -0700 Subject: [PATCH 3/8] Add test for RunWRapper#getExternalizableId() --- .../workflow/support/steps/build/RunWrapperTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java b/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java index 859fc466..5c95a783 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java @@ -287,6 +287,17 @@ public void upstreamBuilds() throws Throwable { }); } + @Test + @Issue("JENKINS-73421") + public void externalizableId() throws Throwable { + sessions.then(j -> { + WorkflowJob first = j.createProject(WorkflowJob.class, "first-job"); + first.setDefinition(new CpsFlowDefinition("echo currentBuild.getExternalizableId()'\n", true)); + WorkflowRun firstRun = j.buildAndAssertSuccess(first); + j.assertLogContains(firstRun.getExternalizableId(), firstRun); + }); + } + // Like org.hamcrest.text.MatchesPattern.matchesPattern(String) but doing a substring, not whole-string, match: private static Matcher containsRegexp(final String rx) { return new SubstringMatcher("containing the regexp", false, rx) { From 36224c1a99ed70ebd5e331818c081ee82ede858d Mon Sep 17 00:00:00 2001 From: stuartrowe Date: Mon, 8 Jul 2024 15:28:19 -0700 Subject: [PATCH 4/8] fix extra ' in externalizableId test pipeline definition --- .../plugins/workflow/support/steps/build/RunWrapperTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java b/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java index 5c95a783..15c8db5f 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java @@ -292,7 +292,7 @@ public void upstreamBuilds() throws Throwable { public void externalizableId() throws Throwable { sessions.then(j -> { WorkflowJob first = j.createProject(WorkflowJob.class, "first-job"); - first.setDefinition(new CpsFlowDefinition("echo currentBuild.getExternalizableId()'\n", true)); + first.setDefinition(new CpsFlowDefinition("echo currentBuild.getExternalizableId()\n", true)); WorkflowRun firstRun = j.buildAndAssertSuccess(first); j.assertLogContains(firstRun.getExternalizableId(), firstRun); }); From 3ded1d47d6d985b68692ba5b4304c84fc155985c Mon Sep 17 00:00:00 2001 From: stuartrowe Date: Mon, 8 Jul 2024 15:32:30 -0700 Subject: [PATCH 5/8] fix spelling --- .../plugins/workflow/support/steps/build/RunWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java b/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java index 19741909..2214db77 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.java @@ -315,7 +315,7 @@ public String getId() throws AbortException { } @Whitelisted - public String getExteralizableId() { + public String getExternalizableId() { return externalizableId; } From ca98acf3940477d5393e167f123e7d1f7817b388 Mon Sep 17 00:00:00 2001 From: Stuart Rowe Date: Tue, 9 Jul 2024 12:07:17 -0700 Subject: [PATCH 6/8] Apply suggestions from code review Make the RunWrapperTest#externalizableId) test more robust and exercise the property getter. Co-authored-by: Jesse Glick --- .../plugins/workflow/support/steps/build/RunWrapperTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java b/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java index 15c8db5f..112e8c5b 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java @@ -292,9 +292,9 @@ public void upstreamBuilds() throws Throwable { public void externalizableId() throws Throwable { sessions.then(j -> { WorkflowJob first = j.createProject(WorkflowJob.class, "first-job"); - first.setDefinition(new CpsFlowDefinition("echo currentBuild.getExternalizableId()\n", true)); + first.setDefinition(new CpsFlowDefinition("echo(/externalizableId=$currentBuild.externalizableId/)", true)); WorkflowRun firstRun = j.buildAndAssertSuccess(first); - j.assertLogContains(firstRun.getExternalizableId(), firstRun); + j.assertLogContains("externalizableId=first-job#1", firstRun); }); } From aaade5b88125d3188424c456379b2a60ae02ce4e Mon Sep 17 00:00:00 2001 From: stuartrowe Date: Tue, 9 Jul 2024 12:10:41 -0700 Subject: [PATCH 7/8] Avoid hardcoding the externalizableId --- .../plugins/workflow/support/steps/build/RunWrapperTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java b/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java index 112e8c5b..9defe7ff 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapperTest.java @@ -294,7 +294,7 @@ public void externalizableId() throws Throwable { WorkflowJob first = j.createProject(WorkflowJob.class, "first-job"); first.setDefinition(new CpsFlowDefinition("echo(/externalizableId=$currentBuild.externalizableId/)", true)); WorkflowRun firstRun = j.buildAndAssertSuccess(first); - j.assertLogContains("externalizableId=first-job#1", firstRun); + j.assertLogContains("externalizableId=" + firstRun.getExternalizableId(), firstRun); }); } From b76885ca921744c4eb26afcc590ea1d470efb404 Mon Sep 17 00:00:00 2001 From: stuartrowe Date: Tue, 9 Jul 2024 23:29:13 -0700 Subject: [PATCH 8/8] Add help text for RunWrapper 'externalizableId' property --- .../plugins/workflow/support/steps/build/RunWrapper/help.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper/help.html b/src/main/resources/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper/help.html index 90ecf847..0c0a35ab 100644 --- a/src/main/resources/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper/help.html +++ b/src/main/resources/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper/help.html @@ -12,6 +12,7 @@
fullProjectName
Full name of the project of this build, including folders such as folder1/folder2/foo.
description
additional information about the build
id
normally number as a string
+
externalizableId
identifier for this build from combining fullProjectName and number as fullProjectName#number
timeInMillis
time since the epoch when the build was scheduled
startTimeInMillis
time since the epoch when the build started running
duration
duration of the build in milliseconds