Добавление ловушек к тестовому скрипту, запущенному в Travis CI - PullRequest
1 голос
/ 30 апреля 2019

У меня есть тестовый скрипт, который вызывается в .travis.yml:

script:
  - ./test.sh

Этот тестовый скрипт запускается всякий раз, когда коммит передается в репозиторий.Это сценарий bash, в котором я создаю временный каталог, добавляю ловушку для удаления этого каталога после завершения сценария и выполняю некоторую работу:

#!/usr/bin/env bash                                                                                                                                                                                                                                                                                                                                                         
set -o errexit

TMPDIR=$(mktemp --directory --tmpdir=${HOME})

trap 'rm -rf "${TMPDIR}"' EXIT

# ...some work...

Что вызывает проблемы, так это вызов trap,

Когда тесты пройдены, скрипт успешно завершает работу с кодом состояния 0.Сработала ловушка EXIT, которая начинает попытку удаления ${TMPDIR}.

Эта попытка не удалась из-за ошибок прав доступа, например:

rm: cannot remove ‘/home/travis/tmp.uaFEDOAgQt/.../log/error.log’: Permission denied
rm: cannot remove ‘/home/travis/tmp.uaFEDOAgQt/.../log/access.log’: Permission denied
The command "./test.sh" exited with 1.

Сценарий запускает процессы как Travisпользователь среды.Эти процессы создают эти (лог) файлы.Эти процессы не запускаются как другие пользователи.Поскольку процессы запускаются пользователем Travis, эти каталоги должны принадлежать пользователю Travis, поэтому их можно удалить.Однако их нельзя удалить.

Это не проблема, если я запускаю тестовый скрипт локально.Это происходит только как проблема в среде сборки Travis CI.

Одним из решений является отключение ловушки.Какие могут быть другие решения?Могу ли я добавить sudo к команде, запущенной в среде (trusty) Travis, без запроса сценария на ввод пароля?Я полагаю, что вызов sudo должен переопределить жалобы на разрешения, но не ясно, почему это должно быть ошибкой.

...