Patrik Alexits
Patrik Alexits

Reputation: 997

Jenkins Android building pipeline from different Git repositories

Hi, I would like to create a job in Jenkins where I would like to build one apk from 2 Android repositories.

I tried it with both Jenkinsfile and Gradle wrapper in the Jenkins GUI, but both are giving the same error at the same point, at the verification Gradle commands.

Since the code in the first repository is depending on the code from the 2nd, the structure was designed that they have to be sibling directories to reach each other.

  • What went wrong:

Could not determine the dependencies of task ':app:testStaging_gakUnitTest'.

Could not resolve all task dependencies for configuration ':app:staging_gakUnitTestRuntimeClasspath'.

Could not resolve project :ticketingcommons.

Required by:

project :app

Unable to find a matching variant of project :ticketingcommons:

enter image description here

First one is a specific application code repository.

Second one contains the commons for the specific apps to run tests, validation etc...

In the configuration I only set the source-code management and building process fields so far.

enter image description here

enter image description here

I have been trying with pipelines, freestyle projects, multibranch pipelines and nothing seemed to be working.

In the Jenkinsfile, I have the following code, which is supposed to do the same I was doing from the Jenkins GUI:

pipeline {
  agent {
  // Run on a build agent where we have the Android SDK installed
  label 'master'
  }
  options {
    // Stop the build early in case of compile or test failures
    skipStagesAfterUnstable()
  }
  stages {
    stage('Compile') {
      steps {
        // Compile the app and its dependencies
        sh 'chmod +x gradlew'
        sh './gradlew compileDebugSources'
    }
  }
    stage('Unit test') {
      steps {
        // Compile and run the unit tests for the app and its dependencies
        sh './gradlew test'

        // Analyse the test results and update the build result as appropriate
        junit 'app/build/test-results/**/*.xml'
      }
    }
    stage('Build APK') {
      steps {
        // Finish building and packaging the APK
        sh './gradlew assembleDev'

        // Archive the APKs so that they can be downloaded from Jenkins
        archiveArtifacts '**/*.apk'
      }
    }
    stage('Stage Archive') {
      steps {
        //tell Jenkins to archive the apks
        archiveArtifacts artifacts: 'app/build/outputs/apk/*.apk', fingerprint: true
      }
    }
    stage('Static analysis') {
      steps {
        // Run Lint and analyse the results
        sh './gradlew lintDebug'
        androidLint pattern: '**/lint-results-*.xml'
      }
    }
  }
  post {
    failure {
      // Notify developer team of the failure
      mail to: '[email protected]', subject: 'Oops!', body: "Build ${env.BUILD_NUMBER} failed; ${env.BUILD_URL}"
    }
  }
}

I don't know how to make Jenkins have them as sibling directories after cloning them, so the app can see the commons and run the commands. Now it is failing at the tests, but every validation Gradle command makes it fail.

Upvotes: 1

Views: 520

Answers (1)

Abbas
Abbas

Reputation: 3331

A simple solution could be to create two jobs and customize their workspace directory (So you can use the same directory for both jobs). In your first job just load the repository from git and in the second load the repository and run whatever commands you want.

Upvotes: 2

Related Questions