I've built custom docker image based on `ubuntu:21.04` for qt based android app development but encountered with weird bug when running `androiddeployqt` inside a pipelines.
java executable fails to test against execution permissions.
Here is log of pipeline execution:
Images used:
build : docker.io/siexp/docker-qt-android@sha256:d4752bfd6936dcfc8a9331c3a4b5099377a8f66a9ac23eb5dc527f569e1d06e1
+ JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
+ ls -la /usr/bin/java
lrwxrwxrwx. 1 root root 22 Jun 16 13:14 /usr/bin/java -> /etc/alternatives/java
+ ls -la /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
-rwxr-xr-x. 1 root root 14632 Apr 21 10:25 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
+ if [ ! -x "$JAVA_HOME/bin/java" ] ; then echo "not an exec $JAVA_HOME/bin/java" ; fi
not an exec /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
...
+ /opt/Qt/5.15.2/android/bin/androiddeployqt --input android_deployment_settings.json --output android-build --apk $BITBUCKET_CLONE_DIR/build/debug.apk --android-platform android-29 --gradle
...
ERROR: JAVA_HOME is set to an invalid directory: /usr/lib/jvm/java-8-openjdk-amd64/jre
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.
Problem is that `/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java` is executable (I'm able to run it inside pipeline) however test for executable `-x` fails. I suppose it somehow related to selinux
P.S.
When I run pipeline commands inside docker locally everything works fine
Hi @Mark Tsyrulnyk
Thank you for reaching out to the community.
Would it be possible for you to try to add the "export" command while setting your environment variable?
This is to make sure the variable is accessible to any process you run.
From:
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
To:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
Let me know how it goes.
Regards,
Mark C
This was my first guess when I tried to figure out what is a problem, unfortunately this is not a cause.
As you can see from the logs binary exist and JAVA_HOME variable is set
+ ls -la /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
-rwxr-xr-x. 1 root root 14632 Apr 21 10:25 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
+ if [ ! -x "$JAVA_HOME/bin/java" ] ; then echo "not an exec $JAVA_HOME/bin/java" ; fi
not an exec /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
the problem is exactly in `-x` check.
My workaround was to modify `gradlew` file and comment out JAVA_HOME checks in there
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Mark Tsyrulnyk
I see.
I actually tried your base image (siexp/docker-qt-android) and the following commands with the -x flag.
However, I didn't receive the echo message "not an exec".
image: siexp/docker-qt-android@sha256:d4752bfd6936dcfc8a9331c3a4b5099377a8f66a9ac23eb5dc527f569e1d06e1 pipelines: default: - step: script: - JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre - ls -la /usr/bin/java - ls -la /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java - if [ ! -x "$JAVA_HOME/bin/java" ] ; then echo "not an exec $JAVA_HOME/bin/java" ; fi - echo "Done"
Are you using Bitbucket Pipelines Caches by any chance whereas you're caching the directories below?
Regards,
Mark C
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.