通过 Mercurial 插件更新后,Jenkins 将不会继续管道

Jenkins will not continue pipeline after updating via Mercurial plugin

我正在尝试使用 Jenkins 设置一个 CI 进程,源代码保存在 Mercurial 中,所以我安装了 Jenkins Mercurial 插件。

这是一个简单的管道脚本,它每 10 分钟轮询一次我的存储库。使用下面的 checkout 命令并在我的工作中点击 Build Now 它成功地克隆了我的存储库并按预期继续管道。它还成功地设置了轮询,我可以从轮询日志中看到它每 10 分钟检查一次存储库的更改。

checkout changelog: true, poll: true, scm: [$class: 'MercurialSCM', credentialsId: 'xxx', installation: 'TortoiseHg', source: 'C:\Path\to\repo']

然而,当我推送到我的存储库时,Jenkins 在接下来的 运行 作业中发现了这些更改,将它们拉下来,然后返回报告 'No changes',因此作业停止。我预计此时工作会继续,因为有变化。当然,如果没有任何变化,我希望它会在此时停止工作。

Mercurial 轮询日志 显示更改已被拉取,但 hg update 尚未 运行。通过查看 Tortoise Workbench 中 Jenkins 创建的存储库可以确认这一点。然而,即使在 Jenkins 的 Mercurial 配置中放置一个挂钩,使其在拉取后进行更新也不能解决问题。 Jenkins 在结帐步骤后仍然报告 'No changes'。

因此,在初始构建工作正常之后,Jenkins 再也没有 运行 完成这项工作。它总是在 checkout 步骤之后退出,因为尽管取消了它报告的任何更改,但仍有 none.

我已经检查了权限,一切似乎都很好,它完全 运行 按需并且随后可以拉动的事实也表明管道或其他地方没有任何问题。

如有任何关于如何在 checkout 阶段后继续工作的建议,我们将不胜感激。

下面是一个示例管道脚本:

pipeline {
    agent any

    triggers {
        pollSCM '*/10 * * * *'
    }

    stages {
        stage('Checkout') {
            steps {
                checkout changelog: true, poll: true, scm: [$class: 'MercurialSCM', credentialsId: 'xxx', installation: 'TortoiseHg', source: 'C:\Path\to\repo']
            }
        }
        stage('Build') {
            steps {
                echo Continuing with build...
            }
        }
    }

UPDATE 我注意到,如果我在投票结束后手动构建但未更新本地存储库,则作业会更新存储库和构建继续正常进行。

您似乎没有在 scm 结帐时指定分支。您是否使用 HG 中的默认分支?

This Jenlins issue and the source code 表明,如果您不使用 deault 分支,即使有引用,您也可能看不到您的更改被拉下。

如果您正在尝试构建非默认分支,请尝试一下

checkout changelog: true, poll: true, scm: [$class: 'MercurialSCM',  branches: [[name: '*/yourbranch']],  credentialsId: 'xxx', installation: 'TortoiseHg', source: 'C:\Path\to\repo']