相关疑难解决方法(0)

groovy中单引号或双引号中字符串的区别是什么?

def a = "a string"
def b = 'another'
Run Code Online (Sandbox Code Playgroud)

有什么区别吗?或者就像javascript让我们输入'"更容易在字符串中?

string groovy

83
推荐指数
2
解决办法
3万
查看次数

Jenkins Pipeline糟糕的替代品

我的管道中的一个步骤将.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},并且在任何其他地方都没有问题.

bash groovy jenkins jenkins-pipeline

32
推荐指数
6
解决办法
4万
查看次数

将groovy变量传递给shell脚本

我刚开始学习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)

shell groovy jenkins cloudbees

6
推荐指数
3
解决办法
9127
查看次数

如何在 Jenkins Groovy 的多行 shell 脚本中同时使用 Groovy 定义的和 OS 系统变量

我需要在 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)

shell groovy jenkins

4
推荐指数
2
解决办法
1314
查看次数

在Jenkins Pipeline的Shell脚本部分中定义变量

我试图动态定义一个变量,稍后在我的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)

jenkins jenkins-pipeline

1
推荐指数
3
解决办法
5273
查看次数

Jenkins Pipeline上的AWS cli“期望属性名称用双引号引起来”

我收到一条错误消息

期望的属性名称用双引号引起来:第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)

这是完整的错误信息

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}]}]
Run Code Online (Sandbox Code Playgroud)

期望的属性名称用双引号引起来:第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

0
推荐指数
1
解决办法
3620
查看次数