Old*_*dek 16 groovy jenkins jenkins-plugins jenkins-workflow jenkins-pipeline
我似乎无法从Jenkins Workflow Checkout步骤中提取$ GIT_COMMIT和$ BRANCH_NAME.
我希望能够将此信息发送到我的Gradle脚本,以便将其传递到外部源,如静态分析等.
目前我尝试运行这个:
checkout([$class: 'GitSCM', branches: [[name: '*/master']], userRemoteConfigs: [[credentialsId: '2b74a351-67d5-4d00-abd3-49842a984201', url: 'ssh://git@corporate.com:repo.git']]])
Run Code Online (Sandbox Code Playgroud)
我想实现以下或类似的东西:
// Specified variables that can be reused
def branch = ${BRANCH_NAME}
def commit = ${GIT_COMMIT}
Run Code Online (Sandbox Code Playgroud)
或许也可以这样做:
print "BRANCH: ${BRANCH_NAME}, COMMIT: ${GIT_COMMIT}"
// or the following
print "BRANCH: ${env.BRANCH_NAME}, COMMIT: ${env.GIT_COMMIT}"
Run Code Online (Sandbox Code Playgroud)
我确实发现以下问题似乎已得到解决,但它在版本1.15中不起作用:
https://issues.jenkins-ci.org/browse/JENKINS-30252
任何人有任何想法如何解决这个或如果有一个我找不到的变量?
Jes*_*ick 34
首先,
def branch = ${BRANCH_NAME}
Run Code Online (Sandbox Code Playgroud)
是无效的Groovy,或者至少没有按照你的想法行事.也许你的意思
def branch = "${BRANCH_NAME}"
Run Code Online (Sandbox Code Playgroud)
这只是一种愚蠢的写作方式
def branch = BRANCH_NAME
Run Code Online (Sandbox Code Playgroud)
无论如何,环境变量当前不能直接作为Pipeline中的Groovy变量访问(有一个允许它的提议); 你需要使用env
全局变量:
def branch = env.BRANCH_NAME
Run Code Online (Sandbox Code Playgroud)
在外部进程(例如sh
步骤)内,它是一个实际的环境变量,因此
sh 'echo $BRANCH_NAME'
Run Code Online (Sandbox Code Playgroud)
工作(请注意,这'
意味着Groovy 不插入变量).
现在,JENKINS-30252指的是多分支项目.如果您创建了独立的管道作业,则不会设置此变量.
无论如何,在您的情况下,您的checkout
步骤始终是检查master
分支.如果你实际上有一个多分支项目,那么你Jenkinsfile
应该使用
checkout scm
Run Code Online (Sandbox Code Playgroud)
这将检查正确分支上的提交(始终匹配其Jenkinsfile
自身的修订).
至于提交哈希,等待JENKINS-26100,这是不可用的,但你可以使用类似的东西
sh 'git rev-parse HEAD > commit'
def commit = readFile('commit').trim()
Run Code Online (Sandbox Code Playgroud)
访问它.
Ant*_*ony 10
我有两个Jenkins实例.
在这两种情况下,GIT_COMMIT
和BRANCH_NAME
环境变量没有定义.
当我尝试从checkout()
调用的返回值中获取它们时,每个实例的行为都不同.
詹金斯版本:2.46.1
"Pipeline:SCM Step"插件版本:2.5
尝试按checkout
文档中的说明访问环境变量失败.
def scmVars = checkout([$class: 'GitSCM', branches: [[name: '*/master']],
userRemoteConfigs: [[credentialsId: '2b74a351-67d5-4d00-abd3-
49842a984201', url: 'ssh://git@corporate.com:repo.git']]])
def commitHash = scmVars.GIT_COMMIT
Run Code Online (Sandbox Code Playgroud)
scmVars
返回NULL,访问scmVars.GIT_BRANCH
失败,异常java.lang.NullPointerException: Cannot get property 'GIT_BRANCH' on null object
.
因此我必须执行以下操作才能获得分支:
sh 'git name-rev --name-only HEAD > GIT_BRANCH'
sh 'cat GIT_BRANCH'
git_branch = readFile('GIT_BRANCH').trim()
env.GIT_BRANCH = git_branch
Run Code Online (Sandbox Code Playgroud)
詹金斯版本:2.60.2
"Pipeline:SCM Step"插件版本:2.6
在这种情况下,我可以成功完成以下任务:
def scmVars = checkout([$class: 'GitSCM', branches: [[name: '*/master']],
userRemoteConfigs: [[credentialsId: '2b74a351-67d5-4d00-abd3-
49842a984201', url: 'ssh://git@corporate.com:repo.git']]])
env.GIT_COMMIT = scmVars.GIT_COMMIT
env.GIT_BRANCH = scmVars.GIT_BRANCH
Run Code Online (Sandbox Code Playgroud)
因此,请检查哪种方法适用于您的Jenkins实例并使用它.
归档时间: |
|
查看次数: |
43285 次 |
最近记录: |