我正在尝试在Jenkins中使用DSL管道.我认为如果我可以将项目名称作为我脚本的一部分,那就太好了.
git credentialsId: 'ffffffff-ffff-ffff-ffff-ffffffffffffff',\
url: "${repo_root}/${JOB_NAME}.git"
Run Code Online (Sandbox Code Playgroud)
我收到错误:
groovy.lang.MissingPropertyException: \
No such property: JOB_NAME for class: groovy.lang.Binding
Run Code Online (Sandbox Code Playgroud)
我以为我遵循了这些指示,他们提到JOB_NAME了变量之一.
我决定尝试:
sh 'env'
Run Code Online (Sandbox Code Playgroud)
在我的DSL中,打印出来:
JOB_NAME = foo-bar
Run Code Online (Sandbox Code Playgroud)
这是我所期待的.
另一篇博客提到:
使用环境变量
我们有两种方法来获取它们的价值.-D=在启动期间传递的属性我们可以阅读,System.getProperty("key")这要归功于Groovy与Java的强大关系.用Java方式读取常规环境变量是
System.getenv("VARIABLE")......
我们试试这个:
println "JOB_NAME = " + System.getenv('JOB_NAME');
Run Code Online (Sandbox Code Playgroud)
现在,我得到:
java.lang.NullPointerException: Cannot get property 'System' on null object
Run Code Online (Sandbox Code Playgroud)
空物体?但是,我可以看到这JOB_NAME是一个环境变量!
如何$JOB_NAME在Pipeline作业中读入DSL脚本.我正在尝试一个管道工作,当我得到它的工作将使这个多分支管道与Jenkinsfile.
这是我的管道代码:
node ('master') {
git url: "$GIT_REPO_URL", branch: "$GIT_BRANCH"
echo env.GIT_COMMIT
echo env.GIT_BRANCH
echo env.GIT_REVISION
}
Run Code Online (Sandbox Code Playgroud)
构建结果如下所示:
Started by user anonymous
[Pipeline] Allocate node : Start
Running on master in /var/lib/jenkins/jobs/test/workspace
[Pipeline] node {
[Pipeline] git
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url https://acme/scm/app.git # timeout=10
Fetching upstream changes from https://acme/scm/app.git
> git --version # timeout=10
> git fetch --tags --progress https://acme/scm/app.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> …Run Code Online (Sandbox Code Playgroud) 我正在尝试为jenkins groovy脚本获取我的分支名称.我无法获取当前的分支名称.我尝试以下方法:
stage('Check out code')
checkout scm
echo "My branch is: ${env.BRANCH_NAME}"
Run Code Online (Sandbox Code Playgroud)
这是输出 - 它总是返回null.
Checking out Revision 33b531b2f1caaf8b64d968e437306f39d2dba1da (origin/pipeline)
> git.exe config core.sparsecheckout # timeout=10
> git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da
[Pipeline] echo
My branch is: null
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
Git插件(默认情况下)安装在我的Jenkins中,但是我无法获得应该由Git插件传入的env变量.我在找:
GIT_COMMIT
GIT_BRANCH
GIT_PREVIOUS_COMMIT
GIT_PREVIOUS_SUCCESSFUL_COMMIT
GIT_URL
Run Code Online (Sandbox Code Playgroud)
我正在使用管道作业项目指向与Jenkins文件的Github仓库,代码如下
stage 'PushToProd'
node {
git url: "https://github.com/username/fakeurl.git"
echo "Starting PushToProd"
sh 'printenv'
sh 'env'
sh 'echo $BRANCH_NAME'
sh 'echo $GIT_COMMIT'
}
Run Code Online (Sandbox Code Playgroud)
当我使用env或者printenv不使用Github插件时,我得到了大量的环境变量.
关于如何将Git env变量传递给作业的任何提示?
更新:当我使用Freestyle项目并使用shell步骤时,我能够轻松获取Git env变量echo $GIT_COMMIT.仍然想知道如何使用Jenkinsfile + Pipeline作业项来使其工作.
我试图提取git分支并在我的Jenkinsfile中提交信息,如下所示:
def commit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
def branch = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
Run Code Online (Sandbox Code Playgroud)
我试着像这样打印它:
println("Branch: ${branch}, Commit: ${commit}")
Run Code Online (Sandbox Code Playgroud)
我没有获得真正的价值,而是留下了这个:
Branch: org.jenkinsci.plugins.pipeline.modeldefinition.ClosureModelTranslator@545511bf, Commit: org.jenkinsci.plugins.pipeline.modeldefinition.ClosureModelTranslator@545511bf
Run Code Online (Sandbox Code Playgroud)
我做错了什么,如何正确检索我需要的值?
编辑:不,建议的副本不是答案,因为我知道用于检索我需要的信息的shell命令.我的问题是信息传递给我的方式,ClosureModelTranslator而不是一个String.