Skip to content

Commit

Permalink
More clearly separating the S3-specific portions of the plugin from t…
Browse files Browse the repository at this point in the history
…he generic jclouds infrastructure.
  • Loading branch information
jglick committed May 23, 2018
1 parent 3d110fa commit dac6602
Show file tree
Hide file tree
Showing 10 changed files with 40 additions and 21 deletions.
Expand Up @@ -22,7 +22,7 @@
* THE SOFTWARE.
*/

package io.jenkins.plugins.artifact_manager_s3;
package io.jenkins.plugins.artifact_manager_jclouds;

import java.io.IOException;
import java.io.Serializable;
Expand Down
Expand Up @@ -22,11 +22,14 @@
* THE SOFTWARE.
*/

package io.jenkins.plugins.artifact_manager_s3;
package io.jenkins.plugins.artifact_manager_jclouds;

import hudson.model.Descriptor;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.Beta;

/**
* Descriptor type for {@link BlobStoreProvider}.
*/
@Restricted(Beta.class)
public abstract class BlobStoreProviderDescriptor extends Descriptor<BlobStoreProvider> {}
Expand Up @@ -22,7 +22,7 @@
* THE SOFTWARE.
*/

package io.jenkins.plugins.artifact_manager_s3;
package io.jenkins.plugins.artifact_manager_jclouds;

import java.io.File;
import java.io.IOException;
Expand Down Expand Up @@ -60,15 +60,18 @@
import hudson.slaves.WorkspaceList;
import hudson.util.DirScanner;
import hudson.util.io.ArchiverFactory;
import io.jenkins.plugins.artifact_manager_s3.BlobStoreProvider.HttpMethod;
import io.jenkins.plugins.artifact_manager_jclouds.BlobStoreProvider.HttpMethod;
import jenkins.MasterToSlaveFileCallable;
import jenkins.model.ArtifactManager;
import jenkins.util.VirtualFile;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;

/**
* Artifact manager that stores files in a JClouds BlobStore using any of JClouds supported backends
*/
final class JCloudsArtifactManager extends ArtifactManager implements StashManager.StashAwareArtifactManager {
@Restricted(NoExternalUse.class)
public final class JCloudsArtifactManager extends ArtifactManager implements StashManager.StashAwareArtifactManager {

private static final Logger LOGGER = Logger.getLogger(JCloudsArtifactManager.class.getName());

Expand All @@ -93,12 +96,12 @@ public void onLoad(Run<?, ?> build) {
this.key = String.format("%s/%s", build.getParent().getFullName(), build.getNumber());
}

private String getBlobPath(String s3path) {
return getBlobPath(key, s3path);
private String getBlobPath(String path) {
return getBlobPath(key, path);
}

private String getBlobPath(String key, String s3path) {
return String.format("%s%s/%s", provider.getPrefix(), key, s3path);
private String getBlobPath(String key, String path) {
return String.format("%s%s/%s", provider.getPrefix(), key, path);
}

/*
Expand All @@ -113,8 +116,8 @@ public void archive(FilePath workspace, Launcher launcher, BuildListener listene

// Map artifacts to urls for upload
for (Map.Entry<String, String> entry : artifacts.entrySet()) {
String s3path = "artifacts/" + entry.getKey();
String blobPath = getBlobPath(s3path);
String path = "artifacts/" + entry.getKey();
String blobPath = getBlobPath(path);
Blob blob = blobStore.blobBuilder(blobPath).build();
blob.getMetadata().setContainer(provider.getContainer());
artifactUrls.put(entry.getValue(), provider.toExternalURL(blob, HttpMethod.PUT));
Expand All @@ -132,7 +135,7 @@ public boolean delete() throws IOException, InterruptedException {
/**
* Delete all blobs starting with prefix
*/
static boolean delete(BlobStoreProvider provider, BlobStore blobStore, String prefix) throws IOException, InterruptedException {
public static boolean delete(BlobStoreProvider provider, BlobStore blobStore, String prefix) throws IOException, InterruptedException {
Iterator<StorageMetadata> it = new JCloudsVirtualFile.PageSetIterable(blobStore, provider.getContainer(), ListContainerOptions.Builder.prefix(prefix).recursive());
boolean found = false;
while (it.hasNext()) {
Expand Down
Expand Up @@ -22,18 +22,21 @@
* THE SOFTWARE.
*/

package io.jenkins.plugins.artifact_manager_s3;
package io.jenkins.plugins.artifact_manager_jclouds;

import hudson.Extension;
import hudson.model.Run;
import jenkins.model.ArtifactManager;
import jenkins.model.ArtifactManagerFactory;
import jenkins.model.ArtifactManagerFactoryDescriptor;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
import org.kohsuke.stapler.DataBoundConstructor;

/**
* Factory for {@link ArtifactManager}
*/
@Restricted(NoExternalUse.class)
public class JCloudsArtifactManagerFactory extends ArtifactManagerFactory {

private final BlobStoreProvider provider;
Expand Down
Expand Up @@ -22,12 +22,12 @@
* THE SOFTWARE.
*/

package io.jenkins.plugins.artifact_manager_s3;
package io.jenkins.plugins.artifact_manager_jclouds;

import edu.umd.cs.findbugs.annotations.CheckForNull;
import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.remoting.Callable;
import io.jenkins.plugins.artifact_manager_s3.BlobStoreProvider.HttpMethod;
import io.jenkins.plugins.artifact_manager_jclouds.BlobStoreProvider.HttpMethod;

import java.io.FileNotFoundException;
import java.io.IOException;
Expand Down Expand Up @@ -63,7 +63,8 @@
/**
* <a href="https://jclouds.apache.org/start/blobstore/">JClouds BlobStore Guide</a>
*/
class JCloudsVirtualFile extends VirtualFile {
@Restricted(NoExternalUse.class)
public class JCloudsVirtualFile extends VirtualFile {

private static final long serialVersionUID = -5126878907895121335L;

Expand All @@ -80,7 +81,7 @@ class JCloudsVirtualFile extends VirtualFile {
@CheckForNull
private transient BlobStoreContext context;

JCloudsVirtualFile(@NonNull BlobStoreProvider provider, @NonNull String container, @NonNull String key) {
public JCloudsVirtualFile(@NonNull BlobStoreProvider provider, @NonNull String container, @NonNull String key) {
this.provider = provider;
this.container = container;
this.key = key;
Expand Down
Expand Up @@ -24,6 +24,8 @@

package io.jenkins.plugins.artifact_manager_s3;

import io.jenkins.plugins.artifact_manager_jclouds.BlobStoreProvider;
import io.jenkins.plugins.artifact_manager_jclouds.BlobStoreProviderDescriptor;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
Expand Down
Expand Up @@ -24,6 +24,9 @@

package io.jenkins.plugins.artifact_manager_s3;

import io.jenkins.plugins.artifact_manager_jclouds.BlobStoreProviderDescriptor;
import io.jenkins.plugins.artifact_manager_jclouds.BlobStoreProvider;
import io.jenkins.plugins.artifact_manager_jclouds.JCloudsArtifactManagerFactory;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

Expand Down Expand Up @@ -69,14 +72,14 @@
import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.domain.Blob;

public class JCloudsArtifactManagerTest extends JCloudsAbstractTest {
public class JCloudsArtifactManagerTest extends S3AbstractTest {

@ClassRule
public static BuildWatcher buildWatcher = new BuildWatcher();

@BeforeClass
public static void live() {
JCloudsAbstractTest.live();
S3AbstractTest.live();
}

private static DockerImage image;
Expand Down
Expand Up @@ -24,6 +24,7 @@

package io.jenkins.plugins.artifact_manager_s3;

import io.jenkins.plugins.artifact_manager_jclouds.JCloudsVirtualFile;
import static org.hamcrest.Matchers.*;
import static org.jclouds.blobstore.options.ListContainerOptions.Builder.*;
import static org.junit.Assert.*;
Expand Down Expand Up @@ -56,7 +57,7 @@
import jenkins.util.VirtualFile;
import shaded.com.google.common.collect.ImmutableSet;

public class JCloudsVirtualFileTest extends JCloudsAbstractTest {
public class JCloudsVirtualFileTest extends S3AbstractTest {

protected File tmpFile;
protected String filePath, missingFilePath, weirdCharactersPath;
Expand Down
Expand Up @@ -24,6 +24,9 @@

package io.jenkins.plugins.artifact_manager_s3;

import io.jenkins.plugins.artifact_manager_jclouds.BlobStoreProvider;
import io.jenkins.plugins.artifact_manager_jclouds.JCloudsVirtualFile;
import io.jenkins.plugins.artifact_manager_jclouds.JCloudsArtifactManager;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;

Expand All @@ -44,7 +47,7 @@
import org.junit.rules.TemporaryFolder;
import org.jvnet.hudson.test.LoggerRule;

public abstract class JCloudsAbstractTest {
public abstract class S3AbstractTest {

protected static final Logger LOGGER = Logger.getLogger(JCloudsVirtualFileTest.class.getName());

Expand Down

0 comments on commit dac6602

Please sign in to comment.