Jenkins管道共享库无法检索pod IP



我创建了一个Jenkins管道共享库来检索连接到kubernetes集群的pod IP,该集群失败并在下面引发错误。任何修复这一问题的指针都将是伟大的:

JSL:

docker.withRegistry('https://' + dockerRegistry, dockerCredentialsId) {
docker.image(kubectlImage).inside("""--entrypoint=''"""){
sh """
#!/bin/sh
set +x
kubectl get pods -n ${namespace}  -o json > $WORKSPACE/pods.json
podIP=$(jq -r '.items[] | select(.metadata.generateName | test("${appName}")).status.podIP' $WORKSPACE/pods.json}
echo "Pod IP:$podIP"
"""
}
}

管道执行期间出错-

70: illegal string body character after dollar sign;
16:18:23     solution: either escape a literal dollar sign "$5" or bracket the value expression "${5}" @ line 70, column 14.
16:18:23           podIP=$(jq -r '.items[] | select(.metadata.generateName | test("${appName}")).status.podIP' $WORKSPACE/pods.json)
16:18:23                  ^
16:18:23  
16:18:23  1 error
16:18:23  
16:18:23    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
16:18:23    at org.codehaus.groovy.control.ErrorCollector.addFatalError(ErrorCollector.java:150)
16:18:23    at org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:120)
16:18:23    at org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:132)

"""语法用于多行插值Groovy字符串。这不是您在上述任何一种用法中想要的。我们可以使用单行文字字符串'和多行文字字符串:

docker.withRegistry('https://' + dockerRegistry, dockerCredentialsId) {
docker.image(kubectlImage).inside('--entrypoint=""'){
sh '''
#!/bin/sh
set +x
kubectl get pods -n ${namespace}  -o json > $WORKSPACE/pods.json
podIP=$(jq -r ".items[] | select(.metadata.generateName | test($appName)).status.podIP" $WORKSPACE/pods.json}
echo "Pod IP:$podIP"
'''
}
}

由于WORKSPACE是一个导出到shell解释器的管道环境变量,因此它可以按原样使用。如果您使用了插值语法,则需要在env对象(即env.WORKSPACE(中访问它。

问题中没有显示appName的定义,因此,如果问题没有按预期解决,则需要相应地更新问题。

相关内容

  • 没有找到相关文章

最新更新