gpt4 book ai didi

amazon-web-services - 查询 AWS CLI 以填充 Jenkins "Active Choices Reactive Parameter"(Linux)

转载 作者:行者123 更新时间:2023-12-04 13:45:40 24 4
gpt4 key购买 nike

我有一个 Jenkins 2.0 作业,我要求用户通过 Jenkins“Active Choices Reactive Parameter”选择要执行作业的服务器列表。作业将针对的这些服务器是 AWS EC2 实例。我想查询 AWS CLI 以获取服务器列表,而不是在“Active Choices Reactive Parameter”中对可用服务器进行硬编码。

一些注意事项:

  • 我已为 Jenkins 2.0 EC2 分配了一个 IAM 角色,该角色具有通过 CLI 查询 AWS 的足够权限。
  • AWS CLI 安装在 Jenkins EC2 上。
  • 如果我在 Groovy 脚本中对值进行硬编码,“Active Choices Reactive Parameter”将返回一个复选框列表,例如:
    返回 ["10.1.1.1", "10.1.1.2", 10.1.1.3"]
  • 我知道我的 awk 命令可以改进,我还不确定如何改进,但我的主要目标是获取在 Jenkins 中动态加载的服务器列表。

  • 我可以直接在托管 Jenkins 的 EC2 实例上运行以下命令:
    aws ec2 describe-instances --region us-east-2 --filters
    "Name=tag:Env,Values=qa" --query
    "Reservations[*].Instances[*].PrivateIpAddress" | grep -o
    '\"[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\"' | awk
    {'printf $0 ", "'} | awk {'print "[" $0'} | awk {'gsub(/^[ \t]+|[
    \t]+$/, ""); print'} | awk {'print substr ($0, 1, length($0)-1)'} |
    awk {'print $0 "]"'}

    这将返回以下内容,这是“Active Choices Reactive Parameter”所期望的格式:
    ["10.1.1.1", "10.1.1.2", 10.1.1.3"]

    因此,在“Active Choices Reactive Parameter”的“Script”文本区域中,我有以下脚本。问题是我的服务器列表从未填充过。我已经尝试了这个脚本的许多变体,但都没有运气。有人可以告诉我我哪里出错了,我可以做些什么来纠正这个脚本,以便我的服务器 IP 地址列表动态加载到 Jenkins 作业中?
    def standardOut = new StringBuffer(), standardErr = new StringBuffer()

    def command = $/
    aws ec2 describe-instances --region us-east-2 --filters "Name=tag:Env,Values=qaint" --query "Reservations[*].Instances[*].PrivateIpAddress" |
    grep -o '\"[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\"' |
    awk {'printf $0 ", "'} |
    awk {'print "[" $0'} |
    awk {'gsub(/^[ \t]+|[ \t]+$/, ""); print'} |
    awk {'print substr ($0, 1, length($0)-1)'} |
    awk {'print $0 "]"'}
    /$

    def proc = command.execute()
    proc.consumeProcessOutput(standardOut, standardErr)
    proc.waitForOrKill(1000)

    return standardOut

    最佳答案

    我尝试执行您的脚本,但标准错误有一些错误,看起来 groovy 不喜欢 AWS CLI 中的双引号。这是一种不使用 awk 的更干净的方法

    def command = 'aws ec2 describe-instances \
    --filters Name=tag:Name,Values=Test \
    --query Reservations[*].Instances[*].PrivateIpAddress \
    --output text'
    def proc = command.execute()
    proc.waitFor()

    def output = proc.in.text
    def exitcode= proc.exitValue()
    def error = proc.err.text

    if (error) {
    println "Std Err: ${error}"
    println "Process exit code: ${exitcode}"
    return exitcode
    }

    //println output.split()
    return output.split()

    关于amazon-web-services - 查询 AWS CLI 以填充 Jenkins "Active Choices Reactive Parameter"(Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48982349/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com