Travis.yml ./gradlew: Permiso denegado

119

Uso de Travis CI para una llamada de proyecto de Android existente

$ ./gradlew build connectedCheck

Me sale este error:

/home/travis/build.sh: line 45: ./gradlew: Permission denied
The command "./gradlew build connectedCheck" failed and exited with 126 during .
Gabriele Mariotti
fuente

Respuestas:

246

Depende del permiso de ejecución de su gradlewscript Unix .

Se puede arreglar usando el comando:

git update-index --chmod=+x gradlew

Una pequeña descripción para comprender el problema.
En primer lugar, puede verificar sus permisos usando:

git ls-tree HEAD

Ya verás:

100644 blob xxxxxxxxxxx gradlew

Como puede ver, el archivo tiene permiso 644.

Solucionarlo configurando la bandera ejecutable en su archivo gradlew cambiándolo a 755:

git update-index --chmod=+x gradlew

Simplemente confirme y presione los cambios:

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

Una última comprobación ejecutando git ls-tree nuevamente para ver el cambio:

git ls-tree HEAD

Puedes ver:

100755 blob xxxxxxxxxxxxx   gradlew

Otra forma de resolver este problema es usar:

before_install:
 - chmod +x gradlew

Este tipo de solución no cambia el permiso en su repositorio de git, solo cambia el tiempo de ejecución del permiso en la ejecución.

Gabriele Mariotti
fuente
2
Funcionó. Hice eso en 'before_script:' en mi caso. ¡Gracias!
Sudarshan Tanuku
1
No hay razón para no registrar el script en git con los permisos correctos (iría por 1754). Me abstengo de agregar chmodcomandos adicionales en los scripts de compilación porque 1) agrega complejidad innecesaria 2) no funcionará para otros miembros del equipo que clonen el repositorio nuevamente.
Alex
Gracias. Me ayudó.
Dimitri de Jesus
4
script:
 - chmod +x ./gradlew build connectedCheck

Gracias a todos. Este código está disponible. El enfoque clave está enchmod +x

Allen.Cai
fuente