Jenkins 使用管道和 groovy 将存储库中的更改发布到 github

Jenkins publish changes in repository to github using pipeline and groovy

我有一个 jenkins 组织管道作业,它在所有定义了 "Jenkinsfile" 的存储库上执行。该作业从 github 克隆存储库,然后运行 ​​powershell 脚本以增加文件中的版本号。我现在正尝试将更新后的文件发布回 github 上的原始存储库,因此当开发人员提取更改时,他会获得最新版本号。

我尝试按照 jenkins JIRA (https://issues.jenkins-ci.org/browse/JENKINS-28335) 中的建议使用脚本(在 "jenkinsfile" 内),但无济于事。任何建议将不胜感激。基本上需要使用为作业定义的相同参数执行 "git commit" 和 "git push"。

仅供参考,这是以前用于自由样式(不是管道作业)的解决方案:How to push changes to github after jenkins build completes?

实际上找到了几个解决方案,首先我像这样修改了 Jenkins 的脚本(一些对象在工作流管道中发生了变化):

import hudson.FilePath
import org.eclipse.jgit.transport.URIish

node {
    env.WORKSPACE = pwd()
    stage 'Checkout'
        checkout scm

        def build = manager.build
        def listener = manager.listener
        def workspace = new FilePath(new File(env.WORKSPACE))
        def environment = build.getEnvironment(listener)
        final def project = build.getParent()
        final def gitScm = project.getTypicalSCM()
        final def gitClient = gitScm.createClient(listener, environment, build, workspace);

        final def gitTagName = "TAG_NAME"
        final def comment = "COMMENT"
        final def remoteURI = new URIish("origin")

        gitClient.tag(gitTagName, comment)
        gitClient.push().tags(true).to(remoteURI).execute()
}

您需要多次运行脚本,然后允许在jenkins中执行代码(管理jenkins->进程中的脚本批准)。

另一个更简单的解决方案(现在使用这个):

bat "\"${tool 'Git'}\" config user.email \"ci@virtocommerce.com\""
bat "\"${tool 'Git'}\" config user.name \"Virto Jenkins\""
bat "\"${tool 'Git'}\" commit -am \"Updated version number\""
bat "\"${tool 'Git'}\" push origin HEAD:master -f"

您必须在 Jenkins 中配置名称为 "Git" 的 Git 工具。