Skip to content

Commit fcff748

Browse files
committed
AGDIGGER-60 - allow to stream artifacts
1 parent 6c2d628 commit fcff748

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

src/main/java/com/redhat/digkins/DiggerClient.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.redhat.digkins;
22

33
import com.offbytwo.jenkins.JenkinsServer;
4+
import com.redhat.digkins.services.ArtifactsService;
45
import com.redhat.digkins.services.CreateJobService;
56
import com.redhat.digkins.services.TriggerBuildService;
67
import com.redhat.digkins.util.DiggerClientException;
@@ -9,6 +10,7 @@
910
import org.slf4j.LoggerFactory;
1011

1112
import java.io.IOException;
13+
import java.io.InputStream;
1214
import java.net.URI;
1315
import java.net.URISyntaxException;
1416

@@ -108,4 +110,16 @@ public long build(String jobName) throws DiggerClientException {
108110
return this.build(jobName, DEFAULT_BUILD_TIMEOUT);
109111
}
110112

113+
/**
114+
* Fetch artifacts urls for specific job and build number
115+
*
116+
* @param jobName name of the job
117+
* @param buildNumber job build number
118+
* @param artifactName - name of the artifact to fetch - can be regexp
119+
* @return InputStream with file contents
120+
*/
121+
public InputStream fetchArtifact(String jobName, long buildNumber, String artifactName) {
122+
ArtifactsService artifactsService = new ArtifactsService(jenkins);
123+
return artifactsService.fetchArtifact(jobName,buildNumber,artifactName);
124+
}
111125
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.redhat.digkins.services;
2+
3+
import com.offbytwo.jenkins.JenkinsServer;
4+
import com.offbytwo.jenkins.model.Artifact;
5+
import com.offbytwo.jenkins.model.Build;
6+
import com.offbytwo.jenkins.model.BuildWithDetails;
7+
import org.jtwig.JtwigModel;
8+
import org.jtwig.JtwigTemplate;
9+
import org.slf4j.Logger;
10+
import org.slf4j.LoggerFactory;
11+
12+
import java.io.IOException;
13+
import java.io.InputStream;
14+
import java.net.URI;
15+
import java.net.URISyntaxException;
16+
import java.util.List;
17+
18+
/**
19+
* Service used to retrieve artifacts
20+
*/
21+
public class ArtifactsService {
22+
23+
private JenkinsServer jenkins;
24+
25+
/**
26+
* @param jenkins jenkins api instance
27+
*/
28+
public ArtifactsService(JenkinsServer jenkins) {
29+
this.jenkins = jenkins;
30+
}
31+
32+
private static final Logger LOG = LoggerFactory.getLogger(ArtifactsService.class);
33+
34+
/**
35+
* Fetch artifacts urls for specific job and build number
36+
*
37+
* @param jobName name of the job
38+
* @param buildNumber job build number
39+
* @param artifactName - name of the artifact to fetch - can be regexp
40+
* @return InputStream with file contents
41+
*/
42+
public InputStream fetchArtifact(String jobName, long buildNumber, String artifactName) {
43+
try {
44+
Build build = jenkins.getBuild(jobName, buildNumber);
45+
if (build instanceof BuildWithDetails) {
46+
BuildWithDetails buildWithDetails = ((BuildWithDetails) build);
47+
List<Artifact> artifacts = buildWithDetails.getArtifacts();
48+
for (Artifact artifact : artifacts) {
49+
if (artifact.getFileName().matches(artifactName)) {
50+
LOG.debug("Streaming artifact {0}", artifactName);
51+
return buildWithDetails.downloadArtifact(artifact);
52+
}
53+
}
54+
55+
}
56+
} catch (Exception e) {
57+
LOG.error("Problem when fetching artifacts for {0} {1} {2}", jobName, buildNumber, artifactName, e);
58+
}
59+
LOG.debug("Cannot find build for ", jobName, buildNumber, artifactName);
60+
return null;
61+
}
62+
63+
}

0 commit comments

Comments
 (0)