Jenkins Workflow插件中的Git变量

Old*_*dek 39 git groovy jenkins jenkins-pipeline

我想访问的git变量,如GIT_COMMITGIT_BRANCH我已签出从混帐存储库构建流中进一步下跌.目前我找不到可用的变量来访问这两个参数.

node {
    git git+ssh://git.com/myproject.git
    echo "$GIT_COMMIT - $BRANCH_NAME"
}
Run Code Online (Sandbox Code Playgroud)

这些变量是否可用,万一,我会在哪里找到它们.我不介意他们是否可以通过一些常规变量或任何地方,只是我可以访问它们.

也许我缺乏Groovy的调试技巧,这很容易找到,但我只是用我有限的技能找不到它.

mko*_*bit 32

根据您使用的SCM插件,该checkout步骤可能会返回有关修订的其他信息.这在JENKINS-26100中得到了解决.它是在2.6版本的workflow-scm-step插件中发布的.

例如,使用Git插件,您可以执行以下操作:

final scmVars = checkout(scm)
echo "scmVars: ${scmVars}"
echo "scmVars.GIT_COMMIT: ${scmVars.GIT_COMMIT}"
echo "scmVars.GIT_BRANCH: ${scmVars.GIT_BRANCH}"
Run Code Online (Sandbox Code Playgroud)

这取决于您使用的插件,因此原始答案可能更适合您.


原始答案

使用Pipeline节点和进程插件的2.4版本,您可以简单地执行以下操作:

def gitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
Run Code Online (Sandbox Code Playgroud)

  • 并且在`rev-parse`中有一个`--short`标志来获取前7个字符 (4认同)

小智 9

根据您需要的信息,有一个非常简单的解决方案:获得“ checkout scm”操作返回:它提供GIT_BRANCH,GIT_COMMIT,GIT_PREVIOUS_COMMIT,GIT_PREVIOUS_SUCCESSFUL_COMMIT和GIT_URL。

node { 
    stage ("Checkout") {

        scmInfo = checkout scm

        /*...*/
        echo "scm : ${scmInfo}"
        echo "${scmInfo.GIT_COMMIT}"


    }
}
Run Code Online (Sandbox Code Playgroud)

这将输出:

...
[Pipeline] echo
    scm : [GIT_BRANCH:my-branch, GIT_COMMIT:0123456789abcdefabcdef0123456789abcdef01, GIT_PREVIOUS_COMMIT:aaaabbbcccdddeeeefffe0123456789012345678, GIT_PREVIOUS_SUCCESSFUL_COMMIT:aaaabbbcccdddeeeefffe0123456789012345678, GIT_URL:http://my.si.te/my-repository.git]
[Pipeline] echo
    0123456789abcdefabcdef0123456789abcdef01
...
Run Code Online (Sandbox Code Playgroud)

此处有更多详细信息,詹金斯管道SCM步骤


Kev*_*don 8

这是我正在做的,基于Jenkins示例repo中提供的示例:

node {
    git url: 'https://git.com/myproject.git'

    sh 'git rev-parse --abbrev-ref HEAD > GIT_BRANCH'
    git_branch = readFile('GIT_BRANCH').trim()
    echo git_branch

    sh 'git rev-parse HEAD > GIT_COMMIT'
    git_commit = readFile('GIT_COMMIT').trim()
    echo git_commit
}
Run Code Online (Sandbox Code Playgroud)

编辑你可以做更短的通过

git_commit = sh(returnStdout: true, script: "git rev-parse HEAD").trim()
Run Code Online (Sandbox Code Playgroud)

  • 当我做第一个时,我得到GIT_BRANCH = HEAD (4认同)

Old*_*dek 0

我现在解决这个问题的好方法是使用多分支管道,并且最好知道 Bitbucket 和 Github 在 Jenkins 中有插件来设置组织并自动发现新项目。这可以与 env.GIT_BRANCH 一起使用

对于提交 ID,我会建议 @mkobit 上面写的内容。

  • 对“GIT_URL”有什么建议吗?我无法找到解决方法 (2认同)