在Jenkinsfile中隔离存储库分支的名称 [英] Isolate the name of a repository branch in Jenkinsfile

查看:302
本文介绍了在Jenkinsfile中隔离存储库分支的名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

需要对下面的Jenkinsfile进行哪些具体更改,以将提交分支的名称隔离到可以在日志中打印出的变量中?在下面,分支的名称为GWS-43-getissueforcommit.

What specific changes need to be made to the Jenkinsfile below in order to isolate the name of the branch of the commit into a variable that can be printed out in the logs? In the case below, the name of the branch is GWS-43-getissueforcommit.

以下是详细信息:


詹金斯文件:

以下Jenkinsfile在通过运行checkout(scm).GIT_ASKPASS命令产生的输出中打印出分支名称,但是当后续代码行(sh "echo 'The repo Ask Pass is: ${repoAskPass}'")尝试打印封装的内容时,此信息会丢失命令的结果:

The following Jenkinsfile prints out the branch name in the midst of the output produced by running the checkout(scm).GIT_ASKPASS command, but this information is lost when the subsequent line of code ( sh "echo 'The repo Ask Pass is: ${repoAskPass}'" ) tries to print out the encapsulated result of the command:

node {
    // Clean workspace before doing anything
    deleteDir()
    try {
        stage ('Clone') {
            def repoAskPass = checkout(scm).GIT_ASKPASS
            sh "echo 'The repo Ask Pass is: ${repoAskPass}'"
        }
    } catch (err) {
        currentBuild.result = 'FAILED'
        throw err
    }
}


结果日志:

结果日志输出为:

General SCM<1s
    Cloning the remote Git repository
    Cloning with configured refspecs honoured and without tags
    Cloning repository http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git
     > git init /var/jenkins_home/workspace/ne_GWS-43-getissueforcommit-M2X23QGNMETLDZWFK7IXVZQRCNSWYNTDFJZU54VP7DMIOD6Z4DGA # timeout=10
    Fetching upstream changes from http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git
     > git --version # timeout=10
    using GIT_ASKPASS to set credentials Bitbucket server credentials
     > git fetch --no-tags --progress http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git +refs/heads/GWS-43-getissueforcommit:refs/remotes/origin/GWS-43-getissueforcommit
     > git config remote.origin.url http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git # timeout=10
     > git config --add remote.origin.fetch +refs/heads/GWS-43-getissueforcommit:refs/remotes/origin/GWS-43-getissueforcommit # timeout=10
     > git config remote.origin.url http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git # timeout=10
    Cleaning workspace
     > git rev-parse --verify HEAD # timeout=10
    No valid HEAD. Skipping the resetting
     > git clean -fdx # timeout=10
    Fetching without tags
    Fetching upstream changes from http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git
    using GIT_ASKPASS to set credentials Bitbucket server credentials
     > git fetch --no-tags --progress http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git +refs/heads/GWS-43-getissueforcommit:refs/remotes/origin/GWS-43-getissueforcommit
    Checking out Revision 375b17c4e7453d802d94659836db436553cc7f0c (GWS-43-getissueforcommit)
     > git config core.sparsecheckout # timeout=10
     > git checkout -f 375b17c4e7453d802d94659836db436553cc7f0c
     > git branch -a -v --no-abbrev # timeout=10
     > git checkout -b GWS-43-getissueforcommit 375b17c4e7453d802d94659836db436553cc7f0c
    Commit message: "isolate ASKPASS"
     > git rev-list --no-walk 268c468a96de0fb27b6f205658a169b38871b581 # timeout=10
    Cleaning workspace
     > git rev-parse --verify HEAD # timeout=10
    Resetting working tree
     > git reset --hard # timeout=10
     > git clean -fdx # timeout=10
    [Bitbucket] Notifying commit build result

echo 'The repo Ask Pass is: null'— Shell Script<1s
    [ne_GWS-43-getissueforcommit-M2X23QGNMETLDZWFK7IXVZQRCNSWYNTDFJZU54VP7DMIOD6Z4DGA] Running shell script
    + echo The repo Ask Pass is: null
    The repo Ask Pass is: null


重定问题:

如何修改上述Jenkinsfile以便在日志中输出以下行:

The name of the branch containing the commit for this build is: 
GWS-43-getissueforcommit

推荐答案

GIT_ASKPASS用于获取用户凭据-与分支无关.

GIT_ASKPASS is used for getting user credentials - it is not relevant to the branch.

此处是插件集的变量列表,您可以使用.从这里您可以看到GIT_BRANCH为您提供了远程分支,而GIT_LOCAL_BRANCH为您提供了已签出的本地分支.

Here are the list of variables the plugin sets, which you can use. From here you can see that GIT_BRANCH gives you the remote branch and GIT_LOCAL_BRANCH gives you the local branch checked out.

def branch = checkout(scm).GIT_BRANCH
sh "echo 'The name of the branch containing the commit for this build is: ${branch}'"

这将打印远程分支名称以及原始前缀(通常是理想的).但是,如果您不希望使用前缀:

This prints the remote branch name along with origin prefix (which is usually desirable). But if you want it without the prefix:

def branch = checkout(scm).GIT_BRANCH
branch = branch.substring(branch.indexOf('/') + 1)
sh "echo 'The name of the branch containing the commit for this build is: ${branch}'"

这篇关于在Jenkinsfile中隔离存储库分支的名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆