From a28e664a3644c5d232d70f4c8db7347ae1d2eab5 Mon Sep 17 00:00:00 2001 From: Juan Olaya Date: Sun, 3 Oct 2021 01:56:28 +0200 Subject: [PATCH] Add JENKINS_UC_DOWNLOAD_URL for custom update center url --- README.md | 9 ++++++--- plugin-management-library/pom.xml | 6 ++++++ .../jenkins/tools/pluginmanager/impl/PluginManager.java | 3 +++ .../tools/pluginmanager/impl/PluginManagerTest.java | 9 +++++++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 81d8f87ca..e64cdbae4 100644 --- a/README.md +++ b/README.md @@ -70,9 +70,12 @@ Jenkins in a broken state. * `CACHE_DIR`: used to configure the directory where the plugins update center cache is located. By default it will be in `~/.cache/jenkins-plugin-management-cli`, if the user doesn't have a home directory when it will go to: `$(pwd)/.cache/jenkins-plugin-management-cli`. -* `JENKINS_UC_DOWNLOAD`: used to configure the URL from where plugins will be downloaded from. Often used to cache or to proxy the Jenkins plugin download site. -If set then all plugins will be downloaded through that URL. - +* `JENKINS_UC_DOWNLOAD`: used to configure the URL from where plugins will be downloaded from. When this value is set, it replaces the plugin download URL found in the `update-center.json` file with `${JENKINS_UC_DOWNLOAD}/plugins`. Often used to cache or to proxy the Jenkins plugin download site. +If set then all plugins will be downloaded through that URL. To use a custom URL, use `JENKINS_UD_DOWNLOAD_URL`. + +* `JENKINS_UC_DOWNLOAD_URL`: used to configure a custom URL from where plugins will be downloaded from. When this value is set, it replaces the plugin download URL found in the `update-center.json` file with `${JENKINS_UC_DOWNLOAD_URL}`. Often used to cache or to proxy the Jenkins plugin download site. +If set then all plugins will be downloaded through that URL. To use a conventional download center url, use `JENKINS_UD_DOWNLOAD`. + * `JENKINS_UC_HASH_FUNCTION`: used to configure the hash function which checks content from UCs. Currently `SHA1` (deprecated), `SHA256` (default), and `SHA512` can be specified. #### Plugin Input Format diff --git a/plugin-management-library/pom.xml b/plugin-management-library/pom.xml index e341692c6..01bad6217 100644 --- a/plugin-management-library/pom.xml +++ b/plugin-management-library/pom.xml @@ -70,6 +70,12 @@ 2.31.0 test + + com.github.stefanbirkner + system-rules + 1.19.0 + test + diff --git a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java index 842d2550c..0dd5065ac 100644 --- a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java +++ b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java @@ -1169,8 +1169,11 @@ public String getPluginDownloadUrl(Plugin plugin) { } String jenkinsUcDownload = System.getenv("JENKINS_UC_DOWNLOAD"); + String jenkinsUcDownloadUrl = System.getenv("JENKINS_UC_DOWNLOAD_URL"); if (StringUtils.isNotEmpty(pluginUrl)) { urlString = pluginUrl; + } else if (StringUtils.isNotEmpty(jenkinsUcDownloadUrl)) { + urlString = appendPathOntoUrl(jenkinsUcDownloadUrl, pluginName, pluginVersion, pluginName + ".hpi"); } else if (StringUtils.isNotEmpty(jenkinsUcDownload)) { urlString = appendPathOntoUrl(jenkinsUcDownload, "/plugins", pluginName, pluginVersion, pluginName + ".hpi"); } else if ((pluginVersion.equals("latest") || plugin.isLatest()) && !StringUtils.isEmpty(jenkinsUcLatest)) { diff --git a/plugin-management-library/src/test/java/io/jenkins/tools/pluginmanager/impl/PluginManagerTest.java b/plugin-management-library/src/test/java/io/jenkins/tools/pluginmanager/impl/PluginManagerTest.java index 875affa04..6fe4485e1 100644 --- a/plugin-management-library/src/test/java/io/jenkins/tools/pluginmanager/impl/PluginManagerTest.java +++ b/plugin-management-library/src/test/java/io/jenkins/tools/pluginmanager/impl/PluginManagerTest.java @@ -20,6 +20,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.contrib.java.lang.system.EnvironmentVariables; import org.junit.rules.TemporaryFolder; import static com.github.stefanbirkner.systemlambda.SystemLambda.tapSystemOutNormalized; @@ -48,6 +49,10 @@ public class PluginManagerTest { @Rule public final TemporaryFolder folder = new TemporaryFolder(); + + @Rule + public final EnvironmentVariables environmentVariables = new EnvironmentVariables(); + @Before public void setUp() { cfg = Config.builder() @@ -1104,6 +1109,10 @@ public void getPluginDownloadUrlTest() { String otherURL = dirName(cfg.getJenkinsUc().toString()) + "download/plugins/pluginName/otherversion/pluginName.hpi"; assertThat(pm.getPluginDownloadUrl(pluginOtherVersion)).isEqualTo(otherURL); + + Plugin pluginUrlOverride = new Plugin("pluginName", "pluginVersion", "https://mirror.server.com/path/pluginName/pluginVersion/pluginName.hpi", null); + environmentVariables.set("JENKINS_UC_DOWNLOAD_URL", "https://server.com/jenkins-plugins"); + assertThat(pm.getPluginDownloadUrl(pluginUrlOverride)).isEqualTo("https://server.com/jenkins-plugins/pluginName/pluginVersion/pluginName.hpi"); } @Test