Разрешение CircleCI не работает bash script
У меня есть файл circle.yml
, например:
dependencies:
override:
- meteor || curl https://install.meteor.com | /bin/sh
deployment:
production:
branch: "master"
commands:
- ./deploy.sh
Когда я нажимаю на Github, я получаю сообщение об ошибке:
/home/ubuntu/myproject/deploy.sh returned exit code 126
bash: line 1: /home/ubuntu/myproject/deploy.sh: Permission denied Action failed: /home/ubuntu/myproject/deploy.sh
Когда я запускаю команды, которые живут внутри deploy.sh
вне файла (под commands
), все работает нормально.
Все, что находится в файле circle.yml
, похоже, соответствует примерам в CircleCI docs. Что я делаю неправильно?
Ответы
Ответ 1
Несколько возможных проблем:
- deploy.sh не может быть помечен как исполняемый файл (
chmod +x deploy.sh
исправить это)
- Первая строка deploy.sh может не быть запущенной оболочкой...
Если первое не работает, можете ли мы увидеть содержимое deploy.sh?
Ответ 2
У меня была такая же проблема. Я добавил sh в начало раздела моих команд, чтобы заставить его работать.
deployment:
production:
branch: "master"
commands:
- sh ./deploy.sh
Надеюсь, это исправление спасет всех, кто-то в будущем.
Ответ 3
Как сообщает @palfrey, script, вероятно, не помечен как исполняемый файл, и иногда кажется, что он помечен как неправильный при развертывании, даже если вы ранее запускали chmod +x
на своем script на вашем локальном компьютере. (Почему? Я не знаю. Если кто-то действительно просветит меня!)
Вот общая команда, используемая для обеспечения того, чтобы ваши скрипты всегда были помечены как исполняемые. Предполагается, что все они расположены в каталоге /home/ubuntu/${CIRCLE_PROJECT_REPONAME}/scripts
, и все имеют расширение .sh
. Если ваш каталог отличается (другими), отредактируйте его вместо этого.
Так как все мои скрипты source, общий script (shared.sh
) в верхней части каждого script, вызываемый circle.yml
, я добавляю следующий код до shared.sh
, который гарантирует, что все сценарии отмечены как исполняемые:
SCRIPTS="/home/ubuntu/${CIRCLE_PROJECT_REPONAME}/scripts"
find "${SCRIPTS}" | grep "\.sh$" | xargs chmod +x
Работает как шарм.: -)