5

我现在在 Jenkins 中运行了一个构建,我可以在控制台输出中看到的是:

Started by user anonymous
Building in workspace /var/lib/jenkins/workspace/Main
Checkout:Main / /var/lib/jenkins/workspace/Main - hudson.remoting.LocalChannel@820ea4
Using strategy: Default
Cloning the remote Git repository
Cloning repository origin

我知道这可能是因为 Git 进程尚未刷新其输出流;但这令人沮丧,因为如果我git clone终端运行 a ,那么我可以清楚地看到实时更新的百分比,告诉我命令距离完成有多近。

没关系,除了:

  1. 我需要尽快关闭这台机器。
  2. 这个特定的 repo 需要很长时间才能克隆(比如一个多小时)。
  3. 因此,如果克隆达到 90%,我想让它完成。如果它更像是 50%,那么我只想杀死构建并在早上重新开始。

有谁知道是否有可能以某种方式获得我渴望的信息?

4

2 回答 2

2

搜索 clone 并查看它在哪里检查 git 版本以确定它是否通过了 --progress 标志。如果您的构建已经开始,那么您无能为力,但对于将来的参考,这可能会有所帮助。

--progress
       Progress status is reported on the standard error stream by default
       when it is attached to a terminal, unless -q is specified. This
       flag forces progress status even if the standard error stream is
       not directed to a terminal.
于 2012-05-30T12:34:00.823 回答
0

我看到了类似的症状,我发现它是由 Jenkins 的 Git 插件 clone() 方法中的工作区递归删除引起的(参见下面的代码片段)。就我而言,我们有许多共享单个自定义工作区的作业,因此删除调用需要数小时才能完成。删除自定义工作区后,克隆操作成功完成。

https://github.com/jenkinsci/git-plugin/blob/master/src/main/java/hudson/plugins/git/GitAPI.java

final String source = remoteConfig.getURIs().get(0).toPrivateString();

listener.getLogger().println("Cloning repository " + source);
final int[] gitVer = getGitVersion();

try {
    workspace.deleteRecursive();  // This line was taking forever
} catch (Exception e) {
    e.printStackTrace(listener.error("Failed to clean the workspace"));
    throw new GitException("Failed to delete workspace", e);
}

(这应该是对上一个答案的评论,但我还没有代表发表评论。)

于 2012-10-22T14:20:24.477 回答