From a7ff0a463390d336c30dc055a5fd18b22aedd643 Mon Sep 17 00:00:00 2001 From: Andrey Babushkin Date: Mon, 19 Aug 2019 15:19:08 +0300 Subject: [PATCH] Expose commit hash from SCM as CHANGE_REVISION environment variable --- .../java/jenkins/branch/BranchNameContributor.java | 7 +++++++ .../java/jenkins/branch/BranchNameContributorTest.java | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/jenkins/branch/BranchNameContributor.java b/src/main/java/jenkins/branch/BranchNameContributor.java index 79604915..9acd2e2e 100644 --- a/src/main/java/jenkins/branch/BranchNameContributor.java +++ b/src/main/java/jenkins/branch/BranchNameContributor.java @@ -34,6 +34,7 @@ import java.util.Date; import jenkins.scm.api.SCMHeadOrigin; import jenkins.scm.api.SCMHead; +import jenkins.scm.api.SCMRevision; import jenkins.scm.api.metadata.ContributorMetadataAction; import jenkins.scm.api.metadata.ObjectMetadataAction; import jenkins.scm.api.mixin.ChangeRequestSCMHead; @@ -57,10 +58,14 @@ public void buildEnvironmentFor(Job j, EnvVars envs, TaskListener listener) thro BranchProjectFactory projectFactory = ((MultiBranchProject) parent).getProjectFactory(); if (projectFactory.isProject(j)) { Branch branch = projectFactory.getBranch(j); + SCMRevision rev = projectFactory.getRevision(j); SCMHead head = branch.getHead(); // Note: not using Branch.name, since in the future that could be something different // than SCMHead.name, which is what we really want here. envs.put("BRANCH_NAME", head.getName()); + if (rev != null) { + envs.put("CHANGE_REVISION", rev.toString()); + } if (head instanceof ChangeRequestSCMHead) { envs.putIfNotNull("CHANGE_ID", ((ChangeRequestSCMHead) head).getId()); SCMHead target = ((ChangeRequestSCMHead) head).getTarget(); @@ -83,6 +88,7 @@ public void buildEnvironmentFor(Job j, EnvVars envs, TaskListener listener) thro envs.putIfNotNull("CHANGE_AUTHOR_DISPLAY_NAME", cma.getContributorDisplayName()); envs.putIfNotNull("CHANGE_AUTHOR_EMAIL", cma.getContributorEmail()); } + } if (head instanceof TagSCMHead) { envs.put("TAG_NAME", head.getName()); @@ -90,6 +96,7 @@ public void buildEnvironmentFor(Job j, EnvVars envs, TaskListener listener) thro envs.putIfNotNull("TAG_UNIXTIME", Long.toString(((TagSCMHead) head).getTimestamp()/1000L)); envs.putIfNotNull("TAG_DATE", new Date(((TagSCMHead) head).getTimestamp()).toString()); } + } } } diff --git a/src/test/java/jenkins/branch/BranchNameContributorTest.java b/src/test/java/jenkins/branch/BranchNameContributorTest.java index 7c3855fe..cd1ee7c8 100644 --- a/src/test/java/jenkins/branch/BranchNameContributorTest.java +++ b/src/test/java/jenkins/branch/BranchNameContributorTest.java @@ -92,6 +92,7 @@ public void buildEnvironmentFor() throws Exception { c.createRepository("foo", MockRepositoryFlags.FORKABLE); Integer cr1Num = c.openChangeRequest("foo", "master"); Integer cr2Num = c.openChangeRequest("foo", "master", MockChangeRequestFlags.FORK); + String rev = c.getRevision("foo", "master"); c.createTag("foo", "master", "v1.0"); BasicMultiBranchProject prj = r.jenkins.createProject(BasicMultiBranchProject.class, "foo"); prj.setCriteria(null); @@ -105,19 +106,25 @@ public void buildEnvironmentFor() throws Exception { FreeStyleProject cr2 = prj.getItem("CR-" + cr2Num); FreeStyleProject tag = prj.getItem("v1.0"); assertThat("We now have the master branch", master, notNullValue()); + assertThat("We now have the revision", rev, notNullValue()); assertThat("We now have the origin CR branch", cr1, notNullValue()); assertThat("We now have the form CR branch", cr2, notNullValue()); assertThat("We now have the tag branch", tag, notNullValue()); EnvVars env = new EnvVars(); instance.buildEnvironmentFor(master, env, new LogTaskListener(LOGGER, Level.FINE)); - assertThat(env.keySet(), contains(is("BRANCH_NAME"))); + assertThat(env.keySet(), containsInAnyOrder( + is("BRANCH_NAME"), + is("CHANGE_REVISION") + )); assertThat(env.get("BRANCH_NAME"), is("master")); + assertThat(env.get("CHANGE_REVISION"), is(rev)); env = new EnvVars(); instance.buildEnvironmentFor(cr1, env, new LogTaskListener(LOGGER, Level.FINE)); assertThat(env.keySet(), containsInAnyOrder( is("BRANCH_NAME"), is("CHANGE_ID"), + is("CHANGE_REVISION"), is("CHANGE_TARGET"), is("CHANGE_TITLE"), is("CHANGE_URL"), @@ -142,6 +149,7 @@ public void buildEnvironmentFor() throws Exception { is("BRANCH_NAME"), is("CHANGE_ID"), is("CHANGE_TARGET"), + is("CHANGE_REVISION"), is("CHANGE_TITLE"), is("CHANGE_URL"), is("CHANGE_BRANCH"),