我有以下Jenkinsfile
def ARTIFACTS_JOB_ID;
def ARTIFACTS_URL;
node('CentOs') {
checkout scm
stage('Example') {
echo 'Download artifacts'
sh 'curljson --header "PRIVATE-TOKEN: tdzis3" "https://gitlab-sample.com/api/v4/projects/63/jobs" > jobs.json'
ARTIFACTS_JOB_ID = sh(returnStdout: true, script: 'python GetID.py').trim()
ARTIFACTS_URL = "https://gitlab-sample.com/api/v4/projects/63/jobs/${ARTIFACTS_JOB_ID}/artifacts"
echo "======> $ARTIFACTS_URL"
sh 'echo $ARTIFACTS_URL'
sh 'curl --output artifacts.zip --header "PRIVATE-TOKEN: tdzis3" "$ARTIFACTS_URL"'
}
}
在尝试获取工件时,它正在调用
'curl --output artifacts.zip --header "PRIVATE-TOKEN: tdzis3" ""'
(网址为空)
类似地
echo "======> $ARTIFACTS_URL" //works fine
sh 'echo $ARTIFACTS_URL' // shows empty string, tried with ${ARTIFACTS_URL} aswell.
有没有一种方法可以如下运行(因此我不必使用sh
)
def ARTIFACTS_JOB_ID;
def ARTIFACTS_URL;
node('CentOs') {
checkout scm
stage('Example') {
script {
echo 'Download artifacts'
curljson --header "PRIVATE-TOKEN: tdzis3" "https://gitlab-sample.com/api/v4/projects/63/jobs" > jobs.json
}
}
}
没有sh
时,我收到无效的语法错误
curljson --header
答案 0 :(得分:3)
变量声明ARTIFACTS_URL = "https://..."
是Groovy全局变量。因此,sh
步骤自然无法将其作为shell变量使用。
您需要在命令sh
内用双引号而不是sh "echo $ARTIFACTS_URL"
括住单引号,以便Groovy将其作为Groovy变量插值。
答案 1 :(得分:1)
您尝试过
sh "curl --output artifacts.zip --header 'PRIVATE-TOKEN: tdzis3' '{$ARTIFACTS_URL}'"
?
对于多个sh命令,您也可以使用
sh """
curl command here
cd command next
etc
"""