how to checkout only specific folder from git repo((monorepo)) and build

7,681

You can check out specific files or folders from a repo using git archive. I've done this from a Jenkinsfile using a shell command like so:

sh("git archive --remote=${repo_url} ${ref} ${path} | tar x")

You will, of course, need to set the variables repo_url (the url of the remote repository), ref (the ref/branch/commit/etc. to check out), and path (the path of the file or folder within the repo to check out).

Share:
7,681

Related videos on Youtube

gamechanger17
Author by

gamechanger17

Updated on September 18, 2022

Comments

  • gamechanger17
    gamechanger17 over 1 year

    Hey folks I need some help on the jenkinsfile. Below is my usecase

    This is the strcuture of my GIT repo:

    root
      |->app1
      |   |->jenkinsfile
      |   |->dockerfile1
      |->app2
          |->jenkinsfile
          |->dockerfile2
    

    I am having a monorepo, app1 and app2 in the root folder and when there is a change in app1 folder, only app1 should build and same for app2. I have defined the jenkinsfile in jenkins but when its build. its looking for dockerfile1 in root folder not inside app1.

    P.S: I can see some thread where people asking the same question but the answer is in detail.

    jenkinsfile:

    pipeline {
        agent any
    
        environment {
            PIPENV_VENV_IN_PROJECT = true
            DEVPI_USER = '\'jenkins_user\''
            DEVPI_PASSWORD = '\'V$5_Z%Bf-:mJ\''
            WORKSPACE="${WORKSPACE}/app1"
    
        }
        stages {
            stage('Notify Bitbucket') {
                steps {
                    bitbucketStatusNotify(buildState: 'INPROGRESS')
                }
            }
    
            stage('Build Environment') {
                steps {
                    sh 'docker build -t app-builder .'
                }
            }
    
            stage('Test') {
    
                steps{
                    sh 'docker run --rm app-builder pytest'
                }
            }
    
    • Argyle
      Argyle about 4 years
      It's hard to assist if we don't know what your Jenkinsfile is currently doing. Can you at least post the code block relevant to your question?
    • gamechanger17
      gamechanger17 about 4 years
      @Argyle: I know this jenkinsfile will not work. but this is something I need to do. whenever there is a change is sub-folder. it should build only that subfolder's app.