我在我的角应用程序中支持11种语言,我使用的是角的内置国际化(XLF文件)。做一个发行版需要花费很长时间(因为它构建了11次应用程序!)如何并行运行构建任务(我有一个4核CPU)?
发布于 2019-06-05 15:33:29
因为我不想为了将来添加一种新的语言而改变代码(我想是DevOps友好的方法吧!)最后我编写了一个shell脚本( DevOps将使用该脚本):
for arg; do \
echo "Building for $arg"
ng build --output-path $PROJECT_ROOT/public/$arg \
--aot \
--prod \
--base-href /$arg/ \
--i18n-file $LANGUAGE_ASSETS_DIR/i18n/$arg.xlf \
--i18n-format xlf \
--i18n-locale $arg & \
done
wait然后添加了i18n npm任务:
"build:i18n": "bash $PROJECT_ROOT/i18n.sh $LANGS",以及:
LANGS= en de fr ...ng build命令末尾的符号是分叉新进程,这使得它成为并行的。我获得了60 %的构建时间改进。
为了增加对新语言的支持,DevOps所需要做的就是将转换的xlf文件添加到资产中(在我们的情况下,在AWS S3桶中单独托管),然后用新的语言环境更新LANGS环境变量,最后触发构建任务(没有代码更改)。
编辑:
还需要在for循环的末尾添加“等待”命令,以等待所有任务的完成。
发布于 2020-02-19 14:46:43
关于文档:我在Jenkins管道中的上述方法
def knownLocales = ["en-CH","en-US","en-GB","de-CH","de-DE"]
def ngAotBuildMap = [:]
steps {
script {
for (aot_locale in knownLocales) {
// beware of how Groovy creates closures in loops
String aotLocaleClosure = "${aot_locale}"
ngAotBuildMap[aot_locale] = {
sh """
echo "Building locale ${aotLocaleClosure}"
cd $WORKSPACE/webclient
rm -R -f $WORKSPACE/webclient/dist/${aotLocaleClosure}/
ng build --no-progress --configuration=${params.PARAM_SPRING_PROFILE}-${aotLocaleClosure}
"""
}
}
// https://stackoverflow.com/questions/37333796/using-failfast-with-closure-map-breaks-parallel-step/37356318
ngAotBuildMap.failFast = true
parallel ngAotBuildMap
}
}然而:在连续构建中,一个AOT构建花费了3分钟30秒,在5个地区总共需要18分钟左右。使用上面的脚本,1 AOT构建需要15分钟30秒,总时间几乎没有变化。我猜在我的例子中,服务器资源已经在顺序构建中被最大化了,所以并行构建不会增加太多。
https://stackoverflow.com/questions/56462203
复制相似问题