我试图用Groovy编写使用post-initialisation的Jenkins AWS CLI脚本。我的Jenkins位于corporate proxy后面,我将其配置为myproxy端口3128,使用用户名和密码,并且no_proxy为“ 10。*。*。*,ap-southeast-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}
我已经在其他站点的其他Jenkinses上看到了调用AWS CLI的Groovy代码。我认为这可能与代理相关?
我做错什么了吗?对这个问题有什么想法吗?
答案 0 :(得分:0)
我认为问题在于对169.254.169.254的调用未通过代理传递,因此CLI并未超时,这是对元数据存储的AWS调用。将其添加到您的NO_PROXY值中,希望可以解决该问题。
另一种选择是关闭代理,它们很邪恶:)