Я не могу запустить репо неинтерактивно внутри контейнера как часть работы вольным стилем.
Он запрашивает имя пользователя и адрес электронной почты. Я обошел это, сделав git config --global
внутри работы.
Но тогда он делает цветовой тест, и это висит бесконечно.
Глядя на исходный код репо, я вижу это
if os.isatty(0) and os.isatty(1) and not self.manifest.IsMirror:
if opt.config_name or self._ShouldConfigureUser():
self._ConfigureUser()
self._ConfigureColor()
Итак, я запустил в контейнере следующее:
python -C "import os; print os.isatty(0), os.isatty(1)"
и, конечно же, распечатано True True
Глядя на журнал Jenkins, он запускает контейнер с указанным --tty
, и, похоже, нет способа настроить этот параметр.
Я не могу найти опцию bash
для принудительного запуска скрипта в неинтерактивной оболочке. Если я помещу приведенную выше строку python в файл и выполню ее практически с любой комбинацией команд и опций, она все равно выведет True True
Только , если я вижу что-то другое, это если я использую перенаправление ввода / вывода
bash <a.sh
который печатает False True
- т.е. stdin
не tty, а
bash <a.sh >a.log
который печатает False False
.
Для сложного сценария есть ли проблемы с использованием подхода bash <script
?
Кто-нибудь знает магию Дженкинса, чтобы предотвратить запуск докера с помощью --tty
?
Я знаю, что --tty
является виновником. Я построил контейнер локально и запустил следующее
$ docker run repotest python -c "import os;print os.isatty(0), os.isatty(1)"
False False
$ docker run --tty repotest python -c "import os;print os.isatty(0), os.isatty(1)"
True True
Работающие версии:
- репо: 1.12.37 (для Ubuntu 16.04 apt-get)
- Дженкинс: 2,149
- Плагин Cloudbees Docker: 1.7.3
- Контейнерная база Ubuntu: xenial
Я использую опцию "Построить внутри контейнера докера".