当前位置: 首页 > 面试题库 >

在Jenkinsfile中隔离存储库分支的名称

商皓
2023-03-14
问题内容

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

具体细节如下:

Jenkinsfile:

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

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_BRANCH为您提供了远程分支,并GIT_LOCAL_BRANCH为您签出了本地分支。

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

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

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}'"


 类似资料:
  • 问题内容: 我创建了一个詹金斯管道,它正在从scm中提取管道脚本。 我将分支说明符设置为“ ”,因此它基于对任何分支的任何更改。 如何从Jenkinsfile访问导致此生成的分支名称? 我尝试过的一切都呼应null 总是这样。 问题答案: 如果您的管道有jenkinsfile,请检查执行时是否在环境变量中看到分支名称。 您可以使用以下命令打印它们: 但是,PR 91显示仅在某些管道配置中设置了分支

  • 我已经创建了一个jenkins管道,它正在从scm中提取管道脚本 我将分支说明符设置为“all”,因此它基于对任何分支的任何更改。 如何从Jenkinsfile访问导致此构建的分支名称? 我试过的所有东西都是空的,除了 它始终是主。

  • 问题内容: 我已经在jenkins中将用户名和密码存储为凭证。现在,我想在我的Jenkinsfile中使用它们。 我正在使用DSL,但是,我不确定如何将用户名密码作为单独的变量获取,因此我可以在命令中使用它们。 这就是我在做什么: 如何分别输入用户名和密码?我尝试这样做,但这似乎不起作用。 问题答案: 您可以使用获取单独的值的凭据数据: 因此,以下情况适用于您的情况:

  • 问题内容: 我正在将Jenkins管道插件与Jenkinsfile一起使用。 在一个名为vms.git的存储库中,我有Jenkinsfile及其构建的应用程序。 我还有一个名为deploy.git的存储库,其中包含我想用于在vms.git中部署应用程序的脚本。 目前,我的Jenkinsfile看起来像这样 并且我在作业配置中定义了vms.git存储库。 因此,我想做的是检出两个存储库,然后使用vm

  • 我正在使用Jenkins管道插件和Jenkins文件。 在一个名为vms的存储库中。git,我有Jenkinsfile和它构建的应用程序。 我有另一个名为deploy的存储库。git,其中包含我想用于在VM中部署应用程序的脚本。吉特。 目前我的Jenkinsfile就是这样的 我正在作业配置中定义vms.git存储库。 所以我想做的是检查这两个存储库,然后在vms中使用Jenkinsfile。gi

  • 我已经成功地与另一位现场开发人员一起使用GitLab,开发了C和MATLAB中的小型项目。 在家使用VPN工作时,我将一个大型LabVIEW程序推到了一个新项目中,这样我就可以与另一个非现场开发人员一起工作。开发人员克隆了该项目,并开始开发一个分支。 问题是我无法提取/获取此分支。GitLab正在显示开发人员所做的分支和提交。 我使用git的时间不长,所以我可能只是太傻了。 Git推送:“致命的‘