Remove job-dsl from support plugin (#861)

Moved to job-dsl as of 1.73
This commit is contained in:
Joseph Petersen 2019-04-29 23:54:02 +02:00 committed by GitHub
parent 8058906971
commit c0d12350b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 1 additions and 271 deletions

View File

@ -221,7 +221,7 @@
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>job-dsl</artifactId>
<version>1.72</version>
<version>1.73</version>
<optional>true</optional>
<exclusions>
<exclusion>

View File

@ -38,19 +38,6 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>job-dsl</artifactId>
<version>1.66</version>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>role-strategy</artifactId>

View File

@ -1,29 +0,0 @@
package io.jenkins.plugins.casc.support.jobdsl;
import io.jenkins.plugins.casc.Configurable;
import io.jenkins.plugins.casc.ConfiguratorException;
import io.jenkins.plugins.casc.model.CNode;
/**
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
public abstract class ConfigurableScriptSource extends ScriptSource implements Configurable {
@Override
public void configure(CNode node) throws ConfiguratorException {
configure(node.asScalar().getValue());
}
protected abstract void configure(String value);
@Override
public void check(CNode node) throws ConfiguratorException {
node.asScalar();
}
@Override
public CNode describe() throws Exception {
return null; // Not relevant here
}
}

View File

@ -1,33 +0,0 @@
package io.jenkins.plugins.casc.support.jobdsl;
import hudson.Extension;
import hudson.model.Descriptor;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
import org.jenkinsci.Symbol;
/**
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
public class FromFileScriptSource extends ConfigurableScriptSource {
public String path;
@Override
public void configure(String path) {
this.path = path;
}
@Override
public String getScript() throws IOException {
return FileUtils.readFileToString(new File(path), StandardCharsets.UTF_8);
}
@Extension
@Symbol("file")
public static class DescriptorImpl extends Descriptor<ScriptSource> {
}
}

View File

@ -1,33 +0,0 @@
package io.jenkins.plugins.casc.support.jobdsl;
import hudson.Extension;
import hudson.model.Descriptor;
import io.jenkins.plugins.casc.Configurable;
import java.io.IOException;
import java.net.URI;
import org.apache.commons.io.IOUtils;
import org.jenkinsci.Symbol;
/**
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
public class FromUrlScriptSource extends ConfigurableScriptSource implements Configurable {
public String url;
@Override
public void configure(String url) {
this.url = url;
}
@Override
public String getScript() throws IOException {
return IOUtils.toString(URI.create(url));
}
@Extension
@Symbol("url")
public static class DescriptorImpl extends Descriptor<ScriptSource> {
}
}

View File

@ -1,31 +0,0 @@
package io.jenkins.plugins.casc.support.jobdsl;
import hudson.Extension;
import hudson.model.Descriptor;
import io.jenkins.plugins.casc.Configurable;
import java.io.IOException;
import org.jenkinsci.Symbol;
/**
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
public class InlineGroovyScriptSource extends ConfigurableScriptSource implements Configurable {
public String script;
@Override
public void configure(String script) {
this.script = script;
}
@Override
public String getScript() throws IOException {
return script;
}
@Extension
@Symbol("script")
public static class DescriptorImpl extends Descriptor<ScriptSource> {
}
}

View File

@ -1,13 +0,0 @@
package io.jenkins.plugins.casc.support.jobdsl;
import hudson.ExtensionPoint;
import hudson.model.AbstractDescribableImpl;
import java.io.IOException;
/**
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
public abstract class ScriptSource extends AbstractDescribableImpl<ScriptSource> implements ExtensionPoint {
public abstract String getScript() throws IOException;
}

View File

@ -1,118 +0,0 @@
package io.jenkins.plugins.casc.support.jobdsl;
import edu.umd.cs.findbugs.annotations.CheckForNull;
import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.Extension;
import io.jenkins.plugins.casc.Attribute;
import io.jenkins.plugins.casc.ConfigurationContext;
import io.jenkins.plugins.casc.Configurator;
import io.jenkins.plugins.casc.ConfiguratorException;
import io.jenkins.plugins.casc.RootElementConfigurator;
import io.jenkins.plugins.casc.SecretSourceResolver;
import io.jenkins.plugins.casc.impl.attributes.MultivaluedAttribute;
import io.jenkins.plugins.casc.model.CNode;
import io.jenkins.plugins.casc.model.Mapping;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javaposse.jobdsl.dsl.GeneratedItems;
import javaposse.jobdsl.plugin.JenkinsDslScriptLoader;
import javaposse.jobdsl.plugin.JenkinsJobManagement;
import javaposse.jobdsl.plugin.LookupStrategy;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
import static io.vavr.API.Try;
import static io.vavr.API.unchecked;
// TODO: Move outside the plugin?
/**
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
@Extension(optional = true, ordinal = -100) // Ordinal -100 Ensure it is loaded after GlobalJobDslSecurityConfiguration
@Restricted(NoExternalUse.class)
public class SeedJobConfigurator implements RootElementConfigurator<GeneratedItems[]> {
@NonNull
@Override
public String getName() {
return "jobs";
}
@Override
@SuppressWarnings("unchecked")
public Class getTarget() {
return GeneratedItems[].class;
}
@NonNull
@Override
@SuppressWarnings("unchecked")
public Set<Attribute<GeneratedItems[], ?>> describe() {
return Collections.singleton(new MultivaluedAttribute("", ScriptSource.class));
}
@Override
public GeneratedItems[] getTargetComponent(ConfigurationContext context) {
return new GeneratedItems[0]; // Doesn't really make sense
}
@NonNull
@Override
@SuppressWarnings("unchecked")
public GeneratedItems[] configure(CNode config, ConfigurationContext context) throws ConfiguratorException {
JenkinsJobManagement management = new JenkinsJobManagement(System.out, System.getenv(), null, null, LookupStrategy.JENKINS_ROOT);
Configurator<ScriptSource> configurator = context.lookupOrFail(ScriptSource.class);
return config.asSequence().stream()
.map(source -> getActualValue(source, context))
.map(source -> getScriptFromSource(source, context, configurator))
.map(script -> generateFromScript(script, management))
.toArray(GeneratedItems[]::new);
}
@Override
public GeneratedItems[] check(CNode config, ConfigurationContext context) throws ConfiguratorException {
// Any way to dry-run a job-dsl script ?
return new GeneratedItems[0];
}
@NonNull
@Override
public List<Configurator<GeneratedItems[]>> getConfigurators(ConfigurationContext context) {
return Collections.singletonList(context.lookup(ScriptSource.class));
}
@CheckForNull
@Override
public CNode describe(GeneratedItems[] instance, ConfigurationContext context) throws Exception {
return null;
}
private CNode getActualValue(CNode config, ConfigurationContext context) {
return unchecked(() -> config.asMapping().entrySet().stream().findFirst()).apply()
.map(entry -> {
Mapping mapping = new Mapping();
mapping.put(entry.getKey(), revealSourceOrGetValue(entry, context));
return (CNode) mapping;
}).orElse(config);
}
private String revealSourceOrGetValue(Map.Entry<String, CNode> entry, ConfigurationContext context) {
String value = unchecked(() -> entry.getValue().asScalar().getValue()).apply();
return SecretSourceResolver.resolve(context, value);
}
private GeneratedItems generateFromScript(String script, JenkinsJobManagement management) {
return unchecked(() ->
Try(() -> new JenkinsDslScriptLoader(management).runScript(script))
.getOrElseThrow(t -> new ConfiguratorException(this, "Failed to execute script with hash " + script.hashCode(), t))).apply();
}
private String getScriptFromSource(CNode source, ConfigurationContext context, Configurator<ScriptSource> configurator) {
return unchecked(() ->
Try(() -> configurator.configure(source, context))
.getOrElseThrow(t -> new ConfiguratorException(this, "Failed to retrieve job-dsl script", t))
.getScript()).apply();
}
}