获取ECS任务定义的任务定义名称

时间:2019-05-22 19:52:34

标签: jenkins groovy

我遇到了尝试运行以下命令的问题:

aws ecs list-task-definitions | grep Foo-Task-Testing | awk -F '/' '{print $2}'

这恰好返回我正在寻找的只是任务定义名称。

仅使用grep在CLI中运行命令时,我得到以下信息:

        "arn:aws:ecs:us-east-1:xxxxxxxxxx:task-definition/Foo-Task-Testing-TaskDefinition-OYBZ78KBUI57:1",

包括Awk时,我得到:

Foo-Task-Testing-TaskDefinition-OYBZ78KBUI57:1"

但是,当我尝试将其添加到我的Jenkins管道中时:

ecsTaskDefinitionName = Foo-Task-Testing
ecsTaskDefinition = sh(returnStdout: true, script: "aws ecs list-task-definitions | grep $ecsTaskDefinitionName | awk -F '/' '{print \$2}'").trim()

我总是收到此错误消息:

/home/jenkins/workspace/foo_test_PR-828@tmp/durable-a5ce4670/script.sh: 1: /home/jenkins/workspace/foo_test_PR-828@tmp/durable-a5ce4670/script.sh: Syntax error: Unterminated quoted string

我觉得这与我在Groovy中使用Awk的方式有关,但是我似乎无法在网上找到足够的示例来确认这一点。有人可以使用Awk在Groovy w / o中提供做到这一点的方法,还是有经验的Groovy程序员可以告诉我传递Awk的正确方法?

1 个答案:

答案 0 :(得分:1)

您可以避免使用awk来使用grep -o

... | grep -o Foo-Task-Testing.*

返回

Foo-Task-Testing-TaskDefinition-OYBZ78KBUI57:1

(-o仅返回匹配项,。*贪婪地匹配之后的所有内容)