jenkins - 无法在詹金斯管道阶段使用 for 循环从列表中读取项目
问题描述
运行一个 linux 命令并将命令的输出保存为列表,然后将列表项一一变红。
stage('NAMESPACE Availability') {
node ('master'){
withEnv(["KUBECONFIG=${JENKINS_HOME}/.kube/config"]){
NS_list = sh (
script: '''kubectl get ns | awk '{print \$1}' | awk '{\$1=\$1; print "[\\x27" $0 "\\x27]"}' FS='\n' OFS="','" RS='' ''',
returnStdout: true
).trim()
echo "${NS_list}"
NS(NS_list)
}
}
}
def NS(list) {
for (i in list) {
echo "${i}"
if ( i == "${NAME_SPACE}" ) {
sh "kubectl delete all --all -n '${NAME_SPACE}' && kubectl delete '${NAME_SPACE}' "
break;
}
}
}
与其将其读取为 Item ,不如将其读取为 character ,假设命令输出为 ['NAME','b2','b6','b7','cert-manager','default'] ,其读数如下所示。
[Pipeline] echo
[
[Pipeline] echo
'
[Pipeline] echo
N
[Pipeline] echo
A
[Pipeline] echo
M
[Pipeline] echo
E
[Pipeline] echo
[Pipeline] echo
'
[Pipeline] echo
,
[Pipeline] echo
'
解决方案
我按照以下更改解决了我的问题。而不是使用 for(loop).. 我使用了“.contains”
stage('NAMESPACE Availability') {
node ('master'){
withEnv(["KUBECONFIG=${JENKINS_HOME}/.kube/config"]){
NS_list = sh (
script: '''kubectl get ns | awk '{print \$1}' ''',
returnStdout: true
).trim()
def lst = "${NS_list}";
NS = (lst.contains( "${NAME_SPACE}" ));
echo "${NS}"
if ( NS == true ) {
sh "kubectl delete all --all -n ${NAME_SPACE} "
}
else {
sh "kubectl create ns ${NAME_SPACE}"
}
}
推荐阅读
- git - 使用原始时间戳应用 git stash
- bash - 如何在谷歌云中将 tmux 会话作为 startup_script 运行?
- javascript - JSON有效负载如何找到与提供的值相等的键/值
- java - Java Arrays.toString() 创建一个奇怪的字符序列
- google-kubernetes-engine - 通过 helm 创建另一个 ingress-nginx/ingress-nginx 时出现问题“错误:呈现的清单包含已经存在的资源”
- html - 我的 WordPress 网站上的部分重定向到另一个子域,我无法阻止它重定向
- nuxt.js - 在插件中访问 $nuxt?
- r - 通过匹配两个数据框中的多列在 R 中添加新列?
- java - 在 Apache Velocity 模板语言中删除字符串的最后一个字符不起作用
- verilog - Verilog 模块实例化 reg 输入输出