react-native-community / docker-android

Android Docker Image for React Native and common android development.
MIT License
485 stars 144 forks source link

Unable to integrate with Jenkins #116

Open nadishan opened 3 years ago

nadishan commented 3 years ago

I run this image using Jenkins. But gradlewis failed with this error message.

The SDK directory is not writable (/opt/android)

Jenkinsefile

pipeline {
  agent {
    docker {
      image 'reactnativecommunity/react-native-android'
    }

  }
  stages {
    stage('Test') {
      steps {
        sh 'npm install'
      }
    }

    stage('Build') {
      steps {
        sh 'cd android && chmod +x gradlew && ./gradlew assembleRelease'
      }
    }

    stage('PROD') {
      parallel {
        stage('PROD') {
          steps {
            echo 'prod'
          }
        }

        stage('DEV') {
          steps {
            echo 'dev'
          }
        }

      }
    }

  }
  environment {
    npm_config_cache = 'npm-cache'
  }
}
gengjiawen commented 3 years ago

Not sure jenkins version you are using. Works well on our jenkins server.

robcee commented 3 years ago

I'm having issues with our jenkins installation as well. We're on Jenkins 2.289 and when using the docker agent, we're running inside it as the jenkins user on the node. This runs into a bunch of permissions and home directory issues inside the container during yarn / npm installs.

To get around this, we've tried running the container as root by passing -u 0:0. This works fine, but the outputs on our workspace are all owned by the root user (uid 0) and not readable by any of the subsequent steps (e.g., archiving artifacts).

If you @gengjiawen have any insights, I'd love to hear them. Thanks!

HugoGresse commented 2 years ago

the issue on my side was using another buildToolsVersion from the one referenced in this repo. For android 30, the build tools available is 30.0.3 which is different from the one react native used (30.0.2). This cause gradle to download it, which is something not possible.

amdrade commented 3 months ago

Can I pass it by ARG parameter? ANDROID_TOOLS_VERSION

docker build --build-arg ANDROID_TOOLS_VERSION=31.0.0 --build-arg ANDROID_BUILD_VERSION=31 . -f Dockerfile -t docker-rn

even so it only installs version 33.0.0