Jenkinsfile 为了将提交分支的名称隔离到可以在日志中打印出的变量中,需要对以下内容进行哪些具体更改? 在以下情况下,分支的名称为GWS-43-getissueforcommit。
Jenkinsfile
GWS-43-getissueforcommit
具体细节如下:
Jenkinsfile:
以下代码Jenkinsfile在通过运行checkout(scm).GIT_ASKPASS命令产生的输出中间打印出分支名称,但是当后续代码行(sh "echo 'The repo Ask Pass is: ${repoAskPass}'")尝试打印命令的封装结果时,此信息会丢失:
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_ASKPASS
这是插件可以使用的变量列表。从这里可以看到,它GIT_BRANCH为您提供了远程分支,并GIT_LOCAL_BRANCH为您签出了本地分支。
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}'"