def a = "a string"
def b = 'another'
Run Code Online (Sandbox Code Playgroud)
有什么区别吗?或者就像javascript让我们输入'并"更容易在字符串中?
我的管道中的一个步骤将.tar上传到artifactory服务器.传入env.BUILD_NUMBER时收到错误的替换错误,但是当数字被硬编码时,相同的命令也会起作用.该脚本通过jenkins以groovy编写,并在jenkins工作区中运行.
sh 'curl -v --user user:password --data-binary ${buildDir}package${env.BUILD_NUMBER}.tar -X PUT "http://artifactory.mydomain.com/artifactory/release-packages/package${env.BUILD_NUMBER}.tar"'
Run Code Online (Sandbox Code Playgroud)
返回错误:
[Pipeline] sh
[Package_Deploy_Pipeline] Running shell script
/var/lib/jenkins/workspace/Package_Deploy_Pipeline@tmp/durable-4c8b7958/script.sh: 2:
/var/lib/jenkins/workspace/Package_Deploy_Pipeline@tmp/durable-4c8b7958/script.sh: Bad substitution
[Pipeline] } //node
[Pipeline] Allocate node : End
[Pipeline] End of Pipeline
ERROR: script returned exit code 2
Run Code Online (Sandbox Code Playgroud)
如果构建号中的硬代码和换出${env.BUILD_NUMBER}我没有错误,代码运行成功.
sh 'curl -v --user user:password --data-binary ${buildDir}package113.tar -X PUT "http://artifactory.mydomain.com/artifactory/release-packages/package113.tar"'
Run Code Online (Sandbox Code Playgroud)
我在同一个脚本中的其他sh命令中使用$ {env.BUILD_NUMBER},并且在任何其他地方都没有问题.
我刚开始学习groovy.我想在svn copy命令中将svnSourcePath和svnDestPath传递给shell脚本.但URL未呈现.
node {
stage 'Copy Svn code'
def svnSourcePath = "${svnBaseURL}${svnAppCode}${svnEnvDev}${SVN_DEV_PACKAGE}"
def svnDestPath = "${svnBaseURL}${svnAppCode}${svnEnvTest}${SVN_DEV_PACKAGE}"
print "DEBUG: svnSourcePath = ${svnSourcePath}"
print "DEBUG: svnDestPath = ${svnDestPath}"
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: crendentialsIdSVN, passwordVariable: 'SVN_PWD', usernameVariable: 'SVN_USER']]) {
sh '''
svn copy $svnSourcePath $svnDestPath -m 'promote dev to test' --username $SVN_USER --password $SVN_PWD '''
}
}
Run Code Online (Sandbox Code Playgroud)
产量
+ svn copy -m 'promote dev to test' --username techuser --password 'xxxyyy'
svn: E205001: Try 'svn help' for more info
svn: E205001: Not enough arguments provided
Run Code Online (Sandbox Code Playgroud) 我需要在 Jenkins 的多行 shell 脚本中访问 Groovy 定义的变量(例如 var1)。我需要在sh中使用双引号"""。(我指的是here)
但我也需要读取和更改 os 系统变量(例如 aws_api_key)。它需要在 sh 中使用单引号 ''' 并使用 \ 来转义美元 $ 符号。(我指的是这里)
我怎样才能同时使用它们?任何帮助都感激不尽。
例如
node ("Jenkins-Test-Slave") {
stage ("hello world") {
echo 'Hello World'
}
def var1="bin"
stage ("test") {
withEnv(["aws_api_key='define in withEnv'","service_url=''"]) {
echo var1
sh '''
echo the groovy data var1 is "${var1}",'\${var1}',\$var1,${var1},var1!!!
echo default value of aws_api_key is \$aws_api_key
aws_api_key='changed in shell'
echo new value of aws_api_key is \$aws_api_key
export newvar='newxxx'
echo the new var …Run Code Online (Sandbox Code Playgroud) 我试图动态定义一个变量,稍后在我的Jenkins管道的一些shell命令中使用它,并抛出异常。我什至尝试将变量从环境部分预定义为无济于事。这是被禁止的操作吗?我的其他变量myVar似乎工作正常,但是在管道中是一个常量。
pipeline {
agent any
environment {
py2Ana=""
myVar="ABCDE"
}
stages {
stage('Stage1') {
steps {
sh """
echo myVar=$myVar
echo Find Anaconda2 Python installation...
py2Ana=`which -a python | grep --max-count=1 anaconda2`
if [[ -z "$py2Ana" ]]; then
echo ERROR: must have a valid Anaconda 2 distribution installed and on the PATH for this job.
exit 1 # terminate and indicate error
fi
"""
}
}
}
Run Code Online (Sandbox Code Playgroud)
groovy.lang.MissingPropertyException: No such property: py2Ana for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63) …Run Code Online (Sandbox Code Playgroud) 我收到一条错误消息
期望的属性名称用双引号引起来:第1行第3列(字符2)
在Jenkins管道上运行AWS CLI以创建EC2容器服务的任务定义时。有趣的是,该脚本能够在命令行中运行而没有任何错误。
aws ecs register-task-definition --family ${FAMILY} --container-definitions "[{\"name\":\"wildfly\",\"image\":\"${REPOSITORY}\",\"memory\":3024,\"essential\":true,\"portMappings\":[{\"containerPort\":8080,\"hostPort\":8080,\"protocol\":\"tcp\"}]}]"`
Run Code Online (Sandbox Code Playgroud)
这是完整的错误信息
Run Code Online (Sandbox Code Playgroud)aws ecs register-task-definition --family wildfly2-b47 --container-definitions [{name:wildfly, image:****/backend:b47, memory:3024, essential:true, portMappings:[{containerPort:8080, hostPort:8080, protocol:tcp}]}]期望的属性名称用双引号引起来:第1行第3列(字符2)
这是詹金斯阶段代码
aws ecs register-task-definition --family ${FAMILY} --container-definitions "[{\"name\":\"wildfly\",\"image\":\"${REPOSITORY}\",\"memory\":3024,\"essential\":true,\"portMappings\":[{\"containerPort\":8080,\"hostPort\":8080,\"protocol\":\"tcp\"}]}]"`
Run Code Online (Sandbox Code Playgroud)
请帮我
amazon-ec2 amazon-web-services amazon-ecs jenkins jenkins-pipeline