我有一个NodeJs应用程序。 我有一个詹金斯的工作,他做了很棒的事情:
我正在寻找改善构建的方法。我的一些想法
我还能做些什么来改善构建时间吗?
答案 0 :(得分:4)
一些好主意 - 这也是我也会考虑的:
首先,尝试测量每个步骤(克隆,npm install
,运行测试......)所需的时间,然后尝试改进每个步骤。您可以尝试专注于大部分时间占用的那个,或者您可以尝试获得一些快速获胜,然后再尝试破解更难的坚果。
一些想法:
git clone
吗?也许考虑改为git pull
。在构建结束时,执行git reset --hard ; git clean -f -d
作为删除任何未提交或本地更改的文件的最后一步。我发现这样做比每次完整git clone
要快得多。npm install
:根据上述步骤,如果保留上一版本中的node_modules
文件夹,此步骤也应该快得多。当然,存在更新或删除依赖关系的风险,这仍将存在。许多代码更改不需要您重新安装所有节点模块。您甚至可以设置一些逻辑来检测自上次构建以来package.json
文件是否已更改,并且在这种情况下仅运行完整的npm install
。git clone
和一次npm install
。白天的所有其他构建使用之前的构建状态,因此更快。如果您发现这会导致错误的结果,您可以安排干净的构建每天运行几次。s3cmd
/ aws命令 - 我认为这些可以与rsync
类似的方式工作,如果以正确的方式使用,它可以非常快速有效。仅作为最后的手段尝试git diff
路线。执行git pull
而不是git clone
可能已经解决了这个问题。这些是我将尝试作为第一步的一些初步想法。
答案 1 :(得分:1)
执行浅层克隆可加快克隆部分的速度。因为它没有下载所有提交。
git clone --depth 1 clone_url...
您应该可以使用此插件缓存node_modules
:https://plugins.jenkins.io/jobcacher
答案 2 :(得分:0)
我创建了这样的脚本来检查package.json的md5sum
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
'''
}
}