代码之家  ›  专栏  ›  技术社区  ›  Alex Harvey

无法从jenkins groovy使用aws cli

  •  0
  • Alex Harvey  · 技术社区  · 7 年前

    我想给詹金斯写信 post-initialisation groovy中使用 AWS CLI . 我的詹金斯住在 corporate proxy ,并将其配置为myproxy端口3128,其中有用户名和密码,无代理为“10.*.*.*,ap-southern-2.compute.internal,localhost,127.0.0.1,myothernoproxydomains.com”。

    我正在尝试的groovy代码如下:

    def sg = "curl http://169.254.169.254/latest/meta-data/security-groups".execute().text
    "aws ec2 describe-security-groups \
      --region ap-southeast-2 \
      --filters Name=group-name,Values=${sg} \
      --query SecurityGroups[0].GroupId \
      --output text".execute().text
    

    如果我注释掉第二个命令,并在jenkins脚本控制台中运行它,它运行良好,我可以打印安全组名称。但如果我允许运行第二个命令,我最终会从我的chrome浏览器中得到一条消息,

    “这个页面不起作用”,myjenkins.mydomain.com花了太长时间才回复。HTTP错误504。

    jenkins在其他上下文中使用http代理没有问题,例如下载包、插件等。

    我注意到,与http代理相关的环境变量不会出现在system.genenv中:

    System.getenv()
    Result: {PATH=/sbin:/usr/sbin:/bin:/usr/bin, SHELL=/bin/bash, LOGNAME=jenkins, PWD=/, USER=jenkins, LANG=en_US.UTF-8, SHLVL=2, HOME=/var/lib/jenkins, _=/etc/alternatives/java}
    

    我见过在其他站点的其他jenkins上调用aws cli的groovy代码。我想这可能与代理有关?

    我做错什么了吗?有什么想法吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   mransley    7 年前

    我认为问题在于对169.254.169.254的调用没有通过代理,因此cli没有超时,而是对元数据存储的aws调用。将其添加到您的no_proxy值中,希望这可以解决问题。

    另一种选择是关闭代理,它们是邪恶的:)