Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为Jenkins管道中的循环使用shell脚本_Bash_Jenkins_Jenkins Pipeline - Fatal编程技术网

Bash 为Jenkins管道中的循环使用shell脚本

Bash 为Jenkins管道中的循环使用shell脚本,bash,jenkins,jenkins-pipeline,Bash,Jenkins,Jenkins Pipeline,我在Jenkins文件中的一个阶段中使用以下shell命令时遇到问题: stage('Run'){ container('tool-build'){ withCredentials([string(credentialsId: 'slack', variable: 'WEBHOOK')]){ echo "Sending Slack Notification" sh """ images=\$(

我在Jenkins文件中的一个阶段中使用以下shell命令时遇到问题:

stage('Run'){
  container('tool-build'){
    withCredentials([string(credentialsId: 'slack', variable: 'WEBHOOK')]){

              echo "Sending Slack Notification"
              sh """
                 images=\$(docker images | grep "url.for.specific.repo.net" | awk 'NR>1 { print \$1":"\$2 }'')
                 for image in \$images;
                 do
                   label=\$(docker inspect --format='Maintainer:{{.Config.Labels.maintainer}}, From:{{.Config.Labels.from}}, Contains:{{.Config.Labels.contains}}' \$image);
                   PAYLOAD=\$(printf 'payload={"text": "New image available - %s - %s", "channel": "#some-channel", "username": "Some-Jenkins"}' "\$image" "\$label");
                   curl -v -X POST --data-urlencod "\$PAYLOAD" "$WEBHOOK";
                 done
              """
Jenkins的输出控制台似乎没有执行
images=\$
中的命令,并且忽略了for循环。如何从bash命令中获得正确的输出,同时又不忽略for循环

詹金斯输出:

Sending Slack Notification

[Pipeline] sh

+ docker images

+ grep url.for.specific.repo.net

+ awk 'NR>1 { print $1":"$2 }'

+ images=

能否提取生成的脚本并在shell中运行?这可能会提供更多信息。请尝试
images=\$(docker images--format“{{.Repository}:{{.Tag}”)
,然后
echo\$images
@MaratC尝试了这个方法。得到wamer。。。它现在按照预期在内部执行docker命令并正确打印输出,但是它没有将输出保存到变量
images
。同样的事情也发生在
标签上。echo的输出是
,但docker images命令会打印正确的图像名称。Jenkins的更新输出:
发送松弛通知[Pipeline]sh+docker图像--格式“{.Repository}:{.Tag}”“+images=”:myrepo.net/amazon/amazonlinux2:20190129t0000z'+echo':'myrepo.net/amazonlinux2:20190129t0000z:myrepo.net/amazon/amazonlinux2:20190129t0000z+docker-inspect'--format=mainter:{.Config.Labels.mainter},From:{.Config.Labels.From},Contains:{.Config.Labels.Contains}'':'错误:没有这样的对象::+label=
@MaratC此操作有效,但我不想循环使用none:none,这是docker每次创建图像时的默认设置。因此,我最初使用特定grep的原因是:(有没有办法在--format中排除none值?