如何在windows 2008上运行的Jenkins中将git short hash放入变量

如何在windows 2008上运行的Jenkins中将git short hash放入变量,git,jenkins,Git,Jenkins,我试图在一个变量中获取git短散列。我试图将GIT_COMMIT_SHORT变量设置为运行'GIT rev parse--SHORT HEAD',但没有成功。 我需要将此变量传递给ant构建脚本,以便包名包含此短散列 我正在windows 2008服务器上运行Jenkins 谢谢我建议您使用插件从您创建的包含散列的属性文件加载参数 将git命令的结果回显到作业工作区中已形成的key=value文件中,并使用我提到的插件加载它 我用它来满足这些需求,它非常简单 我希望这有帮助 编辑: 如何在win

我试图在一个变量中获取git短散列。我试图将GIT_COMMIT_SHORT变量设置为运行'GIT rev parse--SHORT HEAD',但没有成功。 我需要将此变量传递给ant构建脚本,以便包名包含此短散列

我正在windows 2008服务器上运行Jenkins

谢谢

我建议您使用插件从您创建的包含散列的属性文件加载参数

git
命令的结果回显到作业工作区中已形成的
key=value
文件中,并使用我提到的插件加载它

我用它来满足这些需求,它非常简单

我希望这有帮助

编辑: 如何在windows中写入属性文件:

@for/f“delims=“%l in('git命令')do@echo hash=%l>>hash.properties


然后,您可以使用插件加载hash.properties。

实现所需结果的最简单方法可能是使用GIT_修订标记makro,如下所示:

${GIT_REVISION,length=6}
请查看以了解更多详细信息

希望这有帮助,

Jan

在没有任何附加插件的情况下,您可以使用Jenkins脚本中的以下命令(“执行Windows批处理命令”构建步骤)获得提交:

在命令行中,您应该使用单个
%
而不是
%

for /f %%i in ('git rev-parse HEAD') do set GITHASH=%%i

在使用git插件的jenkins 2.73上,此占位符模板有效

${GIT_REVISION:0:7}
我将它与传递管道插件一起使用来设置任务名称


例如,建筑GIT版本<代码>${GIT_REVISION:0:7}

不确定它是否适用,但我正在寻找一种在jenkins管道中实现这一点的方法。我最终使用了这个
${GIT_REVISION[0..7]}

蓝色海洋管道的另一个可能选项:

pipeline { 
    ...
    environment {
        GIT_COMMIT_SHORT = sh(
                script: "printf \$(git rev-parse --short ${GIT_COMMIT})",
                returnStdout: true
        )
    }
    ...

这在jenkins管道中使用git插件对我有效:

SHORT_COMMIT = "${GIT_COMMIT[0..7]}"
只有这个对我有用

GIT_SHA_SHORT=`GIT rev parse--SHORT=8${GIT_COMMIT}`

我没有看到这里列出的答案,所以我想添加它:

environment {
  GIT_HASH = GIT_COMMIT.take(7)
}

来源:

我在jenkins主配置中设置了环境变量。感谢Eldad的快速回复。据我所知,您建议创建一个具有短哈希的属性文件,并通过EnvInject插件上载,以便在构建期间在环境中进行设置,如果是这种情况,如何在windows上动态创建此文件?在git fetch运行之前,EnvInject设置变量,因此无法设置正确的短哈希。您可以使用Windows批处理命令将此作为生成步骤运行。关于执行时间,您还可以添加一个注入环境变量build step,该步骤在SCM命令之后运行。它在('git.exe rev parse--short HEAD')DO set COMVER=%i 1>${WORKSPACE}\daddress\buildver.properties>set COMVER=8e18a5c 1>${WORKSPACE}中为/F%i提供此错误>\daddress\buildver.properties系统找不到指定的路径1。将此命令放入Jenkins(或批处理文件)时,变量需要双%符号。2.在windows中,将工作区称为%workspace%。这只适用于使用TokenMacro的字段,这排除了AFAIK的生成步骤。@MattiasBengtsson您是对的,但这取决于生成步骤。它不适用于shell脚本步骤,但应该适用于maven脚本步骤,如果我没记错的话,这在声明性管道模式下非常有效:管道{environment{SHORT_COMMIT=“${GIT_COMMIT[0..7]}}这可能是非唯一的。git rev parse生成一个长度刚好足够唯一的哈希。谢谢。这可以在不安装任何插件的情况下工作。
  return sh(
            script: "printf \$(git rev-parse --short ${env.GIT_COMMIT})",
            returnStdout: true
        ).trim()
        }

        pipeline {
            agent any
            environment {
                SHORT_COMMIT = git_short_commit()

            }
            stages {
                stage('Build') {
                    steps {
                        echo "${SHORT_COMMIT}"
                   }
            }
        }
    }
environment {
  GIT_HASH = GIT_COMMIT.take(7)
}