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

标签 amazon-web-services jenkins groovy aws-cli

我有一个 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/

    相关文章:

    amazon-web-services - Redshift 复制命令递归扫描

    django - AWS Boto3 兼容性问题,如何安装旧版本的 Boto3?

    email - Jenkins 电子邮件通知已成功发送但未收到

    elasticsearch - Elasticsearch:执行自定义分数脚本时在映射中找不到字段

    json - 将字符串集合的强制类型转换为 Groovy 中的枚举集合

    amazon-web-services - putdynamodb 如何在 nifi 中工作?

    amazon-web-services - 如何将 elasticache redis 集群设置为从属?

    Jenkins Pipeline 扫描编译器警告自定义解析器被阻止

    tomcat - 使用 Jenkins 成功部署后重启 Tomcat

    html - 如何在Grails中创建自定义 View 和布局