Jenkins作业无法在构建期间将整数参数传递给python脚本

时间:2018-07-09 15:32:34

标签: python python-3.x amazon-web-services jenkins boto3

我有一个在EC2实例上测试过的python脚本,该脚本在服务器上运行正常,但是当我尝试从Jenkins作业传递相同的参数时,如下所示。我收到错误消息:

  
    

安全组在vpc vpc-d79691b9 中创建了 sg-ca09bcae 。追溯(最近一次通话):文件“ ./create_sg.py”,第32行,在         'FromPort':int(FROM_PORT_1.strip(“”)),     将构建标记为失败完成:FAILURE> ValueError:以10为底的int()的无效文字:内部构建     步骤“执行外壳”

  

Jenkins Job Parameters

我非常确定错误是由于我通过Jenkins参数传递的字符串参数引起的,但是在jenkins参数中没有选择将From和To端口作为整数发送。

如何在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),
             'ToPort': int(TO_PORT_1),
             'IpRanges': [{'CidrIp': CIDR_IP_1}]}
        ]
    )
    print('Ingress Successfully Set %s' % data)
except ClientError as e:
    print(e)

@nosklo,建议我尝试以下操作:

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]

将端口列为0对比我在参数中传递的值。

2 个答案:

答案 0 :(得分:1)

我没有任何方法可以对此进行测试,但是错误消息将无效的int值显示为单词“ inside”。这表明Description参数直接被替换为命令行而没有任何引号,因此sys.argv[5]的确是字符串“ within”。您可以尝试在描述周围加上引号:““开发环境中的安全组”。

答案 1 :(得分:0)

我认为您正在寻找的是os.getenv

import os

VPC_ID = os.getenv('VPC_ID')

print(VPC_ID)

应该工作。