python - 詹金斯:int()的无效文字(以10为底):'within' Build
问题描述
我有一个我在 EC2 实例上测试过的 python 脚本,它在服务器上工作得非常好,但是当我尝试从 Jenkins 作业传递相同的参数时,如下所示。我收到错误消息:
安全组在 vpc vpc-d79691b9 中创建了sg- ca09bcae。回溯(最后一次调用):文件“./create_sg.py”,第 32 行,在“FromPort”中:int(FROM_PORT_1.strip("")),将构建标记为失败 Finished: FAILURE> ValueError: invalid literal for int () 以 10 为底:“在”构建步骤“执行外壳”中
我很确定错误是因为我通过 Jenkins 参数传递的字符串参数,但是没有选项可以将 From 和 To 端口作为 jenkins 参数中的整数发送。
如何在 Jenkins 构建作业中将参数设置为整数?
创建 SG 的 Python 代码:
#!/usr/bin/env python
import sys
import boto3
from botocore.exceptions import ClientError
region = "us-west-1"
VPC_ID=sys.argv[1]
SECURITY_GROUP_NAME=sys.argv[2]
DESCRIPTION=sys.argv[3]
IP_PROTOCOL_1=sys.argv[4]
FROM_PORT_1=sys.argv[5]
TO_PORT_1=sys.argv[6]
CIDR_IP_1=sys.argv[7]
ec2 = boto3.client('ec2')
response = ec2.describe_vpcs()
vpc_id = VPC_ID
try:
response = ec2.create_security_group(GroupName=SECURITY_GROUP_NAME,Description=DESCRIPTION,VpcId=VPC_ID)
security_group_id = response['GroupId']
print('Security Group Created %s in vpc %s.' % (security_group_id, vpc_id))
data = ec2.authorize_security_group_ingress(
GroupId=security_group_id,
IpPermissions=[
{'IpProtocol': IP_PROTOCOL_1,
'FromPort': int(FROM_PORT_1.strip("")),
'ToPort': int(TO_PORT_1.strip("")),
'IpRanges': [{'CidrIp': CIDR_IP_1}]}
]
)
print('Ingress Successfully Set %s' % data)
except ClientError as e:
print(e)
解决方案
您将描述作为单独的参数
VPC_ID=sys.argv[1] # -> vpc-d79691b9
SECURITY_GROUP_NAME=sys.argv[2] # -> Security_Group_Test_Dev
DESCRIPTION=sys.argv[3] # -> Security
IP_PROTOCOL_1=sys.argv[4] # -> group
FROM_PORT_1=sys.argv[5] # within
TO_PORT_1=sys.argv[6] # dev
CIDR_IP_1=sys.argv[7] # environment
这意味着变量FROM_PORT_1
包含'within'
的不是整数。
在您的堆栈中的某个位置,当您的脚本被调用时,它使用空间来拆分参数,并且描述泄漏到其他参数。
您可以改用一个单词的描述来检查我的假设是否正确。
您应该在调用 python 代码的部分修复它,但如果您无法修复它,以下是如何使用 python 代码解决该错误:
VPC_ID=sys.argv[1]
SECURITY_GROUP_NAME=sys.argv[2]
DESCRIPTION=' '.join(sys.argv[3:-4])
IP_PROTOCOL_1=sys.argv[-4]
FROM_PORT_1=sys.argv[-3]
TO_PORT_1=sys.argv[-2]
CIDR_IP_1=sys.argv[-1]
推荐阅读
- react-native - TouchableOpacity w/border radius 渲染但允许在半径外触摸
- android - 如何从对象调用函数?
- macos - 在 Mac OS 上安装 Uppaal
- console - C++ 中 std::atexit 的替代方法是什么
- algorithm - 箱内物品的所有组合
- android - RecyclerView 中的可点击 ImageButton
- node.js - 使用 rejoice 在 NodeJS 中启用 https
- python - 如何在 Python 中使用定义的变量运行特定的 Powershell 命令并打印输出?
- cryptography - 在 github 上托管使用强密码学的开源软件项目是否存在法律问题?
- python - Python - InvalidRequestError:无法反映:请求的表在引擎中不可用(mysql + mysqlconnector://