Skip to content

Commit

Permalink
[JENKINS-10502] Option to make the build NOT fail if there is nothing…
Browse files Browse the repository at this point in the history
… to archive
  • Loading branch information
pjrt committed Mar 10, 2013
1 parent 70f81b5 commit d309681
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 9 deletions.
15 changes: 11 additions & 4 deletions core/src/main/java/hudson/tasks/ArtifactArchiver.java
Expand Up @@ -63,15 +63,18 @@ public class ArtifactArchiver extends Recorder {
* Just keep the last successful artifact set, no more.
*/
private final boolean latestOnly;

private static final Boolean allowEmptyArchive =
Boolean.getBoolean(ArtifactArchiver.class.getName()+".warnOnEmpty");

/**
* Fail (or not) the build if archiving returns nothing.
*/
private final boolean allowEmptyArchive;

@DataBoundConstructor
public ArtifactArchiver(String artifacts, String excludes, boolean latestOnly) {
public ArtifactArchiver(String artifacts, String excludes, boolean latestOnly, boolean allowEmptyArchive) {
this.artifacts = artifacts.trim();
this.excludes = Util.fixEmptyAndTrim(excludes);
this.latestOnly = latestOnly;
this.allowEmptyArchive = allowEmptyArchive;
}

public String getArtifacts() {
Expand All @@ -85,6 +88,10 @@ public String getExcludes() {
public boolean isLatestOnly() {
return latestOnly;
}

public boolean getAllowEmptyArchive() {
return allowEmptyArchive;
}

private void listenerWarnOrError(BuildListener listener, String message) {
if (allowEmptyArchive) {
Expand Down
Expand Up @@ -34,5 +34,8 @@ THE SOFTWARE.
<f:entry title="" field="latestOnly" >
<f:checkbox title="${%lastBuildOnly}"/>
</f:entry>
<f:entry title="" field="allowEmptyArchive" >
<f:checkbox title="${%allowEmptyArchive}"/>
</f:entry>
</f:advanced>
</j:jelly>
Expand Up @@ -21,3 +21,4 @@
# THE SOFTWARE.

lastBuildOnly=Discard all but the last successful/stable artifact to save disk space
allowEmptyArchive=Do not fail build if archiving returns nothing
2 changes: 1 addition & 1 deletion test/src/test/java/hudson/model/AbstractProjectTest.java
Expand Up @@ -280,7 +280,7 @@ public void testSymlinkForPostBuildFailure() throws Exception {
assertSymlinkForBuild(lastSuccessful, 1);
assertSymlinkForBuild(lastStable, 1);
// Archive artifacts that don't exist to create failure in post-build action
job.getPublishersList().add(new ArtifactArchiver("*.foo", "", false));
job.getPublishersList().add(new ArtifactArchiver("*.foo", "", false, false));
build = job.scheduleBuild2(0, new Cause.UserCause()).get();
assertEquals(Result.FAILURE, build.getResult());
// Links should not be updated since build failed
Expand Down
6 changes: 3 additions & 3 deletions test/src/test/java/hudson/tasks/ArtifactArchiverTest.java
Expand Up @@ -48,7 +48,7 @@ public class ArtifactArchiverTest extends HudsonTestCase {

public void testSuccessVsFailure() throws Exception {
FreeStyleProject project = createFreeStyleProject();
project.getPublishersList().replaceBy(Collections.singleton(new ArtifactArchiver("f", "", true)));
project.getPublishersList().replaceBy(Collections.singleton(new ArtifactArchiver("f", "", true, false)));
assertEquals("(no artifacts)", Result.FAILURE, build(project)); // #1
assertFalse(project.getBuildByNumber(1).getHasArtifacts());
project.getBuildersList().replaceBy(Collections.singleton(new CreateArtifact()));
Expand Down Expand Up @@ -86,7 +86,7 @@ public void testSuccessVsFailure() throws Exception {
@Bug(2417)
public void testStableVsUnstable() throws Exception {
FreeStyleProject project = createFreeStyleProject();
Publisher artifactArchiver = new ArtifactArchiver("f", "", true);
Publisher artifactArchiver = new ArtifactArchiver("f", "", true, false);
project.getPublishersList().replaceBy(Collections.singleton(artifactArchiver));
project.getBuildersList().replaceBy(Collections.singleton(new CreateArtifact()));
assertEquals(Result.SUCCESS, build(project)); // #1
Expand Down Expand Up @@ -123,7 +123,7 @@ public void testStableVsUnstable() throws Exception {
@Bug(3227)
public void testEmptyDirectories() throws Exception {
FreeStyleProject project = createFreeStyleProject();
Publisher artifactArchiver = new ArtifactArchiver("dir/", "", false);
Publisher artifactArchiver = new ArtifactArchiver("dir/", "", false, false);
project.getPublishersList().replaceBy(Collections.singleton(artifactArchiver));
project.getBuildersList().replaceBy(Collections.singleton(new TestBuilder() {
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException {
Expand Down
2 changes: 1 addition & 1 deletion test/src/test/java/hudson/tasks/LogRotatorTest.java
Expand Up @@ -79,7 +79,7 @@ public void testStableVsUnstable() throws Exception {
public void testArtifactDelete() throws Exception {
FreeStyleProject project = createFreeStyleProject();
project.setLogRotator(new LogRotator(-1, 6, -1, 2));
project.getPublishersList().replaceBy(Collections.singleton(new ArtifactArchiver("f", "", true)));
project.getPublishersList().replaceBy(Collections.singleton(new ArtifactArchiver("f", "", true, false)));
assertEquals("(no artifacts)", Result.FAILURE, build(project)); // #1
assertFalse(project.getBuildByNumber(1).getHasArtifacts());
project.getBuildersList().replaceBy(Collections.singleton(new CreateArtifact()));
Expand Down

0 comments on commit d309681

Please sign in to comment.