提交 4ec7ebf8 编写于 作者: K Kohsuke Kawaguchi

Added the -v option to report the console output of the build in progress.

上级 f037b113
......@@ -67,6 +67,8 @@ Upcoming changes</a>
<li class=rfe>
Reduce the total height of items shown in the view configuration page.
(<a href="https://github.com/jenkinsci/jenkins/pull/488">pull 488</a>)
<li class=rfe>
The CLI <tt>build</tt> command now has the <tt>-v</tt> option that reports the console output of the build in progress.
<li class=rfe>
The CLI <tt>build</tt> command can now wait until the start of the build.
</ul>
......
......@@ -76,6 +76,9 @@ public class BuildCommand extends CLICommand {
@Option(name="-p",usage="Specify the build parameters in the key=value format.")
public Map<String,String> parameters = new HashMap<String, String>();
@Option(name="-v",usage="Prints out the console output of the build. Use with -s")
public boolean consoleOutput = false;
protected int run() throws Exception {
job.checkPermission(Item.BUILD);
......@@ -107,17 +110,19 @@ public class BuildCommand extends CLICommand {
QueueTaskFuture<? extends AbstractBuild> f = job.scheduleBuild2(0, new CLICause(Jenkins.getAuthentication().getName()), a);
if (wait) {
if (wait || sync) {
AbstractBuild b = f.waitForStart(); // wait for the start
stdout.println("Started "+b.getFullDisplayName()+" : "+b.getResult());
return 0;
}
if (sync) {
// TODO: should we abort the build if the CLI is cancelled?
AbstractBuild b = f.get(); // wait for the completion
stdout.println("Completed "+b.getFullDisplayName()+" : "+b.getResult());
return b.getResult().ordinal;
stdout.println("Started "+b.getFullDisplayName());
if (sync) {
if (consoleOutput) {
b.writeWholeLogTo(stdout);
}
// TODO: should we abort the build if the CLI is cancelled?
f.get(); // wait for the completion
stdout.println("Completed "+b.getFullDisplayName()+" : "+b.getResult());
return b.getResult().ordinal;
}
}
return 0;
......
......@@ -1196,6 +1196,21 @@ public abstract class Run <JobT extends Job<JobT,RunT>,RunT extends Run<JobT,Run
}
}
/**
* Writes the complete log from the start to finish to the {@link OutputStream}.
*
* If someone is still writing to the log, this method will not return until the whole log
* file gets written out.
*/
public void writeWholeLogTo(OutputStream out) throws IOException, InterruptedException {
long pos = 0;
AnnotatedLargeText logText;
do {
logText = getLogText();
pos = logText.writeLogTo(pos, out);
} while (!logText.isComplete());
}
/**
* Used to URL-bind {@link AnnotatedLargeText}.
*/
......
......@@ -33,6 +33,7 @@ import hudson.model.BuildListener
import hudson.model.ParametersDefinitionProperty
import hudson.model.StringParameterDefinition
import hudson.model.ParametersAction
import org.apache.commons.io.output.TeeOutputStream
/**
* {@link BuildCommand} test.
......@@ -94,7 +95,20 @@ public class BuildCommandTest extends HudsonTestCase {
assertEquals("foobar",b.getAction(ParametersAction.class).getParameter("key").value)
} finally {
cli.close();
};
}
}
void testConsoleOutput() {
def p = createFreeStyleProject()
def cli = new CLI(getURL())
try {
def o = new ByteArrayOutputStream()
cli.execute(["build","-s","-v",p.name],System.in,new TeeOutputStream(System.out,o),System.err)
assertBuildStatusSuccess(p.getBuildByNumber(1))
assertTrue(o.toString().contains("Started by command line by anonymous"))
assertTrue(o.toString().contains("Finished: SUCCESS"))
} finally {
cli.close()
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册