Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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