Почему у меня возникают трудности с передачей переменных окружения в мой Python JIRA API?

Вопрос или проблема

У меня есть следующий код, который создает экземпляр JIRA и в конечном итоге извлекает из него задачи и записывает их в Excel. Когда я выполняю все это в Python скрипте, как показано ниже, все работает отлично:

jql_string = 'project = xyz AND assignee in (larry, curly, moe) ORDER BY key DESC'
fields = "Key, Summary, Assignee, Created, Updated)"

# Создаем экземпляр Jira
jira = JIRA(server="https://myserver.mycompany.com/", 
            token_auth="abcd1234") # Личный токен доступа JIRA

# Записываем задачи в словарь
for issues in jira.search_issues(jql_str=jql_string, fields=fields, startAt=0, maxResults=False):
   
   issue = jira.issue(issues.key)   
   
   issueList.append(
       {'Тип задачи'                                    : issue.fields.issuetype,
        'Ключ задачи'                                   : issue.key,
        'ID задачи'                                     : issue.id,
        'Описание'                                      : issue.fields.summary,
        'Исполнитель'                                   : issue.fields.assignee,
        'Обновлено'                                     : issue.fields.updated,
        'Серверность'                                   : issue.fields.customfield_12825
       }

# Записываем данные в фрейм данных
.....

Однако, когда я пытаюсь импортировать jql_string, token и server из .env файла (я хочу создать исполняемый файл, чтобы передать его другим), как:

# Получаем переменные окружения
jql_string = os.environ.get('JQL_STRING')
token = os.environ.get('JIRA_USER_TOKEN')
server = os.environ.get('JIRA_SERVER')

и передаем через код, как показано выше...

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

Ответ или решение

Проблема, с которой вы столкнулись, может быть связана с несколькими аспектами при передаче переменных окружения для работы с JIRA API в вашем коде Python. Давайте подробнее рассмотрим возможные причины и предложим решения.

1. Проверка значений переменных окружения

Первоначально убедитесь, что вы правильно передаете значения переменных окружения. Например, используйте следующий код для проверки:

import os

jql_string = os.environ.get('JQL_STRING')
token = os.environ.get('JIRA_USER_TOKEN')
server = os.environ.get('JIRA_SERVER')

print("JQL_STRING:", jql_string)
print("JIRA_USER_TOKEN:", token)
print("JIRA_SERVER:", server)

Это поможет вам убедиться, что переменные окружения загружаются корректно.

2. Проверьте формат токена

Важно убедиться, что токен используется в правильном формате. Некоторые API требуют явного указания типа авторизации. Например, если вы используете токен доступа, убедитесь, что он передается как "токен" в коде. Код может выглядеть так:

jira = JIRA(server=server, token_auth=token)

3. Защита от None значений

Если переменные окружения не установлены или содержат неверные значения, вы можете получить None. Это может привести к ошибкам аутентификации. Проверьте их перед использованием:

if None in (jql_string, token, server):
    raise ValueError("Некоторые переменные окружения не установлены.")

4. Таймауты при подключении

Если вы сталкиваетесь с таймаутами, это может быть связано с несколькими факторами, включая настройки сети, такие как прокси или брандмауэр. Рассмотрите возможность установки таймаута:

jira = JIRA(server=server, token_auth=token, options={'server':server, 'timeout': 10})

5. Логи и отладка

Если все вышеперечисленное не решает проблем, добавьте дополнительные логи для отладки:

import logging

logging.basicConfig(level=logging.DEBUG)

try:
    jira = JIRA(server=server, token_auth=token)
    issues = jira.search_issues(jql_str=jql_string, fields=fields)
except Exception as e:
    logging.error("Ошибка при подключении к JIRA: %s", e)

6. Проверьте политику CORS

Если вы запускаете этот код из веб-приложения или в среде с некоторыми ограничениями (например, браузер или определенная бот-среда), убедитесь, что у вас нет проблем с политикой совместного использования ресурсов.

Заключение

Пройдитесь по всем перечисленным пунктам и проверьте ваши переменные окружения, формат и корректность ваших токенов, а также сетевые настройки. Дебаг всегда поможет в выявлении проблем с сетевыми вызовами к API. Если все это не помогло, попробуйте использовать библиотеку requests напрямую, чтобы получить больше контроля над запросами к API JIRA.

Оцените материал
Добавить комментарий

Капча загружается...