Travis CI: переменная env пуста при чтении из shell-скрипта

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

Я установил несколько глобальных переменных в настройках Travis CI.

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

Когда я пытаюсь вывести переменную, я получаю пустой вывод: https://app.travis-ci.com/github/blockchain-certificates/cert-schema/jobs/627323874#L845-L846, а позже https://app.travis-ci.com/github/blockchain-certificates/cert-schema/jobs/627323874#L855 twine выдает ошибку, так как переданы пустые значения (в этом нет проблемы на моем локальном компьютере).

Переменные, предположительно, экспортируются в начале сборки (https://app.travis-ci.com/github/blockchain-certificates/cert-schema/jobs/627323874#L180-L181), и я снова установил имена и значения переменных в настройках, так что я точно знаю, что они не пустые.

Вот намерение скрипта:

echo $TWINE_USERNAME
echo $TWINE_PASSWORD
twine upload dist/* -u $TWINE_USERNAME -p $TWINE_PASSWORD --verbose

Я изменил выполнение скрипта с sh на ., так как прочитал, что контекст будет сохранен, но это не помогло.

Может кто-то помочь мне с этим?

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

Проблема, которую вы описываете, с пустыми переменными окружения в Travis CI, является достаточно распространенной и может быть вызвана несколькими факторами. Давайте рассмотрим наиболее вероятные причины вашей ситуации и возможные решения.

1. Проверьте настройки переменных окружения

Прежде всего, убедитесь, что переменные окружения действительно правильно настроены в интерфейсе Travis CI. Важно внимательно проверить следующее:

  • Переменные окружения должны быть заданы на уровне проекта, а не на уровне пользователя.
  • Убедитесь, что вы не используете пробелы в названии или значении переменной, так как это может привести к ошибкам.
  • Если переменные содержат специальные символы, такие как символы $, " и другие, они должны быть экранированы.

2. Убедитесь, что переменные доступны в правильном контексте

Когда вы запускаете скрипт, убедитесь, что он выполняется в контексте, где переменные окружения доступны. Если вы используете sh для запуска скрипта, это может привести к потере переменных окружения. Попробуйте использовать bash или . ./script.sh, чтобы сохранить контекст среды:

#!/bin/bash
echo $TWINE_USERNAME
echo $TWINE_PASSWORD
twine upload dist/* -u $TWINE_USERNAME -p $TWINE_PASSWORD --verbose

3. Обратите внимание на размеры переменных

Если ваши переменные окружения слишком большие, Travis CI может игнорировать их. Существует ограничение на размер переменных окружения (обычно около 4КБ). Убедитесь, что значения переменных не превышают это ограничение.

4. Проверяйте лог на наличие ошибок

Как вы уже указали, вы можете просмотреть лог и найти блоки кода, которые отвечают за инициализацию переменных окружения. Убедитесь, что в логе нет ошибок при считывании или создании этих переменных. Иногда логирование может помочь понять, на каком этапе теряются переменные.

5. Меняйте уровень видимости переменных

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

env:
  global:
    - TWINE_USERNAME=ваш_логин
    - TWINE_PASSWORD=ваш_пароль

6. Использование пустых переменных в конфигурации

Убедитесь, что в конфигурации вашего проекта пустые переменные не установлены. Переменные просто не должны присутствовать, если они не используются. В противном случае Travis CI может пытаться использовать их как пустые строки, что приведет к ошибкам, как у вас с twine.

Заключение

Ваш случай может быть не уникальным, и многие пользователи сталкиваются с аналогичными проблемами. Убедитесь, что вы тщательно проверили шаги, описанные выше, так как они могут помочь выявить причину, по которой переменные окружения не передаются в вашем сценарии. Если ни одно из предложенных решений не помогло, возможно, стоит обратиться в службу поддержки Travis CI или проверить актуальные обсуждения на форумах, так как возможны изменения в API или поведении CI/CD систем.

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

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