繁体   English   中英

Jenkins - 在 sh 脚本中分配变量

[英]Jenkins - Assign variable inside sh script

我想在脚本中创建一个变量名作为 POD 来分配 kubectl 输出,然后在运行 kubectl port-forward pods 时传递这个变量..

但我收到以下错误

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 151: illegal string body character after dollar sign;
   solution: either escape a literal dollar sign "\$5" or bracket the value expression "${5}" @ line 151, column 80.
   e-context ${KUBE_CLUSTER_STAGE}

这是我的脚本。

 environment {
                POD = ''
            }
            steps {
                script {
                    withCredentials([file(credentialsId: 'mbtkubeconfig', variable: 'config')]){
                        try {
                            // Expose PostreSQL
                            sh '''#!/bin/sh
                                chmod ug+w ${config}
                                export KUBECONFIG=\${config}
                                kubectl config use-context ${KUBE_CLUSTER_STAGE}
                                kubectl config set-context --current --namespace=database
                                POD = `$(kubectl get po -n database --selector='role==master' -o jsonpath="{.items[0].metadata.name}")`
                                kubectl port-forward pods/$POD 5432:64000 & echo \$! > filename.txt
                            '''

当我在没有变量的情况下尝试时,没有任何错误。这是运行时没有任何错误的脚本。

                        sh """#!/bin/sh
                            chmod ug+w ${config}
                            export KUBECONFIG=\${config}
                            kubectl config use-context ${KUBE_CLUSTER_STAGE}
                            kubectl config set-context --current --namespace=database
                            kubectl get pods -n database
                            kubectl port-forward pods/my-postgres-postgresql-helm-0 5432:64000 & echo \$! > filename.txt
                        """

当您使用sh运行命令时,请确保您使用的是" not ' 。只有在使用"${config}"时才会解析 Groovy 变量。

顺便说一句,使用env.标记变量被认为是最佳实践env. 虽然不需要解析变量。 例如,尝试使用${env.KUBE_CLUSTER_STAGE}标记您的集群阶段

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM