Skip to content

Commit

Permalink
JENKINS-57182 Ensure that sites are not added twice through JCASC plu…
Browse files Browse the repository at this point in the history
…gin (jenkinsci#88)

* JENKINS-57182 ensure that sites are not added twice through JCASC plugin

* JENKINS-57182 change Config class by JiraStepsConfig to not confuse on JCASC

* JENKINS-57182 update changelog and version to 1.5.0

* JENKINS-57182 add maven-hpi-plugin, untrack not necessary file and display unreleased version
  • Loading branch information
daper authored and nrayapati committed Aug 31, 2019
1 parent 6cd86d5 commit e57acb5
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 25 deletions.
8 changes: 5 additions & 3 deletions hugo/content/changelog.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
+++
title = "Change Log"
description = "Change Log."
date = "2017-11-12"
lastmodifierdisplayname = "Benedikt Hr"
date = "2019-06-23"
lastmodifierdisplayname = "daper"
+++

* #### **1.4.6** (Unreleased)
* #### **1.5.0** (Unreleased)
* [JENKINS-57182](https://issues.jenkins-ci.org/browse/JENKINS-57182) When configuring a Jira steps site in casc yaml file. If the Jenkins service is restarted, the site is duplicated in Jenkins config.
* <span style="color:red">Breaking changes: the java class *Config* has been renamed to *JiraStepsConfig*. Review the documentation to adapt your scripts.</span>

* #### **1.4.5**
* [JENKINS-49394](https://issues.jenkins-ci.org/browse/JENKINS-49394) Make add/edit comment step more generic to set a visibility.
Expand Down
34 changes: 34 additions & 0 deletions hugo/content/getting-started/config/casc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
+++
title = "Configuration as Code Plugin"
description = "Adding sites through Configuration as Code plugin"
tags = ["Setup", "Get Started", "casc"]
weight = 4
date = "2019-06-05"
lastmodifierdisplayname = "daper"
+++

## Automate configuring via Configuration as Code Plugin

The following snippet will automatically configure the global settings of this plugin.

```yaml
unclassified:
jiraStepsConfig:
sites:
- name: 'another'
url: 'http://example.com'
timeout: 10000
readTimeout: 10000
loginType: 'BASIC'
userName: 'foo'
password: 'some pass'
- name: 'moar jira'
url: 'http://example.com'
timeout: 10000
readTimeout: 10000
loginType: 'OAUTH'
consumerKey: 'my consumer key'
privateKey: 'my private key'
secret: 'super secret'
token: 'my token'
```
18 changes: 10 additions & 8 deletions hugo/content/getting-started/config/script.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ The following [Jenkins Script Console script](https://wiki.jenkins.io/display/JE
```groovy
import net.sf.json.JSONArray
import net.sf.json.JSONObject
import org.thoughtslive.jenkins.plugins.jira.Config
import org.thoughtslive.jenkins.plugins.jira.JiraStepsConfig
import org.thoughtslive.jenkins.plugins.jira.Site
//global user-defined configuration
JSONArray sites = [
JSONArray sitesConf = [
[
name: 'another',
url: 'http://example.com',
Expand All @@ -42,13 +42,12 @@ JSONArray sites = [
] as JSONArray
//get global Jenkins configuration
Config.ConfigDescriptorImpl config = Jenkins.instance.getExtensionList(Config.ConfigDescriptorImpl.class)[0]
JiraStepsConfig.ConfigDescriptorImpl config = Jenkins.instance.getExtensionList(JiraStepsConfig.ConfigDescriptorImpl.class)[0]
//delete all existing sites
config.@sites.clear()
ArrayList<Site> sites = new ArrayList<Site>()
//configure new sites from the above JSONArray
sites.each { s ->
sitesConf.each { s ->
String loginType = s.optString('loginType', '').toUpperCase()
if(loginType in ['BASIC', 'OAUTH']) {
Site site = new Site(s.optString('name',''), new URL(s.optString('url', '')), s.optString('loginType', ''), s.optInt('timeout', 10000))
Expand All @@ -63,11 +62,14 @@ sites.each { s ->
site.setToken(s.optString('token', ''))
site.setReadTimeout(s.optInt('readTimeout', 10000))
}
//setSites does not make sense as a name because you can only set one site instead of a list :-/
config.setSites(site)
sites.add(site)
}
}
//set our defined sites
config.setSites(sites.toArray(new Site[0]))
//persist configuration to disk as XML
config.save()
```
9 changes: 8 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<version>2.21</version>
</parent>
<artifactId>jira-steps</artifactId>
<version>1.4.6-SNAPSHOT</version>
<version>1.5.0</version>
<packaging>hpi</packaging>
<name>JIRA Pipeline Steps</name>
<description>JIRA Pipeline Steps</description>
Expand Down Expand Up @@ -212,6 +212,13 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jenkins-ci.tools</groupId>
<artifactId>maven-hpi-plugin</artifactId>
<configuration>
<compatibleSinceVersion>1.5.0</compatibleSinceVersion>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@
* @author Naresh Rayapati
*/
@SuppressFBWarnings
public class Config extends AbstractDescribableImpl<Config> {
public class JiraStepsConfig extends AbstractDescribableImpl<JiraStepsConfig> {

@Extension
public static final ConfigDescriptorImpl DESCRIPTOR = new ConfigDescriptorImpl();
public final String siteName;

@DataBoundConstructor
public Config(String siteName) {
public JiraStepsConfig(String siteName) {
if (siteName == null) {
Site[] sites = DESCRIPTOR.getSites();
if (sites.length > 0) {
Expand Down Expand Up @@ -60,34 +60,34 @@ public ConfigDescriptorImpl getDescriptor() {
return DESCRIPTOR;
}

public static final class ConfigDescriptorImpl extends Descriptor<Config>
public static final class ConfigDescriptorImpl extends Descriptor<JiraStepsConfig>
implements Serializable {

private static final long serialVersionUID = 6174559183832237318L;
private final CopyOnWriteList<Site> sites = new CopyOnWriteList<Site>();

public ConfigDescriptorImpl() {
super(Config.class);
super(JiraStepsConfig.class);
load();
}

@Override
public String getDisplayName() {
return "JIRA Steps: Config";
return "JIRA Steps: JiraStepsConfig";
}

public Site[] getSites() {
return sites.toArray(new Site[0]);
}

public void setSites(Site site) {
sites.add(site);
public void setSites(Site[] newSites) {
sites.replaceBy(newSites);
}

@Override
public Config newInstance(@Nonnull final StaplerRequest req, final JSONObject formData)
public JiraStepsConfig newInstance(@Nonnull final StaplerRequest req, final JSONObject formData)
throws FormException {
Config jiraConfig = req.bindJSON(Config.class, formData);
JiraStepsConfig jiraConfig = req.bindJSON(JiraStepsConfig.class, formData);
if (jiraConfig.siteName == null) {
jiraConfig = null;
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/org/thoughtslive/jenkins/plugins/jira/Site.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public Site(final String name, final URL url, final String loginType, final int
}

public static Site get(final String siteName) {
Site[] sites = Config.DESCRIPTOR.getSites();
Site[] sites = JiraStepsConfig.DESCRIPTOR.getSites();
for (Site site : sites) {
if (site.getName().equalsIgnoreCase(siteName)) {
return site;
Expand Down Expand Up @@ -120,7 +120,7 @@ public String getDisplayName() {

/**
* Checks if the details required for the basic login is valid. TODO: This validation can be
* moved to Config so that we can also verify the name is valid.
* moved to JiraStepsConfig so that we can also verify the name is valid.
*/
public FormValidation doValidateBasic(@QueryParameter String name, @QueryParameter String url,
@QueryParameter String loginType, @QueryParameter String timeout,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import hudson.util.ListBoxModel;
import java.util.Set;
import org.jenkinsci.plugins.workflow.steps.StepDescriptor;
import org.thoughtslive.jenkins.plugins.jira.Config;
import org.thoughtslive.jenkins.plugins.jira.JiraStepsConfig;
import org.thoughtslive.jenkins.plugins.jira.Site;

/**
Expand All @@ -25,7 +25,7 @@ public abstract class JiraStepDescriptorImpl extends StepDescriptor {
public ListBoxModel doFillSiteItems() {
ListBoxModel list = new ListBoxModel();
list.add("Please select", "");
for (Site site : Config.DESCRIPTOR.getSites()) {
for (Site site : JiraStepsConfig.DESCRIPTOR.getSites()) {
list.add(site.getName());
}
return list;
Expand Down

0 comments on commit e57acb5

Please sign in to comment.