Jenkins: недопустимый литерал для int () с основанием 10: «в» сборке - PullRequest
0 голосов
/ 05 июля 2018

У меня есть скрипт python, который я протестировал на экземпляре EC2, который прекрасно работает на сервере, но когда я пытаюсь передать те же параметры из задания Jenkins, как показано ниже. Я получаю сообщение об ошибке:

Создана группа безопасности sg-ca09bcae в vpc vpc-d79691b9 . Traceback (последний вызов был последним): файл "./create_sg.py", строка 32, в 'FromPort': int (FROM_PORT_1.strip ("")), помечена сборка как сбой Завершено: FAILURE> ValueError: недопустимый литерал для int () с основанием 10: «в пределах» сборки шаг «Выполнить оболочку»

Jenkins Job Parameters

Я почти уверен, что ошибка из-за строкового параметра, который я передаю через параметры Jenkins, но в параметрах jenkins нет возможности отправлять порты From и To как целые числа.

Как установить целочисленные параметры в задании на сборку Jenkins?

Python-код для создания SG:

#!/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)

1 Ответ

0 голосов
/ 05 июля 2018

Вы получаете описание в виде отдельных параметров

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] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...