Вопрос или проблема
У меня есть следующий код, который создает экземпляр 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.