Travis.yml ./gradlew: Odmowa pozwolenia

119

Używanie Travis CI do istniejącego wywołania projektu systemu Android

$ ./gradlew build connectedCheck

Otrzymuję ten błąd:

/home/travis/build.sh: line 45: ./gradlew: Permission denied
The command "./gradlew build connectedCheck" failed and exited with 126 during .
Gabriele Mariotti
źródło

Odpowiedzi:

246

Zależy to od uprawnień exec do twojego gradlewskryptu unixowego .

Można to naprawić za pomocą polecenia:

git update-index --chmod=+x gradlew

Trochę opisu, aby zrozumieć problem.
Przede wszystkim możesz sprawdzić swoje uprawnienia za pomocą:

git ls-tree HEAD

Zobaczysz:

100644 blob xxxxxxxxxxx gradlew

Jak widać, plik ma uprawnienia 644.

Napraw to, ustawiając flagę wykonywalną w pliku gradlew, zmieniając go na 755:

git update-index --chmod=+x gradlew

Po prostu zatwierdź i prześlij zmiany:

git commit -m "permission access for travis"

[master e80ab1b] gradlew permission access for travis
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 gradlew

Ostatnie sprawdzenie uruchomione ponownie git ls-tree, aby zobaczyć zmianę:

git ls-tree HEAD

Możesz zobaczyć:

100755 blob xxxxxxxxxxxxx   gradlew

Innym sposobem rozwiązania tego problemu jest użycie:

before_install:
 - chmod +x gradlew

Tego rodzaju rozwiązanie nie zmienia uprawnień w repozytorium git, ale po prostu zmienia środowisko wykonawcze uprawnień podczas wykonywania.

Gabriele Mariotti
źródło
2
Zadziałało. Zrobiłem to w „before_script:” w moim przypadku. Dzięki!
Sudarshan Tanuku
1
Nie ma powodu, aby skrypt nie był wpisywany do gita z odpowiednimi uprawnieniami (wybrałbym 1754). Powstrzymuję się od dodawania dodatkowych chmodpoleceń w skryptach kompilacji, ponieważ 1) dodaje to niepotrzebnej złożoności 2) nie zadziała dla innych członków zespołu, którzy klonują repozytorium od nowa.
Alex
Dzięki. Pomogło mi.
Dimitri de Jesus
4
script:
 - chmod +x ./gradlew build connectedCheck

Dziękuje wszystkim. Ten kod jest dostępny. Główny nacisk położony jest nachmod +x

Allen.Cai
źródło