DEV Community

Speed up Jenkins with npm build

Guixing Bai on November 29, 2017

Our team have many projects delivered by Jenkins. Every component need to be assembled by webpack which write in React.js or Vue.js. Each build wi...
Collapse
 
vitaliidasaev profile image
Vitalii Dasaev

I created such script to check md5sum of package.json in Jenkins:

stage('NPM Build') {
  steps {
    sh '''
    node -v && npm -v
    '''
    // rm -rf node_modules
    sh '''
    CACHE_FOLDER=${HOME}/.cache/md5
    echo "EXECUTOR_NUMBER: ${EXECUTOR_NUMBER}"
    MD5_FILE_NAME=package-json_${EXECUTOR_NUMBER}.md5sum

    [ -d ${CACHE_FOLDER} ] || mkdir -p ${CACHE_FOLDER}
    ls ${CACHE_FOLDER}

    if [ -f ${CACHE_FOLDER}/${MD5_FILE_NAME} ];then
      cp ${CACHE_FOLDER}/${MD5_FILE_NAME} ${MD5_FILE_NAME}
      md5sum package.json
      cat ${MD5_FILE_NAME}
      md5sum -c ${MD5_FILE_NAME} || npm ci
    else
      echo "No md5sum backup"
      npm ci
    fi

    echo "create new md5sum backup"
    md5sum package.json
    md5sum package.json > ${MD5_FILE_NAME}
    cp ${MD5_FILE_NAME} ${CACHE_FOLDER}
    '''
    sh '''
    npm run ngcc
    '''
    sh '''
    npm run build
    '''
  }
}
Enter fullscreen mode Exit fullscreen mode
Collapse
 
ttodua profile image
T. Todua

For the sake of whatever, please create a Jenkins plugin which will facilitate life of hundreds of others. it's untold overkill everytime doing npm install such unnecessarily

Collapse
 
guilhermejcgois profile image
Gois

How much fast is to cache on S3? Download, unzip, zip and upload time... My team have a similar problem due to npm install time

Collapse
 
khsing profile image
Guixing Bai

If you are using aws ec2, it will be very fast.

Collapse
 
guilhermejcgois profile image
Gois

I wrote a script to get MD5 only from dependencies and devDependencies, cause we do a patch bump on every merge to develop branch (we work with master and develop in a fork flow). Here is the gist.

Thread Thread
 
khsing profile image
Guixing Bai

Great!